2

iPhone アプリを Android に移植していますが、OpenGL フレームバッファを使用する必要があります。私は Nexus One を持っています。glGet(GL_EXTENSIONS) を呼び出すと、Nexus One が iPhone と同じフレームバッファ拡張をサポートしていることがわかります。ただし、GLSurfaceView で OpenGL 拡張機能に関連する関数を呼び出すことができないようです。単純なフレーム バッファ取得関数を呼び出すと、UnsupportedOperationException が発生します。

この問題を解決できないようです。開発を続けるにはフレームバッファが必要です。完全に機能する OpenGL コンテキスト オブジェクトを取得するために OpenGL コンテキストが作成されるときに、いくつかのオプションを渡す必要がありますか? これは、ハードウェアの機能を決定するために実行しようとしているコードのブロックです。拡張機能をサポートしていると主張しており、私の gl オブジェクトは GL11ExtensionPack のインスタンスですが、glGetFramebufferAttachmentParameterivOES への呼び出しは UnsupportedOperationException で失敗します。

public void runEnvironmentTests()
{
    String extensions = gl.glGetString(GL11.GL_EXTENSIONS);
    Log.d("Layers Graphics", extensions);

    if (gl instanceof GL11ExtensionPack) {
        Log.d("Layers Graphics", "GL11 Extension Pack supported");

        GL11ExtensionPack g = (GL11ExtensionPack) gl;
        int[] r = new int[1];
        try {
            g.glGetFramebufferAttachmentParameterivOES(GL11ExtensionPack.GL_FRAMEBUFFER_OES,     GL11ExtensionPack.GL_COLOR_ATTACHMENT0_OES, L11.GL_TEXTURE_2D, r, 0);
            Log.d("Layers Graphics", "Framebuffers are supported");

        } catch (UnsupportedOperationException e) {
            e.printStackTrace();
            framebuffersSupported = false;
            Log.d("Layers Graphics", "Framebuffers are NOT supported");
        }
    }
}

誰かが GL_FRAMEBUFFERS_OES 拡張機能を正常に使用した場合は、私に知らせてください。Java API に実装されていないのではないかと考え始めています。

4

1 に答える 1

0

Android には現在、これらの関数の Java バージョンが実装されていないバグがあります。現時点でこれらの拡張機能を使用する唯一の方法は、NDK を使用することです。

于 2010-02-03T02:57:31.057 に答える