C++ glTexImage2D';目标无效';
我正在编写一个游戏引擎,但在加载纹理时遇到了一个令人费解的问题 我的代码如下:C++ glTexImage2D';目标无效';,c++,opengl,graphics,3d,textures,C++,Opengl,Graphics,3d,Textures,我正在编写一个游戏引擎,但在加载纹理时遇到了一个令人费解的问题 我的代码如下: //Load to GL glGenTextures(1, &glTextureID); glBindTexture(GL_TEXTURE_2D, glTextureID); glTexImage2D(glTextureID, 0, format, width, height, 0, format, GL_UNSIGNED_BYTE, data); 在启用GL debug output的情况下单步执行显示g
//Load to GL
glGenTextures(1, &glTextureID);
glBindTexture(GL_TEXTURE_2D, glTextureID);
glTexImage2D(glTextureID, 0, format, width, height, 0, format, GL_UNSIGNED_BYTE, data);
在启用GL debug output的情况下单步执行显示glTexImage2D
行给出错误:
已生成错误。总账错误(null):(ID:1938861751)1中的总账无效枚举无效
其中,格式取决于加载的图像,并使用FreeImage
确定。(分别使用GL_RGBA
和GL_RED
两种图像类型进行打断)<代码>宽度/高度
也由FreeImage
确定,在GL_RGBA
情况下,两个值均为512。据我所知,这些值对两个格式参数都有效
使用FreeImage
的完整代码包含在这里有点长,并且使用了多个线程(我确信这段代码是在主线程上运行的,我在这些行之前就断言了这一点)
以下内容也不起作用:
glTexImage2D(glTextureID, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);
我找不到任何其他有这个错误的人。我已经研究了如何抛出GL\u INVALID\u ENUM
,但是没有一种文档化的方法是适用的,当然我收到的消息也不适用
glTextureID
的值不会在这些行之间修改,保持为“1”
尝试加载其他纹理时也会引发相同的错误,因为“目标”不同
我的GL上下文已正确初始化,因为我能够使用其他GL函数,并成功绘制未设置纹理的多边形
什么可能导致这种情况?的第一个参数是目标
,它必须是GL\u纹理2D
,GL\u代理纹理2D
,GL\u纹理1D\u数组
将代码更改为:
glTexImage2D(glTextureID,0,GL_RGBA,宽度,高度,0,GL_RGBA,GL_无符号字节,数据)代码>
glTexImage2D(GL_纹理_2D,0,格式,宽度,高度,0,格式,GL_无符号字节,数据);
注意glTexImage2D
为绑定到当前纹理的纹理对象指定二维纹理
见:
命令
void TexImage2D( enum target, int level, int internalformat, sizei width,
sizei height, int border, enum format, enum type, const void *data );
用于指定二维纹理图像。对于二维纹理,目标必须是TEXTURE\u 2D
中的一个;对于一维数组纹理,目标必须是TEXTURE\u 1D\u ARRAY
中的一个;对于矩形纹理,目标必须是TEXTURE\u RECTANGLE
中的一个,或者是表[…]中的立方体贴图面目标
的第一个参数是目标
,它必须是GL\u TEXTURE\u 2D
,GL\u PROXY\u TEXTURE\u 2D
,GL\u TEXTURE\u 1D\u数组
将代码更改为:
glTexImage2D(glTextureID,0,GL_RGBA,宽度,高度,0,GL_RGBA,GL_无符号字节,数据)代码>
glTexImage2D(GL_纹理_2D,0,格式,宽度,高度,0,格式,GL_无符号字节,数据);
注意glTexImage2D
为绑定到当前纹理的纹理对象指定二维纹理
见:
命令
void TexImage2D( enum target, int level, int internalformat, sizei width,
sizei height, int border, enum format, enum type, const void *data );
用于指定二维纹理图像。对于二维纹理,目标必须是TEXTURE\u 2D
中的一个;对于一维数组纹理,目标必须是TEXTURE\u 1D\u ARRAY
中的一个;对于矩形纹理,目标必须是TEXTURE\u RECTANGLE
中的一个,或者是表[…]中的立方体贴图面目标