diff --git a/library/PolyVoxCore/CMakeLists.txt b/library/PolyVoxCore/CMakeLists.txt index 5521f1dc..83a25fb9 100644 --- a/library/PolyVoxCore/CMakeLists.txt +++ b/library/PolyVoxCore/CMakeLists.txt @@ -110,6 +110,7 @@ SET(CORE_INC_FILES SET(IMPL_SRC_FILES source/Impl/ErrorHandling.cpp source/Impl/MarchingCubesTables.cpp + source/Impl/MinizWrapper.cpp source/Impl/RandomUnitVectors.cpp source/Impl/RandomVectors.cpp source/Impl/Timer.cpp @@ -124,6 +125,7 @@ SET(IMPL_INC_FILES include/PolyVoxCore/Impl/Config.h include/PolyVoxCore/Impl/ErrorHandling.h include/PolyVoxCore/Impl/MarchingCubesTables.h + include/PolyVoxCore/Impl/MinizWrapper.h include/PolyVoxCore/Impl/RandomUnitVectors.h include/PolyVoxCore/Impl/RandomVectors.h include/PolyVoxCore/Impl/SubArray.h diff --git a/library/PolyVoxCore/include/PolyVoxCore/Impl/MinizWrapper.h b/library/PolyVoxCore/include/PolyVoxCore/Impl/MinizWrapper.h new file mode 100644 index 00000000..d74a3278 --- /dev/null +++ b/library/PolyVoxCore/include/PolyVoxCore/Impl/MinizWrapper.h @@ -0,0 +1,39 @@ +/******************************************************************************* +Copyright (c) 2005-2013 David Williams + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*******************************************************************************/ + +#ifndef __PolyVox_MinizWrapper_H__ +#define __PolyVox_MinizWrapper_H__ + +// Diable things we don't need, and in particular the zlib compatible names which +// would cause conflicts if a user application is using both PolyVox and zlib. +#define MINIZ_NO_STDIO +#define MINIZ_NO_ARCHIVE_APIS +#define MINIZ_NO_TIME +#define MINIZ_NO_ZLIB_APIS +#define MINIZ_NO_ZLIB_COMPATIBLE_NAMES +#define MINIZ_NO_MALLOC + +#define MINIZ_HEADER_FILE_ONLY +#include "PolyVoxCore/Impl/miniz.c" + +#endif //__PolyVox_MinizWrapper_H__ \ No newline at end of file diff --git a/library/PolyVoxCore/include/PolyVoxCore/MinizCompressor.h b/library/PolyVoxCore/include/PolyVoxCore/MinizCompressor.h index 7ea8f967..2f445387 100644 --- a/library/PolyVoxCore/include/PolyVoxCore/MinizCompressor.h +++ b/library/PolyVoxCore/include/PolyVoxCore/MinizCompressor.h @@ -3,6 +3,8 @@ #include "PolyVoxCore/Compressor.h" +#include "PolyVoxCore/Impl/MinizWrapper.h" + namespace PolyVox { /** @@ -34,7 +36,7 @@ namespace PolyVox // tdefl_compressor contains all the state needed by the low-level compressor so it's a pretty big struct (~300k). // We're storing it by void* because miniz does not supply a header and we don't want to include the .c file from // here as it will cause linker problems. - void* m_pDeflator; + tdefl_compressor* m_pDeflator; }; } diff --git a/library/PolyVoxCore/source/MinizCompressor.cpp b/library/PolyVoxCore/source/MinizCompressor.cpp index aa35c644..d2b127d3 100644 --- a/library/PolyVoxCore/source/MinizCompressor.cpp +++ b/library/PolyVoxCore/source/MinizCompressor.cpp @@ -4,12 +4,12 @@ // Diable things we don't need, and in particular the zlib compatible names which // would cause conflicts if a user application is using both PolyVox and zlib. -#define MINIZ_NO_STDIO +/*#define MINIZ_NO_STDIO #define MINIZ_NO_ARCHIVE_APIS #define MINIZ_NO_TIME #define MINIZ_NO_ZLIB_APIS #define MINIZ_NO_ZLIB_COMPATIBLE_NAMES -#define MINIZ_NO_MALLOC +#define MINIZ_NO_MALLOC*/ #include "PolyVoxCore/Impl/ErrorHandling.h" @@ -20,7 +20,7 @@ // directives) but the other problem is that we are using #pragma GCC system_header to supress warnings which would // then be in the .c part of the code. If we ever update GCC on the CDash machine so that it properly supports '#pragma // GCC diagnosic ignored' (or so that it doesn't warn in the first place) then we can reconsider spliting miniz.c in two. -#include "PolyVoxCore/Impl/miniz.c" +//#include "PolyVoxCore/Impl/miniz.c" #include @@ -39,14 +39,14 @@ namespace PolyVox { // Create and store the deflator. tdefl_compressor* pDeflator = new tdefl_compressor; - m_pDeflator = reinterpret_cast(pDeflator); + m_pDeflator = /*reinterpret_cast*/(pDeflator); // The number of dictionary probes to use at each compression level (0-10). 0=implies fastest/minimal possible probing. // The discontinuity is unsettling but may be explained by the 'iCompressionLevel <= 3' check later? static const mz_uint s_tdefl_num_probes[11] = { 0, 1, 6, 32, 16, 32, 128, 256, 512, 768, 1500 }; // Create tdefl() compatible flags (we have to compose the low-level flags ourselves, or use tdefl_create_comp_flags_from_zip_params() but that means MINIZ_NO_ZLIB_APIS can't be defined). - m_uCompressionFlags = TDEFL_WRITE_ZLIB_HEADER | s_tdefl_num_probes[MZ_MIN(10, iCompressionLevel)] | ((iCompressionLevel <= 3) ? TDEFL_GREEDY_PARSING_FLAG : 0); + m_uCompressionFlags = TDEFL_WRITE_ZLIB_HEADER | s_tdefl_num_probes[(std::min)(10, iCompressionLevel)] | ((iCompressionLevel <= 3) ? TDEFL_GREEDY_PARSING_FLAG : 0); if (!iCompressionLevel) { m_uCompressionFlags |= TDEFL_FORCE_ALL_RAW_BLOCKS; @@ -56,7 +56,7 @@ namespace PolyVox MinizCompressor::~MinizCompressor() { // Delete the deflator - tdefl_compressor* pDeflator = reinterpret_cast(m_pDeflator); + tdefl_compressor* pDeflator = /*reinterpret_cast*/(m_pDeflator); delete pDeflator; } @@ -67,7 +67,7 @@ namespace PolyVox unsigned long source_len = uUncompressedInputSize; // This is really over conservative. (And lame, but it's actually pretty tricky to compute a true upper bound given the way tdefl's blocking works.) - return MZ_MAX(128 + (source_len * 110) / 100, 128 + source_len + ((source_len / (31 * 1024)) + 1) * 5); + return (std::max)(128 + (source_len * 110) / 100, 128 + source_len + ((source_len / (31 * 1024)) + 1) * 5); } uint32_t MinizCompressor::compress(const void* pSrcData, uint32_t uSrcLength, void* pDstData, uint32_t uDstLength) diff --git a/library/polyvoxcore/source/Impl/MinizWrapper.cpp b/library/polyvoxcore/source/Impl/MinizWrapper.cpp new file mode 100644 index 00000000..9670ba41 --- /dev/null +++ b/library/polyvoxcore/source/Impl/MinizWrapper.cpp @@ -0,0 +1,27 @@ +/******************************************************************************* +Copyright (c) 2005-2013 David Williams + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*******************************************************************************/ + +#include "PolyVoxCore/Impl/MinizWrapper.h" + +#undef MINIZ_HEADER_FILE_ONLY +#include "PolyVoxCore/Impl/miniz.c" \ No newline at end of file