我使用GLEW和freeglut。出于某种原因,在调用glewInit()之后,glGetError()返回错误代码1280,即使使用glewExperimental = GL_FALSE也是如此。
我无法编译着色器,glGetProgramInfoLog()返回“在调用glLinkProgram()之前未成功编译顶点着色器。链接失败。”我之前能够编译着色器。
重新安装驱动程序没有帮助。
这是我的代码:
int main(int argc, char* argv[])
{
GLenum GlewInitResult, res;
InitWindow(argc, argv);
res = glGetError(); // res = 0
glewExperimental = GL_TRUE;
GlewInitResult = glewInit();
fprintf(stdout, "ERROR: %s\n", glewGetErrorString(GlewInitResult)); // "No error"
res = glGetError(); // res = 1280
glutMainLoop();
exit(EXIT_SUCCESS);
}
void InitWindow(int argc, char* argv[])
{
glutInit(&argc, argv);
glutInitContextVersion(4, 0);
glutInitContextFlags(GLUT_FORWARD_COMPATIBLE);
glutInitContextProfile(GLUT_CORE_PROFILE);
glutSetOption(GLUT_ACTION_ON_WINDOW_CLOSE,
GLUT_ACTION_GLUTMAINLOOP_RETURNS);
glutInitWindowPosition(0, 0);
glutInitWindowSize(CurrentWidth, CurrentHeight);
glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
WindowHandle = glutCreateWindow(WINDOW_TITLE);
GLenum errorCheckValue = glGetError();
if (WindowHandle < 1)
{
fprintf(stderr, "ERROR: Could not create new rendering window.\n");
exit(EXIT_FAILURE);
}
glutReshapeFunc(ResizeFunction);
glutDisplayFunc(RenderFunction);
glutIdleFunc(IdleFunction);
glutTimerFunc(0, TimerFunction, 0);
glutCloseFunc(Cleanup);
glutKeyboardFunc(KeyboardFunction);
}
我做错了什么?
答案 0 :(得分:21)
您是否在此维基页面上看到了评论?
http://www.opengl.org/wiki/OpenGL_Loading_Library
它提到了为什么会发生这种情况,并且它说“在某些情况下,根据你的glew版本指定glewExperimental后,你仍然可以获得GL_INVALID_ENUM”。
只要你没有看到任何其他问题,听起来似乎是安全的。
答案 1 :(得分:-2)
似乎glew只是无法正常工作......对我来说最简单的解决方案是使用libepoxy。它不需要任何初始化的东西。只需更换
即可#include <GL/glew.h>
与
#include <epoxy/gl.h>
#include <epoxy/glx.h>
并删除所有的glew代码。如果你使用gcc,你还必须替换&#34; -lGLEW&#34;与&#34; -lepoxy&#34;。就是这样。例如,我有类似的东西:
g++ main.cpp -lepoxy -lSDL2 -lSDL2_image -lSDL2_mixer -lglut -lGLU -o main
将环氧树脂标志放在别人面前似乎很重要。