我正在编写游戏引擎,但是在加载纹理时遇到了一个令人费解的问题。
我的代码如下:
//Load to GL
glGenTextures(1, &glTextureID);
glBindTexture(GL_TEXTURE_2D, glTextureID);
glTexImage2D(glTextureID, 0, format, width, height, 0, format, GL_UNSIGNED_BYTE, data);
逐步启用GL调试输出将显示
glTexImage2D
行给出了错误:格式取决于要加载的图像,并使用
FreeImage
确定。 (对于相应的图像类型,同时带有GL_RGBA
和GL_RED
的字符)。 width
/ height
也由FreeImage
确定,在GL_RGBA
情况下,两个值均为512。据我了解,这些值对于两个格式参数均有效。使用
FreeImage
的完整代码有点冗长,需要使用多个线程(我确信此代码在主线程上运行,因此在这些行之前声明了该代码)。以下内容也不起作用:
glTexImage2D(glTextureID, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);
我无法找到其他发生此错误的人。我研究了如何抛出
GL_INVALID_ENUM
,但是没有任何记录的方法似乎适用,当然也不适用于我收到的消息。这些行之间的
glTextureID
的值未修改,保持为'1'。尝试加载其他纹理时也会抛出相同的错误,而“目标”却不同。
我的GL上下文已正确初始化,因为我可以使用其他GL函数,并且可以成功绘制无纹理的多边形。
是什么原因造成的?
最佳答案
glTexImage2D
的第一个参数是target
,必须为GL_TEXTURE_2D
,GL_PROXY_TEXTURE_2D
,GL_TEXTURE_1D_ARRAY
...
将您的代码更改为:
glTexImage2D(GL_TEXTURE_2D, 0, format, width, height, 0, format, GL_UNSIGNED_BYTE, data);
注意
glTexImage2D
为绑定(bind)到当前Texture unit的纹理对象指定二维纹理。参见OpenGL 4.6 core profile specification - 8.5. TEXTURE IMAGE SPECIFICATION, page 212: