根据opengl的参考页,glTexImage2D的结构是这样的:
void glTexImage2D( GLenum target,
GLint level,
GLint internalformat,
GLsizei width,
GLsizei height,
GLint border,
GLenum format,
GLenum type,
const GLvoid * data);
据我所知,最后 3 个参数是函数应该如何解释由const GLvoid * data
同时,我正在研究帧缓冲区的主题。在此链接https://learnopengl.com/Advanced-Lighting/HDR的“浮点帧缓冲区”部分中,作者创建了一个帧缓冲区的颜色附件,如下所示
glBindTexture(GL_TEXTURE_2D, colorBuffer);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA16F, SCR_WIDTH, SCR_HEIGHT, 0, GL_RGBA, GL_FLOAT, NULL);
我的问题是,他为什么给 GL_FLOAT 作为参数GLenum type
?如果无论如何,const GLvoid * data
是否NULL
需要使用 GL_FLOAT?我首先认为它与 相关GL_RGBA16F
,但 16 位是 2 个字节,浮点数是 4 个字节,所以我想它根本不相关。
此外,在本教程之前,作者曾经制作这样的颜色附件:
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, SCR_WIDTH, SCR_HEIGHT, 0, GL_RGB, GL_UNSIGNED_BYTE, NULL);
在这种情况下,他为什么要使用GL_UNSIGNED_BYTE
参数GLenum type
?