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 に実装されていないのではないかと考え始めています。