有时候我们需要初始化一个没有数据的纹理。所以我想写一个实用函数,类似于:
GLuint create_texture(GLenum internal_format, int width, int height)
{
GLuint id;
glGenTextures(1, &id);
glBindTexture(GL_TEXTURE_2D, id);
glTexImage2D(GL_TEXTURE_2D, 0, internal_format, width, height, 0, GL_RGB, GL_FLOAT, NULL);
return id;
}
我希望能够以任何格式进行初始化(GL_RGB
、GL_RGBA
等)。但是,如果format
参数与internal_format
参数不匹配,即使 * 没有实际数据 *,也会崩溃。是否可以避免此错误,而不使用将与给定internal_format
的format
匹配的外部表(这是可能的帮助下,this page,在 * 错误 * 段落)?然而,这是一个有点乏味,所以我想知道是否有一个替代方案。
我们不能使用format=internal_format
,因为有些值不兼容,比如GL_RGBA16F
。
1条答案
按热度按时间kognpnkq1#
如果你有OpenGL 4.2的访问权限,
glTexStorage
方法就能完成你所需要的工作。它为纹理分配存储空间,但不使用任何数据对其进行初始化。