【发布时间】:2013-12-05 01:11:30
【问题描述】:
这是一个奇怪的问题,但我想知道为什么 glTexImage2d 关心 Null 数据的像素数据类型和格式。 glTexImage2d 的签名是...
void glTexImage2D( GLenum target, GLint level, GLint internalFormat,
GLsizei width, GLsizei height, GLint border, GLenum format,
GLenum type, const GLvoid * data);
internalFormat 的作用是告诉图形驱动程序你想在 gpu 上存储什么数据,格式和类型告诉图形驱动程序对 GLvoid * 数据的期望。所以,如果我不传递任何数据,例如传递 null,为什么图形驱动程序关心格式和类型是什么?所以这是一个奇怪的问题,因为有时它不会。它发生的时间,我没有检查每一次迭代,但是,特别是在制作深度纹理时,或者我最近遇到的是整数类型,如 GL_RED_INTEGER、GL_RG_INTEGER 等和/或它们对应的内部格式,如 GL_R8I、GL_RGBA32UI。然而,任何“简单”类型都不必与 internalFormat 相对应,例如 GL_RGBA8、GL_RGBA32F 等。出于某种原因,即使您没有通过,前一种特定的数据类型和格式也必须准确无误任何数据。这是为什么呢?
【问题讨论】: