class GLTextureHandle
{
public:
GLuint m_name;
void
TextureParameter(GLenum pname, const GLint *v)
{
glTextureParameterivEXT(m_name, pname, v);
}
void
TextureParameter(GLenum pname, const GLfloat *v)
{
glTextureParameterfvEXT(m_name, pname, v);
}
template<unsigned int N, typename T>
void
TextureParameter(GLenum pname, const array<T,N> &v)
{
TextureParameter(pname, &v[0]);
}
void
getTextureParamter(GLenum pname, GLint *v)
{
glGetTextureParameterivEXT(m_name, pname, v);
}
void
getTextureParamter(GLenum pname, GLfloat *v)
{
glGetTextureParameterivEXT(m_name, pname, v);
}
template<unsigned int N, typename T>
array<T,N>
getTextureParamter(enum pname)
{
array<T,N> return_value;
getTextureParamter(pname, &return_value[0]);
return return_value;
}
//etc...
}
//or potentially do NOT make any member functions to
//GLTextureHandler and create functions mirroring
//GL names but such functions taking the type
//GLTextureHandle as the first argument. Which
//is better is the subject of flamewars.