1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-04-10 18:51:21 +03:00

0026891: Visualization, TKOpenGl - define more texture types within OpenGl_TextureFormatSelector

This commit is contained in:
isk 2015-11-19 15:31:24 +03:00 committed by bugmaster
parent 95081657f1
commit fbef84f9eb

@ -49,6 +49,11 @@ struct OpenGl_TextureFormatSelector<GLubyte>
return GL_NONE;
}
}
static GLint DataType()
{
return GL_UNSIGNED_BYTE;
}
};
template<>
@ -70,6 +75,11 @@ struct OpenGl_TextureFormatSelector<GLushort>
return GL_NONE;
}
}
static GLint DataType()
{
return GL_UNSIGNED_SHORT;
}
};
template<>
@ -91,8 +101,120 @@ struct OpenGl_TextureFormatSelector<GLfloat>
return GL_NONE;
}
}
static GLint DataType()
{
return GL_FLOAT;
}
};
template<>
struct OpenGl_TextureFormatSelector<GLuint>
{
static GLint Internal (GLuint theChannels)
{
switch (theChannels)
{
case 1:
return GL_RED;
case 2:
return GL_RG;
case 3:
return GL_RGB;
case 4:
return GL_RGBA;
default:
return GL_NONE;
}
}
static GLint DataType()
{
return GL_UNSIGNED_INT;
}
};
//! Only unsigned formats are available in OpenGL ES 2.0
#if !defined(GL_ES_VERSION_2_0)
template<>
struct OpenGl_TextureFormatSelector<GLbyte>
{
static GLint Internal (GLuint theChannels)
{
switch (theChannels)
{
case 1:
return GL_R8_SNORM;
case 2:
return GL_RG8_SNORM;
case 3:
return GL_RGB8_SNORM;
case 4:
return GL_RGBA8_SNORM;
default:
return GL_NONE;
}
}
static GLint DataType()
{
return GL_BYTE;
}
};
template<>
struct OpenGl_TextureFormatSelector<GLshort>
{
static GLint Internal (GLuint theChannels)
{
switch (theChannels)
{
case 1:
return GL_R16_SNORM;
case 2:
return GL_RG16_SNORM;
case 3:
return GL_RGB16_SNORM;
case 4:
return GL_RGBA16_SNORM;
default:
return GL_NONE;
}
}
static GLint DataType()
{
return GL_SHORT;
}
};
template<>
struct OpenGl_TextureFormatSelector<GLint>
{
static GLint Internal (GLuint theChannels)
{
switch (theChannels)
{
case 1:
return GL_RED_SNORM;
case 2:
return GL_RG_SNORM;
case 3:
return GL_RGB_SNORM;
case 4:
return GL_RGBA_SNORM;
default:
return GL_NONE;
}
}
static GLint DataType()
{
return GL_INT;
}
};
#endif
//! Stores parameters of OpenGL texture format.
class OpenGl_TextureFormat
{
@ -124,25 +246,36 @@ public:
return myInternal;
}
//! Returns OpenGL data type of the pixel data.
inline GLint DataType() const
{
return myDataType;
}
//! Returns texture format for specified type and number of channels.
template<class T, int N>
static OpenGl_TextureFormat Create()
{
return OpenGl_TextureFormat (N, OpenGl_TextureFormatSelector<T>::Internal (N));
return OpenGl_TextureFormat (N,
OpenGl_TextureFormatSelector<T>::Internal(N),
OpenGl_TextureFormatSelector<T>::DataType());
}
private:
//! Creates new texture format.
OpenGl_TextureFormat (const GLint theChannels,
const GLint theInternal)
const GLint theInternal,
const GLint theDataType)
: myInternal (theInternal),
myChannels (theChannels) {}
myChannels (theChannels),
myDataType (theDataType) {}
private:
GLint myInternal; //!< OpenGL internal format of the pixel data
GLint myChannels; //!< Number of channels for each pixel (from 1 to 4)
GLint myDataType; //!< OpenGL data type of input pixel data
};