0

QTをウィンドウ関数として使用してOpenGLアプリケーションを作成します。しかし、私はいくつかの問題があります。シェーダーやバッファーオブジェクトなどのOpenGLバージョン>=2.0の機能を使用しようとすると、アプリケーションが壊れます。私はQGLWidgetレンダリングウィジェットとして使用し、これは私のコードのスニペットです:

void RenderingWidget::initializeGL()
{
    GLuint buffer_id;
    glGenBuffers(...)
          .
          .
          .
}

そしてそれは失敗します。反対側では、バッファとシェーダを作成しQGLBufferQGLShaderクラス、バッファ、シェーダを適切に作成しますが、フラグメントシェーダのみが機能し、頂点バッファは何もしません。解決策は何ですか?GLEW重要な場合は、拡張機能を介してOpenGLバージョン>=2.0の機能にアクセスします/

4

1 に答える 1

1

GLEWを介して高度なOpenGL機能にアクセスするとします。それで、OpenGLコンテキストを取得した後に呼び出すことによってGLEWを適切に初期化することを覚えていましたかglewInit()(おそらくの最初のステートメントとしてinitializeGL())?そうしないと、必要な関数ポインタが適切に設定されないため、などの関数を呼び出すときに、何らかのアクセス違反またはnullポインタの逆参照が発生する可能性がありglGenBuffersます。

一方、Qtは、GLEWなどを使用せずに、内部で独自の手動拡張管理を実行します。そのため、バッファーまたはシェーダー管理のQt機能は適切に機能します。

于 2013-01-09T14:18:18.357 に答える