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