什么时候使用 Qt 在 opengl 中创建渲染上下文?
Posted
技术标签:
【中文标题】什么时候使用 Qt 在 opengl 中创建渲染上下文?【英文标题】:When is the rendering context created in opengl with Qt? 【发布时间】:2011-11-15 16:15:28 【问题描述】:我正在使用 Qt 试用 OpenGL。我从 Qt 的文档中编译了2dpainting example。在这个例子中,有两个并排的动画,一个在本地运行,另一个由 OpenGL 渲染。我看不出有什么不同。我如何确保使用了硬件加速器。我正在使用 Ångström Linux 的嵌入式设备上运行该示例。
我在 opengl 小部件的构造函数中添加了一行,以确定使用的渲染器,但该函数始终返回一个 NULL 指针。
GLWidget::GLWidget(Helper *helper, QWidget *parent)
: QGLWidget(QGLFormat(QGL::SampleBuffers), parent), helper(helper)
elapsed = 0;
setFixedSize(200, 200);
setAutoFillBackground(false);
printf(" OpenGL Renderer: %s\n",glGetString(GL_RENDERER)); //added this line
现在我在许多在线论坛上读到,我需要一个有效的渲染上下文。但这意味着什么,在使用 Qt 时它是什么时候创建的?我尝试将相同的功能放在 GLWidget 的所有其他功能中,但没有任何运气。
【问题讨论】:
什么硬件,显卡驱动支持opengl? @neagoegab:Texas Instrument DM3730 它实际上只支持 OpenGLES 1.1 和 2.0,OpenVG1.0,但是 Qt 示例编译并运行没有问题。这就是为什么我试图找出发生了什么。 【参考方案1】:我相信它会尽可能晚地初始化,即在实际需要绘制某些东西时。
来自QGLWidget::paintEvent()
文档:
处理在 event 参数中传递的绘制事件。将导致调用虚拟paintGL()函数。 小部件的渲染上下文将成为当前上下文如果尚未调用 initializeGL(),则会调用它。
【讨论】:
这是否意味着在调用paintEvent() 后渲染上下文被破坏了? 不一定。但它只是在第一次需要绘制某些东西时才完全初始化。它应该始终在您应该覆盖的paintGL
虚拟中可用。【参考方案2】:
openGL场景在QGlWidgetpaintGL函数中渲染,一般需要用自己的paintGL函数从QGlWidget派生出来
NeHe教程已经adapted for Qt
【讨论】:
以上是关于什么时候使用 Qt 在 opengl 中创建渲染上下文?的主要内容,如果未能解决你的问题,请参考以下文章