Tôi sử dụng GLEW và freeglut. Vì lý do nào đó, sau khi gọi hàm glewInit(), glGetError() trả về mã lỗi 1280, ngay cả với glewExperimental = GL_FALSE.OpenGL: glGetError() trả về enum không hợp lệ sau khi gọi đến glewInit()
Tôi không thể biên dịch bóng đổ, glGetProgramInfoLog() trả về "Vertex shader (s) không được biên dịch thành công trước khi glLinkProgram() được gọi. Liên kết không thành công." Tôi đã có thể biên dịch các trình đổ bóng trước đây.
Cài đặt lại trình điều khiển không có tác dụng.
Dưới đây là mã của tôi:
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);
}
Những gì tôi đang làm sai?
Bạn có đang làm gì với GlewInitResult không? Có lẽ bạn nên gọi glewGetErrorString thay vì glGetError (để phát hiện vấn đề glew) – Tim
Tôi không làm bất cứ điều gì với GlewInitResult. glewGetErrorString trả về "Không có lỗi". – Martin