|
| 1 | +diff --git a/thirdparty/squish/colourblock.cpp b/thirdparty/squish/colourblock.cpp |
| 2 | +index af8b980365..f14c9362bd 100644 |
| 3 | +--- a/thirdparty/squish/colourblock.cpp |
| 4 | ++++ b/thirdparty/squish/colourblock.cpp |
| 5 | +@@ -24,6 +24,9 @@ |
| 6 | + -------------------------------------------------------------------------- */ |
| 7 | + |
| 8 | + #include "colourblock.h" |
| 9 | ++// -- GODOT start -- |
| 10 | ++#include "alpha.h" |
| 11 | ++// -- GODOT end -- |
| 12 | + |
| 13 | + namespace squish { |
| 14 | + |
| 15 | +@@ -211,4 +214,34 @@ void DecompressColour( u8* rgba, void const* block, bool isDxt1 ) |
| 16 | + } |
| 17 | + } |
| 18 | + |
| 19 | ++// -- GODOT start -- |
| 20 | ++void DecompressColourBc4( u8* rgba, void const* block) |
| 21 | ++{ |
| 22 | ++ DecompressAlphaDxt5(rgba,block); |
| 23 | ++ for ( int i = 0; i < 16; ++i ) { |
| 24 | ++ rgba[i*4] = rgba[i*4 + 3]; |
| 25 | ++ rgba[i*4 + 1] = 0; |
| 26 | ++ rgba[i*4 + 2] = 0; |
| 27 | ++ rgba[i*4 + 3] = 255; |
| 28 | ++ } |
| 29 | ++} |
| 30 | ++ |
| 31 | ++void DecompressColourBc5( u8* rgba, void const* block) |
| 32 | ++{ |
| 33 | ++ void const* rblock = block; |
| 34 | ++ void const* gblock = reinterpret_cast< u8 const* >( block ) + 8; |
| 35 | ++ DecompressAlphaDxt5(rgba,rblock); |
| 36 | ++ for ( int i = 0; i < 16; ++i ) { |
| 37 | ++ rgba[i*4] = rgba[i*4 + 3]; |
| 38 | ++ } |
| 39 | ++ DecompressAlphaDxt5(rgba,gblock); |
| 40 | ++ for ( int i = 0; i < 16; ++i ) { |
| 41 | ++ rgba[i*4+1] = rgba[i*4 + 3]; |
| 42 | ++ rgba[i*4 + 2] = 0; |
| 43 | ++ rgba[i*4 + 3] = 255; |
| 44 | ++ } |
| 45 | ++} |
| 46 | ++// -- GODOT end -- |
| 47 | ++ |
| 48 | ++ |
| 49 | + } // namespace squish |
| 50 | +diff --git a/thirdparty/squish/colourblock.h b/thirdparty/squish/colourblock.h |
| 51 | +index fee2cd7c5d..e1eb9e4917 100644 |
| 52 | +--- a/thirdparty/squish/colourblock.h |
| 53 | ++++ b/thirdparty/squish/colourblock.h |
| 54 | +@@ -35,6 +35,10 @@ void WriteColourBlock3( Vec3::Arg start, Vec3::Arg end, u8 const* indices, void* |
| 55 | + void WriteColourBlock4( Vec3::Arg start, Vec3::Arg end, u8 const* indices, void* block ); |
| 56 | + |
| 57 | + void DecompressColour( u8* rgba, void const* block, bool isDxt1 ); |
| 58 | ++// -- GODOT start -- |
| 59 | ++void DecompressColourBc4( u8* rgba, void const* block ); |
| 60 | ++void DecompressColourBc5( u8* rgba, void const* block ); |
| 61 | ++// -- GODOT end -- |
| 62 | + |
| 63 | + } // namespace squish |
| 64 | + |
| 65 | +diff --git a/thirdparty/squish/squish.cpp b/thirdparty/squish/squish.cpp |
| 66 | +index 1d22a64ad6..086ba11cd0 100644 |
| 67 | +--- a/thirdparty/squish/squish.cpp |
| 68 | ++++ b/thirdparty/squish/squish.cpp |
| 69 | +@@ -135,7 +135,15 @@ void Decompress( u8* rgba, void const* block, int flags ) |
| 70 | + colourBlock = reinterpret_cast< u8 const* >( block ) + 8; |
| 71 | + |
| 72 | + // decompress colour |
| 73 | +- DecompressColour( rgba, colourBlock, ( flags & kDxt1 ) != 0 ); |
| 74 | ++ // -- GODOT start -- |
| 75 | ++ //DecompressColour( rgba, colourBlock, ( flags & kDxt1 ) != 0 ); |
| 76 | ++ if(( flags & ( kBc4 ) ) != 0) |
| 77 | ++ DecompressColourBc4( rgba, colourBlock); |
| 78 | ++ else if(( flags & ( kBc5 ) ) != 0) |
| 79 | ++ DecompressColourBc5( rgba, colourBlock); |
| 80 | ++ else |
| 81 | ++ DecompressColour( rgba, colourBlock, ( flags & kDxt1 ) != 0 ); |
| 82 | ++ // -- GODOT end -- |
| 83 | + |
| 84 | + // decompress alpha separately if necessary |
| 85 | + if( ( flags & kDxt3 ) != 0 ) |
0 commit comments