从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如何交换缓冲区和更新屏幕有关,但目前尚不清楚究竟是什么导致它。任何想法都会很棒,谢谢。
答案 0 :(得分:2)
我认为这与Qt交换缓冲区和更新屏幕的方式有关,但不清楚究竟是什么导致它。任何想法都会很棒,谢谢。
错了,它与没有OpenGL上下文绑定的OpenGL调用有关。 在进行任何OpenGL调用之前,您必须先致电iex> list1 -- (list1 -- list2)
# => [2, 3]
。
为什么它在makeCurrent
中有效?因为Qt会在调用paintGL
,paintGL
和resizeGL
之前自动生成上下文(请参阅他们的文档)。