From Art Tevs, "here are a small extension to the osg::Image class, which do computes data type from the given format, i.e. (GL_RGB32F_ARB -> GL_FLOAT). The method is very usefull to find out which data type a texture or an image have based on the internal/pixel format."

This commit is contained in:
Robert Osfield
2008-11-30 15:56:47 +00:00
parent fd90f1a6ef
commit 47f518d1c7
2 changed files with 66 additions and 0 deletions

View File

@@ -226,6 +226,62 @@ GLenum Image::computePixelFormat(GLenum format)
}
}
GLenum Image::computeFormatDataType(GLenum pixelFormat)
{
switch (pixelFormat)
{
case GL_LUMINANCE32F_ARB:
case GL_LUMINANCE16F_ARB:
case GL_LUMINANCE_ALPHA32F_ARB:
case GL_LUMINANCE_ALPHA16F_ARB:
case GL_RGB32F_ARB:
case GL_RGB16F_ARB:
case GL_RGBA32F_ARB:
case GL_RGBA16F_ARB: return GL_FLOAT;
case GL_RGBA32UI_EXT:
case GL_RGB32UI_EXT:
case GL_LUMINANCE32UI_EXT:
case GL_LUMINANCE_ALPHA32UI_EXT: return GL_UNSIGNED_INT;
case GL_RGB16UI_EXT:
case GL_RGBA16UI_EXT:
case GL_LUMINANCE16UI_EXT:
case GL_LUMINANCE_ALPHA16UI_EXT: return GL_UNSIGNED_SHORT;
case GL_RGBA8UI_EXT:
case GL_RGB8UI_EXT:
case GL_LUMINANCE8UI_EXT:
case GL_LUMINANCE_ALPHA8UI_EXT: return GL_UNSIGNED_BYTE;
case GL_RGBA32I_EXT:
case GL_RGB32I_EXT:
case GL_LUMINANCE32I_EXT:
case GL_LUMINANCE_ALPHA32I_EXT: return GL_INT;
case GL_RGBA16I_EXT:
case GL_RGB16I_EXT:
case GL_LUMINANCE16I_EXT:
case GL_LUMINANCE_ALPHA16I_EXT: return GL_SHORT;
case GL_RGB8I_EXT:
case GL_RGBA8I_EXT:
case GL_LUMINANCE8I_EXT:
case GL_LUMINANCE_ALPHA8I_EXT: return GL_BYTE;
case GL_RGBA:
case GL_RGB:
case GL_LUMINANCE:
case GL_LUMINANCE_ALPHA: return GL_UNSIGNED_BYTE;
default:
{
notify(WARN)<<"error computeFormatType = "<<std::hex<<pixelFormat<<std::endl;
return 0;
}
}
}
unsigned int Image::computeNumComponents(GLenum pixelFormat)
{
switch(pixelFormat)