diff --git a/src/osg/State.cpp b/src/osg/State.cpp index f240bb9bf..b29aab90e 100644 --- a/src/osg/State.cpp +++ b/src/osg/State.cpp @@ -247,6 +247,7 @@ void State::apply(const StateSet* dstate) apply(); } + if (_reportGLErrors) checkGLErrors("end of State::apply(StateSet*)"); } void State::apply() @@ -271,6 +272,8 @@ void State::apply() if (unit<_textureAttributeMapList.size()) applyAttributeMap(_textureAttributeMapList[unit]); } } + + if (_reportGLErrors) checkGLErrors("end of State::apply()"); } void State::haveAppliedMode(StateAttribute::GLMode mode,StateAttribute::GLModeValue value) diff --git a/src/osgPlugins/dds/ReaderWriterDDS.cpp b/src/osgPlugins/dds/ReaderWriterDDS.cpp index 257025822..0b562c91c 100644 --- a/src/osgPlugins/dds/ReaderWriterDDS.cpp +++ b/src/osgPlugins/dds/ReaderWriterDDS.cpp @@ -111,7 +111,7 @@ typedef struct _DDSURFACEDESC2 } DDSURFACEDESC2; #define DDPF_ALPHAPIXELS 0x00000001l -#define DDPF_FOURCC 0x00000004l +#define DDPF_FOURCC 0x00000004l #define DDPF_RGB 0x00000040l #ifndef MAKEFOURCC @@ -133,6 +133,8 @@ osg::Image* ReadDDSFile(const char *filename) { osg::Image* osgImage = new osg::Image(); + osgImage->setFileName(filename); + DDSURFACEDESC2 ddsd; char filecode[4]; @@ -192,11 +194,20 @@ osg::Image* ReadDDSFile(const char *filename) // Compressed formats. else if(ddsd.ddpfPixelFormat.dwFlags & DDPF_FOURCC) { + bool usingAlpha = ddsd.ddpfPixelFormat.dwFlags & DDPF_ALPHAPIXELS; switch(ddsd.ddpfPixelFormat.dwFourCC) { case FOURCC_DXT1: - internalFormat = GL_COMPRESSED_RGBA_S3TC_DXT1_EXT; - pixelFormat = GL_COMPRESSED_RGBA_S3TC_DXT1_EXT; + if (usingAlpha) + { + internalFormat = GL_COMPRESSED_RGBA_S3TC_DXT1_EXT; + pixelFormat = GL_COMPRESSED_RGBA_S3TC_DXT1_EXT; + } + else + { + internalFormat = GL_COMPRESSED_RGB_S3TC_DXT1_EXT; + pixelFormat = GL_COMPRESSED_RGB_S3TC_DXT1_EXT; + } break; case FOURCC_DXT3: internalFormat = GL_COMPRESSED_RGBA_S3TC_DXT3_EXT; @@ -230,8 +241,26 @@ osg::Image* ReadDDSFile(const char *filename) { // Now set mipmap data (offsets into image raw data). osg::Image::MipmapDataType mipmaps; - // Number of offsets in osg is one less than num_mipmaps - // because it's assumed that first offset is 0. + + //This is to complete mipmap sequence until level Nx1 + + //debugging messages + float power2_s = logf((float)s)/logf((float)2); + float power2_t = logf((float)t)/logf((float)2); + + osg::notify(osg::INFO) << "ReadDDSFile info : ddsd.dwMipMapCount = "<