我正在将 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 中实现!