【发布时间】:2019-02-14 03:09:45
【问题描述】:
根据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参数?
【问题讨论】:
标签: opengl framebuffer glteximage2d