这应该很简单:我正在使用QGLWidget绘制一些openGL图形,我希望能够在渲染的openGL图形上写一些东西,所以我正在使用QPainter的Qt演示中进行重绘。
以下是构建程序的两个工作选择:
// This works but it's probably stupid
paintEvent()
{
makeCurrent();
glewInit();
loadShaders();
loadTextures();
loadBuffers();
... actually paint something with openGL ...
QPainter painter(this);
... overpainting ...
}
------------------------------------------------------------------------------------
// This works and may probably be better
paintEvent()
{
QGLWidget::paintEvent(event); // Base class call, this calls initializeGL ONCE and then paintGL each time it's needed
QPainter painter(this);
... overpainting ...
}
initializeGL()
{
glewInit();
}
paintGL()
{
loadShaders();
loadTextures();
loadBuffers();
... actually paint something with openGL ...
}
考虑到纹理和着色器不会总是相同,这些选项中的任何一个都是可以接受的(在性能和合理性能方面)吗?
如果没有:你将如何构建该计划?
感谢您的帮助
答案 0 :(得分:0)
initializeGL()
方法中加载/编译/链接着色器,因为这是相对较慢的操作(特别是如果从磁盘读取)initializeGL()
方法不确定什么是缓冲区,但听起来应该在初始化时完成,因为它只进行一次。