QT OpenGLWidget的surfaceFormat

Posted myboat

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QT OpenGLWidget的surfaceFormat相关的知识,希望对你有一定的参考价值。

由OpenGLWidget和QOpenGLFunctions_2_0派生了类,试图使用双帧缓冲(Double Buffer)进行渲染。下面是部分功能代码:

initializeGL()中:

  QSurfaceFormat uformat; 

  uformat.setDepthBufferSize(24);

  uformat.setStencilBufferSize(8);

  uformat.setSwapBehavior(QSurfaceFormat::DoubleBuffer);

  this->context()->setFormat(uformat);

PaintGL()中绘制完成后:

  this->context()->swapBuffers(this->context()->surface());

后发现没有使用swapBuffers和glFlush,绘制不受影响,照样完成动画的绘制,很奇怪。于是在initializeGL()的前部加入如下代码测试:

  QSurfaceFormat format = this->context()->surface()->format();

  QSurfaceFormat::SwapBehavior b = format.swapBehavior();

发现系统一开始b就是double_buffer。可见本例程不需要进行任何设置就在使用双缓冲,可以用glFlush,但swapBuffers好像不太需要

 

以上是关于QT OpenGLWidget的surfaceFormat的主要内容,如果未能解决你的问题,请参考以下文章

qopenglwidget添加widget

Qt/OpenGL 小部件中的显示损坏

Qt 中的 GLWidget 仅在 mousemove 上更新

为啥当我没有为我的 openGLWidget 创建额外的类时 glRotate 只工作一次?

MFC+OpenGL可编程管线

没有子类化的 QOpenGLWidget