我有一个OpenGL应用程序,我正在考虑移植到Qt5。在绘制场景的其余部分之前,我首先使用正交透视图绘制自己的基本GUI功能。片段着色器不会在已覆盖的像素上运行,而是在GUI上运行。
我找不到任何关于Qt5如何智能的信息。鉴于你可以在OpenGL中使用深度缓冲区,我猜测Qt被迫在事后绘制叠加小部件。
是否可以指示窗口小部件将自身渲染为纹理?如果我在屏幕上渲染纹理,我想我还必须捕获所有输入并手动将其推送到窗口小部件进行处理。
更好的方法是让我按照我想要的方式设置缓冲区,然后触发窗口小部件通过OpenGL直接渲染到QOpenGLWidget中。那可能吗?
看起来他们有任何OpenGL设备(src code)的画家。根据文档,您可以使用画家手动绘制小部件并执行其余的渲染。他们的消息来源显示他们积极使用模板缓冲区。
http://doc.qt.io/qt-5/qopenglwidget.html
也可以使用QPainter将2D图形绘制到QOpenGLWidget子类上:
- 在paintGL()中,不是发出OpenGL命令,而是构造一个QPainter对象以在小部件上使用。
- 使用QPainter的成员函数绘制基元。
- 仍然可以发出直接OpenGL命令。但是,您必须确保通过调用painter的beginNativePainting()和endNativePainting()来封闭它们。