Qt QOpenGLWidget glClearColor无法正常运行

时间:2015-10-25 15:52:43

标签: c++ qt opengl

从paintGL()之外的各个地方调用glClearColor时遇到了一些问题。目的是让用户能够动态设置清晰的颜色,但这不按计划工作,除非在paintGL中每个帧调用glClearColor。

目的:

void GLWidget::mousePressEvent(QMouseEvent *event)
{
    m_lastPos = event->pos();
    glClearColor(1.0f, 0.0f, 0.0f, 1.0f); //<-- Doesn't change clear colour
}

非最佳解决方法:

void GLWidget::mousePressEvent(QMouseEvent *event)
{
    m_lastPos = event->pos();
    r = 1.0f;
    g = 0.0f;
    b = 0.0f;
    a = 1.0f;
}

void GLWidget::paintGL()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glEnable(GL_DEPTH_TEST);
    glEnable(GL_CULL_FACE);
    glClearColor(r, g, b, a);
...

我认为这与Qt如何交换缓冲区和更新屏幕有关,但目前尚不清楚究竟是什么导致它。任何想法都会很棒,谢谢。

1 个答案:

答案 0 :(得分:2)

  

我认为这与Qt交换缓冲区和更新屏幕的方式有关,但不清楚究竟是什么导致它。任何想法都会很棒,谢谢。

错了,它与没有OpenGL上下文绑定的OpenGL调用有关。 在进行任何OpenGL调用之前,您必须先致电iex> list1 -- (list1 -- list2) # => [2, 3]

为什么它在makeCurrent中有效?因为Qt会在调用paintGLpaintGLresizeGL之前自动生成上下文(请参阅他们的文档)。