From d215b255c426066108475577bafafd0214757deb Mon Sep 17 00:00:00 2001 From: Kent <642238553@qq.com> Date: Tue, 3 Sep 2019 16:11:14 +0800 Subject: [PATCH] Mered fix for internalFormat --- src/osgPlugins/tiff/ReaderWriterTIFF.cpp | 38 ++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/src/osgPlugins/tiff/ReaderWriterTIFF.cpp b/src/osgPlugins/tiff/ReaderWriterTIFF.cpp index 4f9abef1b..128dfb752 100644 --- a/src/osgPlugins/tiff/ReaderWriterTIFF.cpp +++ b/src/osgPlugins/tiff/ReaderWriterTIFF.cpp @@ -809,8 +809,6 @@ class ReaderWriterTIFF : public osgDB::ReaderWriter int t = height_ret; int r = 1; - int internalFormat = numComponents_ret; - unsigned int pixelFormat = numComponents_ret == 1 ? GL_LUMINANCE : numComponents_ret == 2 ? GL_LUMINANCE_ALPHA : @@ -823,6 +821,42 @@ class ReaderWriterTIFF : public osgDB::ReaderWriter bitspersample_ret == 16 ? GL_UNSIGNED_SHORT : bitspersample_ret == 32 ? GL_FLOAT : (GLenum)-1; + int internalFormat = 0; + switch (pixelFormat) { + case GL_LUMINANCE: { + switch (dataType) { + case GL_UNSIGNED_BYTE: internalFormat = GL_LUMINANCE8; break; + case GL_UNSIGNED_SHORT: internalFormat = GL_LUMINANCE16; break; + case GL_FLOAT : internalFormat = GL_LUMINANCE32F_ARB; break; + } + break; + } + case GL_LUMINANCE_ALPHA: { + switch (dataType) { + case GL_UNSIGNED_BYTE: internalFormat = GL_LUMINANCE_ALPHA8UI_EXT; break; + case GL_UNSIGNED_SHORT: internalFormat = GL_LUMINANCE_ALPHA16UI_EXT; break; + case GL_FLOAT: internalFormat = GL_LUMINANCE_ALPHA32F_ARB; break; + } + break; + } + case GL_RGB: { + switch (dataType) { + case GL_UNSIGNED_BYTE: internalFormat = GL_RGB8; break; + case GL_UNSIGNED_SHORT: internalFormat = GL_RGB16; break; + case GL_FLOAT: internalFormat = GL_RGB32F_ARB; break; + } + break; + } + case GL_RGBA : { + switch (dataType) { + case GL_UNSIGNED_BYTE: internalFormat = GL_RGBA8; break; + case GL_UNSIGNED_SHORT: internalFormat = GL_RGBA16; break; + case GL_FLOAT: internalFormat = GL_RGBA32F_ARB; break; + } + break; + } + } + osg::Image* pOsgImage = new osg::Image; pOsgImage->setImage(s,t,r, internalFormat,