|
|
|
@ -25,16 +25,15 @@ |
|
|
|
|
|
|
|
class BitStream { |
|
|
|
public: |
|
|
|
BitStream(unsigned char* ptr, int nBits = 0, int start_offset = 0) |
|
|
|
: m_BitsWritten(0), m_BitsRead(0), m_NumBits(nBits), m_CurByte(ptr), |
|
|
|
m_NextBit(start_offset % 8), done(false) {} |
|
|
|
explicit BitStream(unsigned char* ptr, int nBits = 0, int start_offset = 0) |
|
|
|
: m_NumBits(nBits), m_CurByte(ptr), m_NextBit(start_offset % 8) {} |
|
|
|
|
|
|
|
~BitStream() = default; |
|
|
|
|
|
|
|
int GetBitsWritten() const { |
|
|
|
return m_BitsWritten; |
|
|
|
} |
|
|
|
|
|
|
|
~BitStream() {} |
|
|
|
|
|
|
|
void WriteBitsR(unsigned int val, unsigned int nBits) { |
|
|
|
for (unsigned int i = 0; i < nBits; i++) { |
|
|
|
WriteBit((val >> (nBits - i - 1)) & 1); |
|
|
|
@ -95,13 +94,13 @@ private: |
|
|
|
done = done || ++m_BitsWritten >= m_NumBits; |
|
|
|
} |
|
|
|
|
|
|
|
int m_BitsWritten; |
|
|
|
int m_BitsWritten = 0; |
|
|
|
const int m_NumBits; |
|
|
|
unsigned char* m_CurByte; |
|
|
|
int m_NextBit; |
|
|
|
int m_BitsRead; |
|
|
|
int m_NextBit = 0; |
|
|
|
int m_BitsRead = 0; |
|
|
|
|
|
|
|
bool done; |
|
|
|
bool done = false; |
|
|
|
}; |
|
|
|
|
|
|
|
template <typename IntType> |
|
|
|
@ -382,17 +381,13 @@ private: |
|
|
|
namespace ASTCC { |
|
|
|
|
|
|
|
struct TexelWeightParams { |
|
|
|
uint32_t m_Width; |
|
|
|
uint32_t m_Height; |
|
|
|
bool m_bDualPlane; |
|
|
|
uint32_t m_MaxWeight; |
|
|
|
bool m_bError; |
|
|
|
bool m_bVoidExtentLDR; |
|
|
|
bool m_bVoidExtentHDR; |
|
|
|
|
|
|
|
TexelWeightParams() { |
|
|
|
memset(this, 0, sizeof(*this)); |
|
|
|
} |
|
|
|
uint32_t m_Width = 0; |
|
|
|
uint32_t m_Height = 0; |
|
|
|
bool m_bDualPlane = false; |
|
|
|
uint32_t m_MaxWeight = 0; |
|
|
|
bool m_bError = false; |
|
|
|
bool m_bVoidExtentLDR = false; |
|
|
|
bool m_bVoidExtentHDR = false; |
|
|
|
|
|
|
|
uint32_t GetPackedBitSize() { |
|
|
|
// How many indices do we have?
|
|
|
|
@ -668,27 +663,15 @@ IntType Replicate(const IntType& val, uint32_t numBits, uint32_t toBit) { |
|
|
|
|
|
|
|
class Pixel { |
|
|
|
protected: |
|
|
|
typedef int16_t ChannelType; |
|
|
|
uint8_t m_BitDepth[4]; |
|
|
|
int16_t color[4]; |
|
|
|
using ChannelType = int16_t; |
|
|
|
uint8_t m_BitDepth[4] = {8, 8, 8, 8}; |
|
|
|
int16_t color[4] = {}; |
|
|
|
|
|
|
|
public: |
|
|
|
Pixel() { |
|
|
|
for (int i = 0; i < 4; i++) { |
|
|
|
m_BitDepth[i] = 8; |
|
|
|
color[i] = 0; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
Pixel(ChannelType a, ChannelType r, ChannelType g, ChannelType b, unsigned bitDepth = 8) { |
|
|
|
for (int i = 0; i < 4; i++) |
|
|
|
m_BitDepth[i] = bitDepth; |
|
|
|
|
|
|
|
color[0] = a; |
|
|
|
color[1] = r; |
|
|
|
color[2] = g; |
|
|
|
color[3] = b; |
|
|
|
} |
|
|
|
Pixel() = default; |
|
|
|
Pixel(ChannelType a, ChannelType r, ChannelType g, ChannelType b, unsigned bitDepth = 8) |
|
|
|
: m_BitDepth{uint8_t(bitDepth), uint8_t(bitDepth), uint8_t(bitDepth), uint8_t(bitDepth)}, |
|
|
|
color{a, r, g, b} {} |
|
|
|
|
|
|
|
// Changes the depth of each pixel. This scales the values to
|
|
|
|
// the appropriate bit depth by either truncating the least
|
|
|
|
|