OpenGL:格式无效但数据为空的错误
OpenGL : error with invalid format but NULL data
有时我们需要在没有数据的情况下初始化纹理。所以我想写一个效用函数,像这样:
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
参数不匹配,即使 没有实际数据 ,这也会崩溃。是否可以在不使用外部 table 的情况下避免此错误,该外部 table 将匹配给定 internal_format
的 format
(这可以通过 this page 的帮助实现,在 错误段)?但是,这有点乏味,所以我想知道是否有其他选择。
我们不能使用 format=internal_format
,因为某些值不兼容,例如 GL_RGBA16F
。
如果您可以访问 OpenGL 4.2,glTexStorage
方法可以满足您的需要。它为纹理分配存储空间但不使用任何数据对其进行初始化。
有时我们需要在没有数据的情况下初始化纹理。所以我想写一个效用函数,像这样:
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
参数不匹配,即使 没有实际数据 ,这也会崩溃。是否可以在不使用外部 table 的情况下避免此错误,该外部 table 将匹配给定 internal_format
的 format
(这可以通过 this page 的帮助实现,在 错误段)?但是,这有点乏味,所以我想知道是否有其他选择。
我们不能使用 format=internal_format
,因为某些值不兼容,例如 GL_RGBA16F
。
如果您可以访问 OpenGL 4.2,glTexStorage
方法可以满足您的需要。它为纹理分配存储空间但不使用任何数据对其进行初始化。