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