Opengl形状不在回调函数中绘制

时间:2014-09-20 00:18:25

标签: c opengl graphics drawing

在我的opengl程序中,我想让用户点击某个键时屏幕变红。在我的my_keyboard函数中,我有以下内容:

void my_keyboard( unsigned char key, int x, int y ) {
    int feedback_code=0;
    if (key == 49) {
        feedback_code=1;
    }
    if (feedback_code==1) {
        flash_screen();
    }

我的flash_screen方法如下:

void screen_flash() {
    float mat[16];
    glGetFloatv(GL_MODELVIEW_MATRIX,mat);

    glColor3f(1.0f,0.0f,0.0f);

    glBegin(GL_POLYGON);
    glVertex2f(0.0f, 0.0f);
    glVertex2f(0.0f, 640.0f);
    glVertex2f(888.0f, 640.f);
    glVertex2f(888.0f, 0.0f);
    glEnd();
}

通过glGetFloatv调用,我知道我的变换矩阵在点(0,0)处的左下角处应该是。所以绘制函数应绘制一个红色方块888x640px,我的窗口大小。然而,当我运行程序并点击“1”键时,我没有得到一个形状!我使用断点并确定GlBegin-GlEnd语句已经运行,它们似乎没有产生任何东西。

我在主显示功能中完成了其他唯一的形状,在main_loop启动之前调用。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

这是一个常见的新手错误。所以这是一般规则:永远不要从事件处理程序进行OpenGL绘图调用。决不!

如果您希望屏幕上出现某些事件以响应输入事件,请设置一些标志变量,并发出重绘信号。然后在绘图功能中根据信号绘制。