@@ -258,7 +258,11 @@ struct DXT1TexelsBlock
258258* FOURCC codes for 3dc compressed-texture pixel formats
259259*/
260260#define FOURCC_ATI1 (MAKEFOURCC(' A' ,' T' ,' I' ,' 1' ))
261+ #define FOURCC_BC4U (MAKEFOURCC(' B' ,' C' ,' 4' ,' U' ))
262+ #define FOURCC_BC4S (MAKEFOURCC(' B' ,' C' ,' 4' ,' S' ))
261263#define FOURCC_ATI2 (MAKEFOURCC(' A' ,' T' ,' I' ,' 2' ))
264+ #define FOURCC_BC5U (MAKEFOURCC(' B' ,' C' ,' 5' ,' U' ))
265+ #define FOURCC_BC5S (MAKEFOURCC(' B' ,' C' ,' 5' ,' S' ))
262266
263267/*
264268* FOURCC codes for DX10 files
@@ -517,11 +521,31 @@ osg::Image* ReadDDSFile(std::istream& _istream, bool flipDDSRead)
517521 internalFormat = GL_COMPRESSED_RED_RGTC1_EXT;
518522 pixelFormat = GL_COMPRESSED_RED_RGTC1_EXT;
519523 break ;
524+ case FOURCC_BC4U:
525+ OSG_INFO << " ReadDDSFile info : format = BC4U" << std::endl;
526+ internalFormat = GL_COMPRESSED_RED_RGTC1_EXT;
527+ pixelFormat = GL_COMPRESSED_RED_RGTC1_EXT;
528+ break ;
529+ case FOURCC_BC4S:
530+ OSG_INFO << " ReadDDSFile info : format = BC4S" << std::endl;
531+ internalFormat = GL_COMPRESSED_SIGNED_RED_RGTC1_EXT;
532+ pixelFormat = GL_COMPRESSED_SIGNED_RED_RGTC1_EXT;
533+ break ;
520534 case FOURCC_ATI2:
521535 OSG_INFO << " ReadDDSFile info : format = ATI2" << std::endl;
522536 internalFormat = GL_COMPRESSED_RED_GREEN_RGTC2_EXT;
523537 pixelFormat = GL_COMPRESSED_RED_GREEN_RGTC2_EXT;
524538 break ;
539+ case FOURCC_BC5U:
540+ OSG_INFO << " ReadDDSFile info : format = BC5U" << std::endl;
541+ internalFormat = GL_COMPRESSED_RED_GREEN_RGTC2_EXT;
542+ pixelFormat = GL_COMPRESSED_RED_GREEN_RGTC2_EXT;
543+ break ;
544+ case FOURCC_BC5S:
545+ OSG_INFO << " ReadDDSFile info : format = BC5S" << std::endl;
546+ internalFormat = GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT;
547+ pixelFormat = GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT;
548+ break ;
525549 case 0x00000024 : // A16B16G16R16
526550 OSG_INFO << " ReadDDSFile info : format = A16B16G16R16" << std::endl;
527551 internalFormat = GL_RGBA;
@@ -770,6 +794,26 @@ osg::Image* ReadDDSFile(std::istream& _istream, bool flipDDSRead)
770794 dataType = GL_SHORT;
771795 break ;
772796
797+ case OSG_DXGI_FORMAT_BC4_UNORM:
798+ internalFormat = GL_COMPRESSED_RED_RGTC1_EXT;
799+ pixelFormat = GL_COMPRESSED_RED_RGTC1_EXT;
800+ break ;
801+
802+ case OSG_DXGI_FORMAT_BC4_SNORM:
803+ internalFormat = GL_COMPRESSED_SIGNED_RED_RGTC1_EXT;
804+ pixelFormat = GL_COMPRESSED_SIGNED_RED_RGTC1_EXT;
805+ break ;
806+
807+ case OSG_DXGI_FORMAT_BC5_UNORM:
808+ internalFormat = GL_COMPRESSED_RED_GREEN_RGTC2_EXT;
809+ pixelFormat = GL_COMPRESSED_RED_GREEN_RGTC2_EXT;
810+ break ;
811+
812+ case OSG_DXGI_FORMAT_BC5_SNORM:
813+ internalFormat = GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT;
814+ pixelFormat = GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT;
815+ break ;
816+
773817 default :
774818 OSG_WARN << " ReadDDSFile warning: unhandled DX10 pixel format 0x"
775819 << std::hex << std::setw (8 ) << std::setfill (' 0' )
0 commit comments