OpenGL 3.2中glTexImage2D(GL_PROXY_TEXTURE_2D...)出现GL_INVALID_ENUM错误

3

我正在将一个引擎从OpenGL 1.1转换为OpenGL 3.2。下面的代码会抛出GL_INVALID_ENUM错误,但我无法确定原因。

在调用glTexImage2D()之前,我使用glGetError()进行清除。当我完成后,glGetError()返回GL_INVALID_ENUM错误。

      glActiveTexture( GL_TEXTURE0 );
      glTexImage2D( GL_PROXY_TEXTURE_2D,   // target
                    0,                     // level
                    4,                     // internalformat
                    32, 32,                // width & height
                    0,                     // border
                    GL_RGBA,               // format
                    GL_UNSIGNED_BYTE,      // type
                    NULL );                // pixels

如果有帮助的话,我正在运行 Mac OS X 10.8.4。我正在使用 OpenGL 3.2 核心上下文。OpenGL 版本字符串:3.2 NVIDIA-8.12.47 310.40.00.05f01。 - Michael Labbé
1
为什么在内部格式中使用4而不是符号常量? - thokra
2个回答

6

请传入一个真实的internalFormat。我认为纯通道计数方法在某个时候已被弃用。


尽管这很可能导致错误,但根据TexImage2D手册,它应该是INVALID_VALUE。不过手册中可能存在错误。 - thokra
没错,3.2核心规范在第133页支持你的说法。 - genpfault
4
在我看来,应该生成一个INVALID_ENUM错误,因为你只允许向函数传递一个符号常量。现在的做法不一致。 - thokra
如果由我决定,如果您不使用大小内部格式,那也会生成INVALID_ENUM :) - Andon M. Coleman
将内部格式从4更改为GL_RGBA就可以了。令人恼火的是,Mac OS附带的手册中写着“必须是1、2、3或4,或以下符号常量之一”。所以,那不准确。 - Michael Labbé
@mlabbe:OS X 是否可能附带两套 man 手册?它附带了两个独立的 OpenGL 头文件,如果您想要 OpenGL 3.2,则必须包含不同的头文件。这可能是因为该平台支持两种 OpenGL 实现方式;我更喜欢在 http://www.opengl.org/registry 上阅读 man 手册 - 特别是查找“参考页面”。您可以通过这种方式获取特定(主要)版本的 API 的 man 手册。 - Andon M. Coleman

2
您的内部格式“4”似乎不是有效的格式。例如,GL_RGBA被定义为0x1908。

1
这是一种有效的格式,但仅适用于兼容性(或3.0之前)的情况下(即使在这种情况下,它也已经被强烈废弃并且不建议使用)。 - Christian Rau

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接