QGLWidget - 如何使用重绘来构建程序

时间:2012-07-18 21:02:13

标签: c++ qt opengl graphics qglwidget

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

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

如果没有:你将如何构建该计划?

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

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

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