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 回答