Void Overload与glutDisplayFunc

时间:2016-08-15 17:58:01

标签: c++ opengl visual-c++ glut

目前,我正在使用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();
}

2 个答案:

答案 0 :(得分:3)

glutDisplayFunc将指向函数的指针作为其参数。 void* renderFunc声明指向数据(未知类型)的指针。这些类型不兼容。

你需要:

void Window::Initialize(int argc, char ** argv, void (*renderFunc)())

答案 1 :(得分:2)

glutDisplayFunc需要一个指向函数的指针,该函数返回void并且不带参数。您作为参数传递的是指向void的指针。这些是非常不同的东西,实际上甚至可能有不同的大小。

正确的类型是void (*)(void)并用它来定义变量或参数符号void (*name)(void)

PS:我已经看到下一个问题了:你可能会尝试传递你班级的成员函数而你会得到类似的错误&#34;期望无效(< em>)(void)但参数的类型为void Window ::()(void) - 类型不匹配&#34;。成员函数有一个&#34;隐藏&#34; / implicit第一个参数this。并且GLUT不知道如何处理它。