我正在编写游戏引擎,但是在加载纹理时遇到了一个令人费解的问题。

我的代码如下:

//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_RGBAGL_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_2DGL_PROXY_TEXTURE_2DGL_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:

10-08 08:22