目前,我正在使用GLUT编写一个小型引擎。我一直坚持这个令人沮丧的问题。我在网上看到的所有解决方案似乎都无法帮助我。
我有一个函数,其中包含glutDisplayFunc:
void Window::Initialize(int argc, char ** argv, void* renderFunc)
renderFunc是我传递给glutDisplayFunc的参数,如下所示:
glutDisplayFunc(renderFunc);
每当我把它扔进去虽然我得到这个错误:
类型的参数" void "与" void()()"类型的参数不兼容
我完全无法解决这个问题。
无论出于何种原因,您可能需要额外的代码来调试它。以下是我正在处理的渲染和初始化函数。
void Window::Initialize(int argc, char ** argv, void* renderFunc)
{
Debug debug;
Window localWindow;
Core::Shader_Loader shaderLoader;
program = shaderLoader.CreateProgram("shader.vert", "shader.frag");
system("title Sandbox");
glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
glutInitWindowPosition(WindowPosX, WindowPosY);
glutInitWindowSize(WindowWidth, WindowHeight);
glutCreateWindow(title);
glutInit(&argc, argv);
glewInit();
if (glewIsSupported("GL_VERSION_4_3"))
{
debug.Message("GLEW Version 4.3");
}
else
{
debug.Error(101, "GLEW 4.3 is not supported");
}
glEnable(GL_DEPTH_TEST);
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
glutDisplayFunc(renderFunc);
glutMainLoop();
}
和
void Window::RenderScene(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glClearColor(0.0, 0.0, 0.0, 1.0);
glUseProgram(program);
glDrawArrays(GL_TRIANGLES, 0, 3);
glutSwapBuffers();
}
答案 0 :(得分:3)
glutDisplayFunc
将指向函数的指针作为其参数。 void* renderFunc
声明指向数据(未知类型)的指针。这些类型不兼容。
你需要:
void Window::Initialize(int argc, char ** argv, void (*renderFunc)())
答案 1 :(得分:2)
glutDisplayFunc
需要一个指向函数的指针,该函数返回void并且不带参数。您作为参数传递的是指向void的指针。这些是非常不同的东西,实际上甚至可能有不同的大小。
正确的类型是void (*)(void)
并用它来定义变量或参数符号void (*name)(void)
。
this
。并且GLUT不知道如何处理它。