在QOpenGLWidget上使用Qt5小部件而不重写?

问题描述 投票:0回答:1

我有一个OpenGL应用程序,我正在考虑移植到Qt5。在绘制场景的其余部分之前,我首先使用正交透视图绘制自己的基本GUI功能。片段着色器不会在已覆盖的像素上运行,而是在GUI上运行。

我找不到任何关于Qt5如何智能的信息。鉴于你可以在OpenGL中使用深度缓冲区,我猜测Qt被迫在事后绘制叠加小部件。

是否可以指示窗口小部件将自身渲染为纹理?如果我在屏幕上渲染纹理,我想我还必须捕获所有输入并手动将其推送到窗口小部件进行处理。

更好的方法是让我按照我想要的方式设置缓冲区,然后触发窗口小部件通过OpenGL直接渲染到QOpenGLWidget中。那可能吗?

qt qt5
1个回答
0
投票

看起来他们有任何OpenGL设备(src code)的画家。根据文档,您可以使用画家手动绘制小部件并执行其余的渲染。他们的消息来源显示他们积极使用模板缓冲区。

http://doc.qt.io/qt-5/qopenglwidget.html

也可以使用QPainter将2D图形绘制到QOpenGLWidget子类上:

  • 在paintGL()中,不是发出OpenGL命令,而是构造一个QPainter对象以在小部件上使用。
  • 使用QPainter的成员函数绘制基元。
  • 仍然可以发出直接OpenGL命令。但是,您必须确保通过调用painter的beginNativePainting()和endNativePainting()来封闭它们。
© www.soinside.com 2019 - 2024. All rights reserved.