OpenGL 创建 glShaderObject 时出现无效枚举错误
OpenGL Invalid enum error when creating glShaderObject
我得到无效的枚举
GL Error #1280(invalid enumerant)
以下代码出错:
CHECK_GL_ERROR();
glCreateShaderObjectARB(GL_VERTEX_SHADER_ARB);
CHECK_GL_ERROR();
其中CHECK_GL_ERROR()
宏定义如下:
int CheckGLError(char *file, int line)
{ GLenum glErr;
int retCode = 0;
glErr = glGetError();
while (glErr != GL_NO_ERROR)
{ const GLubyte* sError = gluErrorString(glErr);
if (sError)
cerr << "GL Error #" << glErr << "(" << gluErrorString(glErr) << ") " << " in File " << file << " at line: " << line << endl;
else
cerr << "GL Error #" << glErr << " (no message available)" << " in File " << file << " at line: " << line << endl;
retCode = 1;
glErr = glGetError();
}
return retCode;
}
#define CHECK_GL_ERROR() CheckGLError(__FILE__, __LINE__)
我确定问题是由glCreateShaderObjectARB(GL_VERTEX_SHADER_ARB)
生成的,因为我已经检查了断点,第一行没有生成错误,但在glCreateShaderObjectARB()
函数之后生成错误。
我在带有 NVidia 驱动程序的 Ubuntu 12.04 上使用 glew 1.9.0 和 GLUT。有人已经遇到这个问题了吗?
这不是
一个实际的答案,但以评论的形式写太长了......我怀疑您没有在适当的硬件加速环境中运行。
您能否将以下代码添加到您的程序中并将输出包含在您的问题中?
#include <cstdio>
...
const GLubyte* vendor = glGetString (GL_VENDOR);
const GLubyte* renderer = glGetString (GL_RENDERER);
const GLubyte* version = glGetString (GL_VERSION);
const GLubyte* glsl_ver = glGetString (GL_SHADING_LANGUAGE_VERSION);
printf ( "%s : %s (%s)n >> GLSL: %sn",
vendor,
renderer,
version,
glsl_ver );
它应该产生这样的输出(从我的OS X 10.6笔记本电脑):
NVIDIA Corporation : NVIDIA GeForce GT 330M OpenGL Engine (2.1 NVIDIA-1.6.36)
>> GLSL: 1.20
相关文章:
- 不带大括号的枚举形式
- 枚举环境变量的惯用C++14/C++17方法
- 类似枚举的计算常量
- 如何正确实现和访问运算符的各种自定义枚举器
- 错误:从"int"到枚举c++的转换无效
- C++中构造函数中的枚举
- 访问在 C++ 结构中声明的枚举变量
- 枚举类'classname'的多重定义
- 强枚举类型定义:Clang Bug 还是 C++11 标准不确定性?
- typedef 枚举和枚举类有什么区别?
- 为什么我的开关/机箱在使用枚举时默认?
- 枚举进程模块在有效句柄上返回无效句柄
- 设置类的枚举成员无效地使用"枚举"
- opengl;Glubuild2Dmipmaps枚举无效
- 将无效的 int 值强制转换为枚举
- 将成员枚举变量传递给类构造函数时出现无效的重定义错误
- OpenGL: glGetError() 在调用 glewInit() 后返回无效的枚举
- OpenGL 创建 glShaderObject 时出现无效枚举错误
- 模板中的枚举提升.为什么有时有效,有时无效
- 使用unordered_map以std::pair作为枚举类的键使用不完整类型struct std::hash无效