OpenGL:格式无效但数据为空时出错

uemypmqf  于 2022-11-04  发布在  其他
关注(0)|答案(1)|浏览(162)

有时候我们需要初始化一个没有数据的纹理。所以我想写一个实用函数,类似于:

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参数不匹配,即使 * 没有实际数据 *,也会崩溃。是否可以避免此错误,而不使用将与给定internal_formatformat匹配的外部表(这是可能的帮助下,this page,在 * 错误 * 段落)?然而,这是一个有点乏味,所以我想知道是否有一个替代方案。
我们不能使用format=internal_format,因为有些值不兼容,比如GL_RGBA16F

kognpnkq

kognpnkq1#

如果你有OpenGL 4.2的访问权限,glTexStorage方法就能完成你所需要的工作。它为纹理分配存储空间,但不使用任何数据对其进行初始化。

相关问题