Jac*_*311 1 c++ opengl 3d graphics
我正在编写一个游戏引擎,但是在加载纹理时我遇到了一个令人费解的问题.
我的代码如下:
//Load to GL
glGenTextures(1, &glTextureID);
glBindTexture(GL_TEXTURE_2D, glTextureID);
glTexImage2D(glTextureID, 0, format, width, height, 0, format, GL_UNSIGNED_BYTE, data);
Run Code Online (Sandbox Code Playgroud)
在启用GL调试输出的情况下单步执行会显示该glTexImage2D行给出错误:
错误已生成.GL错误GL_INVALID_ENUM in(null):( ID:1938861751)1无效.
格式取决于正在加载的图像,并使用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);
Run Code Online (Sandbox Code Playgroud)
我找不到任何其他有此错误的人.我已经研究了如何GL_INVALID_ENUM抛出,但是没有任何记录的方法似乎适用,当然也没有我收到的消息.
glTextureID这些行之间的值不会被修改,保持为"1".
尝试加载其他纹理时,也会抛出相同的错误,"目标"不同.
我的GL上下文被正确初始化,因为我能够使用其他GL函数,并成功绘制无纹理多边形.
可能是什么导致了这个?
Rab*_*d76 11
拳头参数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);
Run Code Online (Sandbox Code Playgroud)
注意glTexImage2D指定绑定到当前纹理单元的纹理对象的二维纹理.
请参阅OpenGL 4.6核心配置文件规范 - 8.5.纹理图像规格,第212页:
命令
Run Code Online (Sandbox Code Playgroud)void TexImage2D( enum target, int level, int internalformat, sizei width, sizei height, int border, enum format, enum type, const void *data );用于指定二维纹理图像.target必须是
TEXTURE_2D二维纹理,TEXTURE_1D_ARRAY一维数组纹理,TEXTURE_RECTANGLE矩形纹理或表格中的一个立方体贴图面目标之一...