opengl 显示函数中的参数

rslzwgfq  于 2023-10-18  发布在  其他
关注(0)|答案(1)|浏览(165)

我有一个函数来绘制eclipse:

void drawEclipse(GLfloat x, GLfloat y, GLfloat xrad,GLfloat yrad)

当我调用glutDisplayFunc(drawEclipse(10,10,3,3));
编译错误:

error: invalid use of void expression

如何将参数传递给glutDisplayFunc内部的函数?
这个eclipse绘图函数是动态调用的,只需单击鼠标。
我的更新代码:

void mouseClicks(int button, int state, int x, int y) {
    if(button == GLUT_LEFT_BUTTON && state == GLUT_DOWN) {
        printf("%s -- %d -- %d\n", "clicked",x,y);

        //Way 1
        glutDisplayFunc[&]() { drawEclipse(x,y,5,5); };

        //Way 2
        auto display = [x,y]() { return drawFilledelipse(x,y,3,3); };
        glutDisplayFunc(display);
   }
}
...
int main(){
...

    glutMouseFunc(mouseClicks);
...
2cmtqfgy

2cmtqfgy1#

我将引用Passing capturing lambda as function pointer的答案:
lambda只能转换为函数指针**,如果它不捕获**,从draft C++11 standard节5.1.2 [...]
你必须选择
glutDisplayFunc的参数是一个函数指针。你必须实现一个函数来绘制椭圆,并将函数指针传递给glutDisplayFunc

void display()
{
    drawEclipse(10,10,3,3);

    // [...]
}

glutDisplayFunc(drawEclipse(10,10,3,3));

glutDisplayFunc(display);

或者,您可以使用Lambda expression,而不使用任何捕获参数

glutDisplayFunc([]()
{
    drawEclipse(10,10,3,3);

    // [...]
});

相关问题