0

我想在不调用 PaintGL 的情况下调用渲染例程,原因是我正在尝试使用 Qt OpenGL 实现的现代例程来渲染多通道效果,因此伪代码应该类似于:

for i=0 i<npasses i++
   glwidget->renderlayer i
glwidget->repaint //this calls PaintGL

问题是,如果我从 PaintGL 函数中调用渲染层,一切都会变得疯狂,它会被绘制在我的整个应用程序上,而不是在我的 glwidget(继承自 QOpenGLWidget)上,另一方面,渲染层函数是可以的,因为只能从 PaintGL 内部调用它像预期的那样工作。

对此有任何提示吗?

先感谢您

4

1 回答 1

1

您可以创建一个QOffscreenSurface这样的:

QOpenGLWidget* widget = ...;
QOpenGLContext* ctx = widget->context();

QOffscreenSurface surface;
surface.setFormat(ctx->format());
surface.setScreen(ctx->screen());
surface.create();

然后将您的 GL 上下文重新定位到该屏幕外表面,进行 FBO 渲染,最后重新定位 GL 上下文。

ctx->makeCurrent(&surface);

// Bind FBO, do the rendering

widget->makeCurrent();
于 2017-03-11T14:56:02.417 回答