Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- if ( type ) {
- KTX_Decoder* decoder = NULL;
- switch ( type )
- {
- case KTX_TYPE_UNSIGNED_BYTE:
- switch ( format )
- {
- case KTX_FORMAT_ALPHA:
- decoder = new KTX_Decoder_A8( bigEndian );
- break;
- case KTX_FORMAT_RGB:
- decoder = new KTX_Decoder_RGB8( bigEndian );
- break;
- case KTX_FORMAT_RGBA:
- decoder = new KTX_Decoder_RGBA8( bigEndian );
- break;
- case KTX_FORMAT_LUMINANCE:
- decoder = new KTX_Decoder_L8( bigEndian );
- break;
- case KTX_FORMAT_LUMINANCE_ALPHA:
- decoder = new KTX_Decoder_LA8( bigEndian );
- break;
- case KTX_FORMAT_BGR:
- decoder = new KTX_Decoder_BGR8( bigEndian );
- break;
- case KTX_FORMAT_BGRA:
- decoder = new KTX_Decoder_BGRA8( bigEndian );
- break;
- }
- break;
- case KTX_TYPE_UNSIGNED_SHORT_4_4_4_4:
- if ( format == KTX_FORMAT_RGBA ) {
- decoder = new KTX_Decoder_RGBA4( bigEndian );
- }
- }
- case KTX_TYPE_UNSIGNED_SHORT_5_5_5_1:
- if ( format == KTX_FORMAT_RGBA ) {
- decoder = new KTX_Decoder_RGBA5( bigEndian );
- }
- }
- case KTX_TYPE_UNSIGNED_SHORT_5_6_5:
- if ( format == KTX_FORMAT_RGB ) {
- decoder = new KTX_Decoder_RGB5( bigEndian );
- }
- }
- if ( !decoder ) {
- globalErrorStream() << "LoadKTX: KTX image has an unsupported pixel type " << type << " or format " << format << "\n";
- image->release();
- return 0;
- }
- unsigned int inRowLength = width * decoder->GetPixelSize();
- unsigned int inPadding = ( ( inRowLength + 3 ) & ~3 ) - inRowLength;
- unsigned int outStride = width * 4;
- byte* out = image.getRGBAPixels() + ( height - 1 ) * outStride;
- for ( unsigned int y = 0; y < height; y++, out -= outStride )
- {
- byte* row = out;
- for ( unsigned int x = 0; x < width; x++, row += 4 )
- {
- decoder->Decode( istream, row );
- }
- if ( padding ) {
- istream.seek( padding );
- }
- }
- delete decoder;
- }
- else {
- switch ( format )
- {
- case KTX_FORMAT_ETC1_RGB8:
- KTX_DecodeETC1( istream, *image );
- break;
- default:
- globalErrorStream() << "LoadKTX: KTX image has an unsupported compressed format " << format << "\n";
- image->release();
- return 0;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement