Я пытаюсь использовать статический android.opengl.GLES11Ext в Honeycomb, но продолжаю получать исключение при попытке создать FBO.Приведенный ниже код отлично работает на нескольких устройствах, использующих пакет khronus, но не работает с помощью android.opengl:
private int createFrameBuffer(GL10 gl, int width, int height, int targetTextureId) {
GL11ExtensionPack gl11ep = (GL11ExtensionPack) gl;
int framebuffer;
int[] framebuffers = new int[1];
gl11ep.glGenFramebuffersOES(1, framebuffers, 0);
framebuffer = framebuffers[0];
gl11ep.glBindFramebufferOES(GL11ExtensionPack.GL_FRAMEBUFFER_OES, framebuffer);
int stencilBuffer;
int[] renderbuffers = new int[1];
gl11ep.glGenRenderbuffersOES(1, renderbuffers, 0);
stencilBuffer = renderbuffers[0];
gl11ep.glBindRenderbufferOES(GL11ExtensionPack.GL_RENDERBUFFER_OES, stencilBuffer);
if(mContextSupportsStencilBuffer) {
gl11ep.glRenderbufferStorageOES(GL11ExtensionPack.GL_RENDERBUFFER_OES, GL11ExtensionPack.GL_STENCIL_INDEX8_OES, width, height);
gl11ep.glFramebufferRenderbufferOES(GL11ExtensionPack.GL_FRAMEBUFFER_OES, GL11ExtensionPack.GL_STENCIL_ATTACHMENT_OES, GL11ExtensionPack.GL_RENDERBUFFER_OES, stencilBuffer);
}
else {
gl11ep.glRenderbufferStorageOES(GL11ExtensionPack.GL_RENDERBUFFER_OES, GL11ExtensionPack.GL_DEPTH_COMPONENT16, width, height);
gl11ep.glFramebufferRenderbufferOES(GL11ExtensionPack.GL_FRAMEBUFFER_OES,GL11ExtensionPack.GL_DEPTH_ATTACHMENT_OES, GL11ExtensionPack.GL_RENDERBUFFER_OES, stencilBuffer);
}
gl11ep.glFramebufferTexture2DOES(GL11ExtensionPack.GL_FRAMEBUFFER_OES, GL11ExtensionPack.GL_COLOR_ATTACHMENT0_OES,GL10.GL_TEXTURE_2D, targetTextureId, 0);
int status = gl11ep.glCheckFramebufferStatusOES(GL11ExtensionPack.GL_FRAMEBUFFER_OES);
if (status != GL11ExtensionPack.GL_FRAMEBUFFER_COMPLETE_OES) {
throw new RuntimeException("Framebuffer is not complete: " + Integer.toHexString(status));
}
gl11ep.glBindFramebufferOES(GL11ExtensionPack.GL_FRAMEBUFFER_OES, 0);
return framebuffer;
}
Причина, по которой я хочу использовать пакет android.opengl, заключается в том, что он предоставляет расширение GL_DEPTH24_STENCIL8_OES, которое мне нужнона некоторых устройствах.Устройства, использующие чипсет NVidea Tegra 2, прекрасно работают с приведенным выше кодом.Однако 8,9-дюймовое 4-граммовое устройство Samsung от AT & T использует чип Adreno 220, который не поддерживает GL_STENCIL_INDEX8_OES. Однако он поддерживает GL_DEPTH24_STENCIL8_OES с использованием FBO. Я полагаюсь на собственный движок рендеринга, который в настоящее время поддерживает только OpenGL ES 1.1.до 2.0 было бы нелегко и быстро. Как я могу использовать пакет android.opengl с расширением GL_DEPTH24_STENCIL8_OES и FBO в OpenGL ES 1.1? Я уже несколько дней гуглю, но пока не нашел решения.
Было бы очень полезно, если бы кто-нибудь реализовал пример FrameBufferObjectActivity из Goolge, используя пакет android.opengl вместо khronos.