我有一个正在考虑移植到Qt5的OpenGL应用程序。我先介绍了自己的基本GUI功能,这些功能首先以正交透视图绘制,然后再绘制其余场景。片段着色器不在已覆盖的像素上运行,而是在GUI上运行。
我找不到有关Qt5的智能程度的任何信息。如果您可以在OpenGL中使用所需的深度缓冲区,那么我猜Qt被迫在事实之后绘制覆盖小部件。
是否可以引导小部件将其自身渲染为纹理?如果我要在屏幕上渲染为纹理,我想我还必须捕获所有输入并将其手动推送到小部件进行处理。
更好的办法是让我按需要设置缓冲区,然后触发窗口小部件以通过OpenGL将自身直接渲染到QOpenGLWidget中。有可能吗?
答案 0 :(得分:0)
似乎他们有适用于所有OpenGL设备(src code)的绘画工具。根据文档,您可以使用绘画工具手动绘制小部件,然后进行其余的渲染。他们的资料显示他们正在积极使用模板缓冲区。
http://doc.qt.io/qt-5/qopenglwidget.html
还可以将2D图形绘制到QOpenGLWidget子类上 使用QPainter:
- 在paintGL()中,而不是发出OpenGL命令,而是构造一个QPainter 用于小部件的对象。
- 使用QPainter的成员函数绘制基元。
- 直接OpenGL命令仍然可以发出。但是你 必须确保将这些内容包含在对画家的电话中 beginNativePainting()和endNativePainting()。