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
中的一个,或者是表[…]中的立方体贴图面目标