質問

This should be simple: I'm using a QGLWidget to draw some openGL graphics and I want to be able to write something on the openGL graphics rendered, so I'm using overpainting as in the Qt demo with QPainter.

Here are my two working choices of structuring my program:

// 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 ...
}

Considering that textures and shaders aren't going to be always the same, is any of these options acceptable (in performances and reasonably)?

If not: how would you structure the program?

Thank you for any help

役に立ちましたか?

解決

  1. load/compile/link shaders in the initializeGL() method, because that is relatively slow operation (specially if it is read from the disk)
  2. load textures in the initializeGL() method

Not sure what are buffers, but sounds like it should be done in the initialization, since it is done only once.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top