0

这应该很简单:我正在使用 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 ...
}

考虑到纹理和着色器并不总是相同的,这些选项中的任何一个是否可以接受(在性能和合理方面)?

如果不是:您将如何构建程序?

感谢您的任何帮助

4

1 回答 1

0
  1. 在方法中加载/编译/链接着色器initializeGL(),因为这是相对较慢的操作(特别是从磁盘读取时)
  2. initializeGL()在方法中加载纹理

不确定什么是缓冲区,但听起来应该在初始化中完成,因为它只完成一次。

于 2012-07-18T21:08:54.850 回答