diff --git a/CMakeLists.txt b/CMakeLists.txt index 5e4bab9..434c690 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,6 +5,15 @@ ENABLE_TESTING() SET(NV_CMAKE_DIR "${NV_SOURCE_DIR}/cmake") SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${NV_CMAKE_DIR}") +OPTION(SQUISH_FULL_LIBRARY "Makes the whole squish library compiled, instead of just what's needed in NVTT. Please be aware that this build path is not officially maintained." OFF) +MARK_AS_ADVANCED(SQUISH_FULL_LIBRARY) +OPTION(INSTALL_SQUISH "Install the (internal) squish library alongside NVTT binaries." OFF) +MARK_AS_ADVANCED(INSTALL_SQUISH) +OPTION(INSTALL_BC6H "Install the (internal) BC6H library alongside NVTT binaries." OFF) +MARK_AS_ADVANCED(INSTALL_BC6H) +OPTION(INSTALL_BC7 "Install the (internal) BC7 library alongside NVTT binaries." OFF) +MARK_AS_ADVANCED(INSTALL_BC7) + # GCC check (needs -std:c++11 flag) #if(CMAKE_COMPILER_IS_GNUCC) # ADD_DEFINITIONS("-std=c++11") diff --git a/src/bc6h/CMakeLists.txt b/src/bc6h/CMakeLists.txt index 5c01c6c..9682001 100644 --- a/src/bc6h/CMakeLists.txt +++ b/src/bc6h/CMakeLists.txt @@ -21,3 +21,10 @@ IF(NOT WIN32) SET_TARGET_PROPERTIES(bc6h PROPERTIES COMPILE_FLAGS -fPIC) ENDIF(CMAKE_COMPILER_IS_GNUCXX) ENDIF(NOT WIN32) + +IF(INSTALL_BC6H) + INSTALL(TARGETS bc6h + RUNTIME DESTINATION bin + LIBRARY DESTINATION lib + ARCHIVE DESTINATION lib/static) +ENDIF(INSTALL_BC6H) diff --git a/src/bc7/CMakeLists.txt b/src/bc7/CMakeLists.txt index 99df434..03b26ba 100644 --- a/src/bc7/CMakeLists.txt +++ b/src/bc7/CMakeLists.txt @@ -31,3 +31,10 @@ IF(NOT WIN32) SET_TARGET_PROPERTIES(bc7 PROPERTIES COMPILE_FLAGS -fPIC) ENDIF(CMAKE_COMPILER_IS_GNUCXX) ENDIF(NOT WIN32) + +IF(INSTALL_BC7) + INSTALL(TARGETS bc7 + RUNTIME DESTINATION bin + LIBRARY DESTINATION lib + ARCHIVE DESTINATION lib/static) +ENDIF(INSTALL_BC7) diff --git a/src/nvimage/ImageIO.cpp b/src/nvimage/ImageIO.cpp index 9e67b63..733ce05 100644 --- a/src/nvimage/ImageIO.cpp +++ b/src/nvimage/ImageIO.cpp @@ -19,6 +19,7 @@ #include "nvcore/StrLib.h" #include "nvcore/StdStream.h" #include "nvcore/TextWriter.h" +#include // Extern #if defined(NV_HAVE_FREEIMAGE) diff --git a/src/nvtt/squish/CMakeLists.txt b/src/nvtt/squish/CMakeLists.txt index 832013e..05e9a7c 100644 --- a/src/nvtt/squish/CMakeLists.txt +++ b/src/nvtt/squish/CMakeLists.txt @@ -20,6 +20,23 @@ SET(SQUISH_SRCS simd_sse.h simd_ve.h) +# Additionnal squish source files which are not included in NVTT by default +IF(SQUISH_FULL_LIBRARY) + SET(SQUISH_SRCS ${SQUISH_SRCS} + alpha.h + alpha.cpp + clusterfit.h + clusterfit.cpp + rangefit.h + rangefit.cpp + singlechannelfit.h + singlechannelfit.cpp + singlecolourfit.h + singlecolourfit.cpp + squish.cpp + ) +ENDIF(SQUISH_FULL_LIBRARY) + ADD_LIBRARY(squish STATIC ${SQUISH_SRCS}) IF(NOT WIN32) @@ -33,3 +50,9 @@ IF(NOT WIN32) ENDIF(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_CLANGXX) ENDIF(NOT WIN32) +IF(INSTALL_SQUISH) + INSTALL(TARGETS squish + RUNTIME DESTINATION bin + LIBRARY DESTINATION lib + ARCHIVE DESTINATION lib/static) +ENDIF(INSTALL_SQUISH) diff --git a/src/nvtt/squish/alpha.cpp b/src/nvtt/squish/alpha.cpp index 4242bb8..2d199a4 100644 --- a/src/nvtt/squish/alpha.cpp +++ b/src/nvtt/squish/alpha.cpp @@ -26,7 +26,7 @@ #include "alpha.h" #include -namespace squish { +namespace nvsquish { static int FloatToInt( float a, int limit ) { @@ -323,4 +323,4 @@ void DecompressAlphaDxt5( u8* rgba, void const* block ) rgba[4*i + 3] = codes[indices[i]]; } -} // namespace squish +} // namespace nvsquish diff --git a/src/nvtt/squish/alpha.h b/src/nvtt/squish/alpha.h index 2fb3baf..3b4ce02 100644 --- a/src/nvtt/squish/alpha.h +++ b/src/nvtt/squish/alpha.h @@ -28,7 +28,7 @@ #include "squish.h" -namespace squish { +namespace nvsquish { void CompressAlphaDxt3( u8 const* rgba, void* block ); void CompressAlphaDxt5( u8 const* rgba, void* block ); @@ -36,6 +36,6 @@ void CompressAlphaDxt5( u8 const* rgba, void* block ); void DecompressAlphaDxt3( u8* rgba, void const* block ); void DecompressAlphaDxt5( u8* rgba, void const* block ); -} // namespace squish +} // namespace nvsquish #endif // ndef SQUISH_ALPHA_H diff --git a/src/nvtt/squish/clusterfit.h b/src/nvtt/squish/clusterfit.h index e115cd3..d4ee851 100644 --- a/src/nvtt/squish/clusterfit.h +++ b/src/nvtt/squish/clusterfit.h @@ -78,6 +78,6 @@ private: int m_order[16]; }; -} // namespace squish +} // namespace nvsquish #endif // ndef SQUISH_CLUSTERFIT_H diff --git a/src/nvtt/squish/colourblock.cpp b/src/nvtt/squish/colourblock.cpp index 37e4b02..6bcb68c 100644 --- a/src/nvtt/squish/colourblock.cpp +++ b/src/nvtt/squish/colourblock.cpp @@ -53,7 +53,7 @@ static int FloatTo565( Vec3::Arg colour ) return ( r << 11 ) | ( g << 5 ) | b; } -static void WriteColourBlock( int a, int b, u8* indices, void* block ) +void WriteColourBlock( int a, int b, u8* indices, void* block ) { // get the block as bytes u8* bytes = ( u8* )block; diff --git a/src/nvtt/squish/colourblock.h b/src/nvtt/squish/colourblock.h index bb0c3b0..8ab0ace 100644 --- a/src/nvtt/squish/colourblock.h +++ b/src/nvtt/squish/colourblock.h @@ -31,6 +31,7 @@ namespace nvsquish { +void WriteColourBlock(int a, int b, u8* indices, void* block); void WriteColourBlock3( Vec3::Arg start, Vec3::Arg end, u8 const* indices, void* block ); void WriteColourBlock4( Vec3::Arg start, Vec3::Arg end, u8 const* indices, void* block ); //void WriteColourBlock3( Vec3::Arg start, Vec3::Arg end, uint indices, void* block ); diff --git a/src/nvtt/squish/rangefit.cpp b/src/nvtt/squish/rangefit.cpp index 93c0a69..cda6e44 100644 --- a/src/nvtt/squish/rangefit.cpp +++ b/src/nvtt/squish/rangefit.cpp @@ -28,11 +28,12 @@ #include "colourblock.h" #include -namespace squish { +namespace nvsquish { -RangeFit::RangeFit( ColourSet const* colours, int flags ) - : ColourFit( colours, flags ) +RangeFit::RangeFit( ColourSet const* colours, int flags ) { + SetColourSet(colours, flags); + // initialise the metric bool perceptual = ( ( m_flags & kColourMetricPerceptual ) != 0 ); if( perceptual ) @@ -49,7 +50,7 @@ RangeFit::RangeFit( ColourSet const* colours, int flags ) float const* weights = m_colours->GetWeights(); // get the covariance matrix - Sym3x3 covariance = ComputeWeightedCovariance( count, values, weights ); + Sym3x3 covariance = ComputeWeightedCovariance( count, values, weights, Vec3(1,1,1) ); // compute the principle component Vec3 principle = ComputePrincipleComponent( covariance ); @@ -199,4 +200,4 @@ void RangeFit::Compress4( void* block ) } } -} // namespace squish +} // namespace nvsquish diff --git a/src/nvtt/squish/rangefit.h b/src/nvtt/squish/rangefit.h index 7952019..6756b64 100644 --- a/src/nvtt/squish/rangefit.h +++ b/src/nvtt/squish/rangefit.h @@ -30,7 +30,7 @@ #include "colourfit.h" #include "maths.h" -namespace squish { +namespace nvsquish { class ColourSet; @@ -49,6 +49,6 @@ private: float m_besterror; }; -} // squish +} // namespace nvsquish #endif // ndef SQUISH_RANGEFIT_H diff --git a/src/nvtt/squish/singlechannelfit.cpp b/src/nvtt/squish/singlechannelfit.cpp index 2abc9a2..de88ac7 100644 --- a/src/nvtt/squish/singlechannelfit.cpp +++ b/src/nvtt/squish/singlechannelfit.cpp @@ -29,11 +29,12 @@ #include "colourblock.h" #include -namespace squish { +namespace nvsquish { -SingleChannelFit::SingleChannelFit( ColourSet const* colours, int const flags ) - : ColourFit( colours, flags ) +SingleChannelFit::SingleChannelFit( ColourSet const* colours, int const flags ) { + SetColourSet(colours, flags); + // cache some values int const count = m_colours->GetCount(); Vec3 const* values = m_colours->GetPoints(); @@ -42,7 +43,7 @@ SingleChannelFit::SingleChannelFit( ColourSet const* colours, int const flags ) m_g_min = 63; m_g_max = 0; - for(uint i = 0; i < count; i++) { + for(int i = 0; i < count; i++) { int grey = int(values[i].Y() * 255.0f); // @@ rounding? grey = std::min(grey, 255); // clamp to [0, 1) @@ -141,4 +142,4 @@ void SingleChannelFit::Compress4( void* block ) } -} // namespace squish +} // namespace nvsquish diff --git a/src/nvtt/squish/singlechannelfit.h b/src/nvtt/squish/singlechannelfit.h index 40de0a2..357ae8c 100644 --- a/src/nvtt/squish/singlechannelfit.h +++ b/src/nvtt/squish/singlechannelfit.h @@ -31,7 +31,7 @@ #include "maths.h" #include "colourfit.h" -namespace squish { +namespace nvsquish { class SingleChannelFit : public ColourFit { @@ -48,6 +48,6 @@ private: int m_g_max; }; -} // namespace squish +} // namespace nvsquish #endif // ndef SQUISH_SINGLECHANNELFIT_H diff --git a/src/nvtt/squish/singlecolourfit.cpp b/src/nvtt/squish/singlecolourfit.cpp index 4e1bb9c..3be544d 100644 --- a/src/nvtt/squish/singlecolourfit.cpp +++ b/src/nvtt/squish/singlecolourfit.cpp @@ -27,7 +27,7 @@ #include "colourset.h" #include "colourblock.h" -namespace squish { +namespace nvsquish { struct SourceBlock { @@ -59,8 +59,9 @@ static int FloatToInt( float a, int limit ) } SingleColourFit::SingleColourFit( ColourSet const* colours, int flags ) - : ColourFit( colours, flags ) { + SetColourSet(colours, flags); + // grab the single colour Vec3 const* values = m_colours->GetPoints(); m_colour[0] = ( u8 )FloatToInt( 255.0f*values->X(), 255 ); @@ -169,4 +170,4 @@ void SingleColourFit::ComputeEndPoints( int count, SingleColourLookup const* con } } -} // namespace squish +} // namespace nvsquish diff --git a/src/nvtt/squish/singlecolourfit.h b/src/nvtt/squish/singlecolourfit.h index 3c4a1a3..eb75335 100644 --- a/src/nvtt/squish/singlecolourfit.h +++ b/src/nvtt/squish/singlecolourfit.h @@ -29,7 +29,7 @@ #include #include "colourfit.h" -namespace squish { +namespace nvsquish { class ColourSet; struct SingleColourLookup; @@ -53,6 +53,6 @@ private: int m_besterror; }; -} // namespace squish +} // namespace nvsquish #endif // ndef SQUISH_SINGLECOLOURFIT_H diff --git a/src/nvtt/squish/squish.cpp b/src/nvtt/squish/squish.cpp index 393ebf4..035d48a 100644 --- a/src/nvtt/squish/squish.cpp +++ b/src/nvtt/squish/squish.cpp @@ -32,7 +32,7 @@ #include "alpha.h" #include "singlecolourfit.h" -namespace squish { +namespace nvsquish { static int FixFlags( int flags ) { @@ -85,7 +85,8 @@ void Compress( u8 const* rgba, void* block, int flags ) else { // default to a cluster fit - ClusterFit fit( &colours, flags ); + ClusterFit fit; + fit.SetColourSet(&colours, flags); fit.Compress( colourBlock ); } @@ -222,4 +223,4 @@ void DecompressImage( u8* rgba, int width, int height, void const* blocks, int f } } -} // namespace squish +} // namespace nvsquish