首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QGLWidget忽略glClear

QGLWidget忽略glClear
EN

Stack Overflow用户
提问于 2013-12-07 12:30:33
回答 1查看 1.4K关注 0票数 2

我被难住了。我在Qt4.6应用程序的主窗口中有一个小部件,该小部件已配置为openGL小部件。它画得很好,除了我不能清除帧之间的背景。当窗口打开时,我得到了一个黑色的背景,在那之后它就再也不会消失了,所以随着时间的推移,我得到了一个混乱的渲染对象。我还必须在paintGL()函数的末尾调用swapBuffers(),以使小部件显示最近的帧,这让我感到困惑,因为我以为swapBuffers()是自动调用的。我设置为双缓冲,并且小部件不是共享的。相关代码如下:

代码语言:javascript
复制
void GLWidget::paintGL ( )
{
    m_Input.Draw();
    QGLWidget::swapBuffers();
}

void GLWidget::initializeGL ( )
{
    qglClearColor(QColor(0,0,255,128));
    glClear(GL_COLOR_BUFFER_BIT);
}

看起来双缓冲确实有些不对劲。将屏幕清除为背景色是非常基本的。但它让我抓狂,为什么它不能工作。绘图代码的其余部分工作正常。有什么想法吗?(这是在Linux系统上。)

EN

回答 1

Stack Overflow用户

发布于 2013-12-07 22:08:30

glClear是一个绘图操作。它不属于initializeGL,而属于paintGL。清除颜色也应该在调用glClear之前设置,所以移动[q]glClearColor

更新

paintGL方法应如下所示:

代码语言:javascript
复制
void GLWidget::paintGL()
{
    qglClearColor(QColor(0,0,255,128));
    glClear(GL_COLOR_BUFFER_BIT);
    // you probably also want to clear the depth and stencil buffers
    // glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);

    m_Input.Draw();

    QGLWidget::swapBuffers();
}

当然,您必须确保m_Input.Draw()不会再次把事情搞砸。你没有展示代码,所以我在这里是盲目的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20437595

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档