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_RGBGL_RGBA 等...)。 但是,如果 format 参数与 internal_format 参数不匹配,即使 没有实际数据 ,这也会崩溃。是否可以在不使用外部 table 的情况下避免此错误,该外部 table 将匹配给定 internal_formatformat(这可以通过 this page 的帮助实现,在 错误段)?但是,这有点乏味,所以我想知道是否有其他选择。

我们不能使用 format=internal_format,因为某些值不兼容,例如 GL_RGBA16F

如果您可以访问 OpenGL 4.2,glTexStorage 方法可以满足您的需要。它为纹理分配存储空间但不使用任何数据对其进行初始化。