0

これは単純なはずです。QGLWidgetを使用してopenGLグラフィックを描画し、レンダリングされたopenGLグラフィックに何かを書きたいので、QPainterを使用したQtデモのようにオーバーペイントを使用しています。

これが私のプログラムを構築するための私の2つの実用的な選択肢です:

// 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 に答える