Advertisement
Guest User

NetRadiant KTX

a guest
May 29th, 2015
237
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.06 KB | None | 0 0
  1. if ( type ) {
  2.     KTX_Decoder* decoder = NULL;
  3.     switch ( type )
  4.     {
  5.     case KTX_TYPE_UNSIGNED_BYTE:
  6.         switch ( format )
  7.         {
  8.         case KTX_FORMAT_ALPHA:
  9.             decoder = new KTX_Decoder_A8( bigEndian );
  10.             break;
  11.         case KTX_FORMAT_RGB:
  12.             decoder = new KTX_Decoder_RGB8( bigEndian );
  13.             break;
  14.         case KTX_FORMAT_RGBA:
  15.             decoder = new KTX_Decoder_RGBA8( bigEndian );
  16.             break;
  17.         case KTX_FORMAT_LUMINANCE:
  18.             decoder = new KTX_Decoder_L8( bigEndian );
  19.             break;
  20.         case KTX_FORMAT_LUMINANCE_ALPHA:
  21.             decoder = new KTX_Decoder_LA8( bigEndian );
  22.             break;
  23.         case KTX_FORMAT_BGR:
  24.             decoder = new KTX_Decoder_BGR8( bigEndian );
  25.             break;
  26.         case KTX_FORMAT_BGRA:
  27.             decoder = new KTX_Decoder_BGRA8( bigEndian );
  28.             break;
  29.         }
  30.         break;
  31.     case KTX_TYPE_UNSIGNED_SHORT_4_4_4_4:
  32.         if ( format == KTX_FORMAT_RGBA ) {
  33.             decoder = new KTX_Decoder_RGBA4( bigEndian );
  34.         }
  35.     }
  36.     case KTX_TYPE_UNSIGNED_SHORT_5_5_5_1:
  37.         if ( format == KTX_FORMAT_RGBA ) {
  38.             decoder = new KTX_Decoder_RGBA5( bigEndian );
  39.         }
  40.     }
  41.     case KTX_TYPE_UNSIGNED_SHORT_5_6_5:
  42.         if ( format == KTX_FORMAT_RGB ) {
  43.             decoder = new KTX_Decoder_RGB5( bigEndian );
  44.         }
  45.     }
  46.  
  47.     if ( !decoder ) {
  48.         globalErrorStream() << "LoadKTX: KTX image has an unsupported pixel type " << type << " or format " << format << "\n";
  49.         image->release();
  50.         return 0;
  51.     }
  52.  
  53.     unsigned int inRowLength = width * decoder->GetPixelSize();
  54.     unsigned int inPadding = ( ( inRowLength + 3 ) & ~3 ) - inRowLength;
  55.     unsigned int outStride = width * 4;
  56.     byte* out = image.getRGBAPixels() + ( height - 1 ) * outStride;
  57.     for ( unsigned int y = 0; y < height; y++, out -= outStride )
  58.     {
  59.         byte* row = out;
  60.         for ( unsigned int x = 0; x < width; x++, row += 4 )
  61.         {
  62.             decoder->Decode( istream, row );
  63.         }
  64.  
  65.         if ( padding ) {
  66.             istream.seek( padding );
  67.         }
  68.     }
  69.  
  70.     delete decoder;
  71. }
  72. else {
  73.     switch ( format )
  74.     {
  75.     case KTX_FORMAT_ETC1_RGB8:
  76.         KTX_DecodeETC1( istream, *image );
  77.         break;
  78.     default:
  79.         globalErrorStream() << "LoadKTX: KTX image has an unsupported compressed format " << format << "\n";
  80.         image->release();
  81.         return 0;
  82.     }
  83. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement