c++ - studio - OpenGL: glGetError() devuelve una enumeración no válida después de llamar a glewInit()
instalar opengl visual studio 2017 (2)
Yo uso GLEW y freeglut. Por alguna razón, después de una llamada a glewInit (), glGetError () devuelve el código de error 1280, incluso con glewExperimental = GL_FALSE.
No puedo compilar los sombreadores, glGetProgramInfoLog () devuelve "Los sombreadores de vértice no se compilaron correctamente antes de llamar a glLinkProgram (). Error de enlace. Pude compilar los shaders antes.
Reinstalar los controladores no ayudó.
Aquí está mi código:
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);
}
¿Que estoy haciendo mal?
¿Has visto el comentario en esta página wiki?
http://www.opengl.org/wiki/OpenGL_Loading_Library
Menciona por qué ocurre esto y dice "en algunos casos, es posible que aún obtengas GL_INVALID_ENUM después de especificar glewExperimental en función de tu versión de glew".
Parece que podría ser seguro ignorarlo mientras no veas ningún otro problema.
Parece que Glew simplemente no funciona correctamente ... La solución más fácil para mí fue usar libepoxy. No requiere ninguna cosa de inicio. Solo reemplaza tu
#include <GL/glew.h>
con
#include <epoxy/gl.h>
#include <epoxy/glx.h>
y eliminar todo el código glew. Si usa gcc, también tendrá que reemplazar "-lGLEW" por "-lepoxy". Eso es. Por ejemplo tengo algo como:
g++ main.cpp -lepoxy -lSDL2 -lSDL2_image -lSDL2_mixer -lglut -lGLU -o main
Parece ser importante mantener la bandera epoxi antes que otras.