0

Java と LWJGL を使用して OpenGL で VBO を使用する方法を練習しています (このチュートリアルを使用し、基本的にそのコードをコピーします: http://www.arcsynthesis.org/gltut/index.html )。

ウィンドウをセットアップしました。これが私の render() 関数で、メイン ループ内で呼び出されます。

public void render() {

    FloatBuffer buffer = BufferUtils.createFloatBuffer(3 * 3);

    buffer.put(-1);
    buffer.put(-1);
    buffer.put(0);

    buffer.put(0);
    buffer.put(1);
    buffer.put(0);

    buffer.put(1);
    buffer.put(-1);
    buffer.put(0);

    buffer.flip();

    int vbo = glGenBuffers();

    glBindBuffer(GL_ARRAY_BUFFER, vbo);
    glBufferData(GL_ARRAY_BUFFER, buffer, GL_STATIC_DRAW);

    glEnableVertexAttribArray(0);

    glVertexAttribPointer(0, 3, GL_FLOAT, false, 3 * 4, 0);

    glDrawArrays(GL_TRIANGLES, 0, 3);

    glDisableVertexAttribArray(0);

}

ご覧のとおり、三角形を描画するのは非常に単純なコードです。しかし、Intel HD 4000 グラフィックスを実行している Mac OS X Mountain Lion ラップトップで得られるものは次のとおりです。 ここに画像の説明を入力

そして、AMD HD 6850 グラフィックスを実行している Windows 7 で得られるのは次のとおりです。 ここに画像の説明を入力

何故ですか?これが発生する理由は本当にわかりません。どちらのビデオ カードも OpenGL 2.0 をサポートしています。これは私が使用しているものですよね?

4

1 に答える 1

0

最初に VAO オブジェクトを使い始めたとき、私はこの問題を解決するために多くの時間を費やしました。控えめに言っても、とてもイライラしました。

私は最終的にそれを理解しました.プログラム要件はCoreプロファイルの外で緩和されるべきでしたが、glGenVertexArraysを呼び出す前にシェーダーでglLinkProgramとglUseProgramを使用する必要がある互換性プロファイルの不具合に帰着すると思います.. .

最も簡単な解決策は、単に置き換えることです。

GL30.glGenVertexArraysAPPLEVertexArrayObject.glGenVertexArraysAPPLE GL30.glBindVertexArray一緒 APPLEVertexArrayObject.glBindVertexArrayAPPLE GL30.glDeleteVertexArraysAPPLEVertexArrayObject.glDeleteVertexArrayAPPLE

シェーダーをコンパイルし、使用する前に glUseProgram を呼び出すことで、問題を解決することもできGL30.glGenVertexArraysます ...

于 2013-09-07T01:19:06.137 に答える