summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xmisc/hooks/pre-commit-clang-format5
-rw-r--r--thirdparty/README.md2
-rw-r--r--thirdparty/squish/squish.cpp24
-rw-r--r--thirdparty/squish/squish.h9
4 files changed, 31 insertions, 9 deletions
diff --git a/misc/hooks/pre-commit-clang-format b/misc/hooks/pre-commit-clang-format
index 88c43fc1f5..0971ebe23a 100755
--- a/misc/hooks/pre-commit-clang-format
+++ b/misc/hooks/pre-commit-clang-format
@@ -82,6 +82,11 @@ $DELETE_OLD_PATCHES && rm -f /tmp/$prefix*.patch
# create one patch containing all changes to the files
git diff-index --cached --diff-filter=ACMR --name-only $against -- | while read file;
do
+ # ignore thirdparty files
+ if grep -q "thirdparty" <<< $file; then
+ continue;
+ fi
+
# ignore file if we do check for file extensions and the file
# does not match any of the extensions specified in $FILE_EXTS
if $PARSE_EXTS && ! matches_extension "$file"; then
diff --git a/thirdparty/README.md b/thirdparty/README.md
index f35a95df37..8aec75b57d 100644
--- a/thirdparty/README.md
+++ b/thirdparty/README.md
@@ -204,7 +204,7 @@ Files extracted from upstream source:
## squish
- Upstream: https://sourceforge.net/projects/libsquish
-- Version: 1.14
+- Version: 1.15
- License: MIT
Files extracted from upstream source:
diff --git a/thirdparty/squish/squish.cpp b/thirdparty/squish/squish.cpp
index d3cbabbafd..1d22a64ad6 100644
--- a/thirdparty/squish/squish.cpp
+++ b/thirdparty/squish/squish.cpp
@@ -177,13 +177,17 @@ void CompressImage( u8 const* rgba, int width, int height, int pitch, void* bloc
// fix any bad flags
flags = FixFlags( flags );
- // initialise the block output
- u8* targetBlock = reinterpret_cast< u8* >( blocks );
- int bytesPerBlock = ( ( flags & ( kDxt1 | kBc4 ) ) != 0 ) ? 8 : 16;
-
// loop over blocks
+#ifdef SQUISH_USE_OPENMP
+# pragma omp parallel for
+#endif
for( int y = 0; y < height; y += 4 )
{
+ // initialise the block output
+ u8* targetBlock = reinterpret_cast< u8* >( blocks );
+ int bytesPerBlock = ( ( flags & ( kDxt1 | kBc4 ) ) != 0 ) ? 8 : 16;
+ targetBlock += ( (y / 4) * ( (width + 3) / 4) ) * bytesPerBlock;
+
for( int x = 0; x < width; x += 4 )
{
// build the 4x4 block of pixels
@@ -232,13 +236,17 @@ void DecompressImage( u8* rgba, int width, int height, int pitch, void const* bl
// fix any bad flags
flags = FixFlags( flags );
- // initialise the block input
- u8 const* sourceBlock = reinterpret_cast< u8 const* >( blocks );
- int bytesPerBlock = ( ( flags & ( kDxt1 | kBc4 ) ) != 0 ) ? 8 : 16;
-
// loop over blocks
+#ifdef SQUISH_USE_OPENMP
+# pragma omp parallel for
+#endif
for( int y = 0; y < height; y += 4 )
{
+ // initialise the block input
+ u8 const* sourceBlock = reinterpret_cast< u8 const* >( blocks );
+ int bytesPerBlock = ( ( flags & ( kDxt1 | kBc4 ) ) != 0 ) ? 8 : 16;
+ sourceBlock += ( (y / 4) * ( (width + 3) / 4) ) * bytesPerBlock;
+
for( int x = 0; x < width; x += 4 )
{
// decompress the block
diff --git a/thirdparty/squish/squish.h b/thirdparty/squish/squish.h
index 7c46e37ff1..14c9bb59fb 100644
--- a/thirdparty/squish/squish.h
+++ b/thirdparty/squish/squish.h
@@ -239,6 +239,15 @@ int GetStorageRequirements( int width, int height, int flags );
allows for pixels outside the image to take arbitrary values. The function
squish::GetStorageRequirements can be called to compute the amount of memory
to allocate for the compressed output.
+
+ Note on compression quality: When compressing textures with
+ libsquish it is recommended to apply a gamma-correction
+ beforehand. This will reduce the blockiness in dark areas. The
+ level of necessary gamma-correction is platform dependent. For
+ example, a gamma correction with gamma = 0.5 before compression
+ and gamma = 2.0 after decompression yields good results on the
+ Windows platform but for other platforms like MacOS X a different
+ gamma value may be more suitable.
*/
void CompressImage( u8 const* rgba, int width, int height, int pitch, void* blocks, int flags, float* metric = 0 );
void CompressImage( u8 const* rgba, int width, int height, void* blocks, int flags, float* metric = 0 );