我想在不调用PaintGL的情况下调用渲染例程,原因是我正在尝试使用Qt OpenGL实现的现代例程来渲染多遍效果,因此伪代码应该是这样的:
for i=0 i<npasses i++
glwidget->renderlayer i
glwidget->repaint //this calls PaintGL
问题在于,如果我从PaintGL函数中调用renderlayer,那么一切都会变得疯狂,它会在我的整个应用程序中被绘制而不是在我的glwidget(继承自QOpenGLWidget)上,另一方面,渲染层功能是可以的,因为只能从在PaintGL中,它的工作方式与预期的一样。
有关此的任何提示吗?
提前谢谢
答案 0 :(得分: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();