gpt4 book ai didi

c++ - Qt QOpenGLWidget glClearColor 无法正常运行

转载 作者:行者123 更新时间:2023-11-28 02:18:24 24 4
gpt4 key购买 nike

从 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 交换缓冲区和更新屏幕的方式有关,但尚不清楚究竟是什么导致了它。任何想法都会很棒,谢谢。

最佳答案

I assume this has something to do with how Qt swaps buffers and updates the screen but it's not clear what exactly is causing it. Any ideas would be great, thanks.

错误,它与在没有 OpenGL 上下文绑定(bind)的情况下执行 OpenGL 调用有关。 在进行任何 OpenGL 调用之前,您必须调用 makeCurrent

那为什么它在 paintGL 中起作用呢?因为 Qt 在调用 paintGLresizeGLinitializeGL 之前自动使上下文成为当前上下文(请参阅它们的文档)。

关于c++ - Qt QOpenGLWidget glClearColor 无法正常运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33331699/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com