GL11ExtensionPack上的ClassCaseException。openglandroid上的纹理渲染
我正在尝试渲染到纹理(我真的认为这会比这更容易!) 我找到了这个资源: 然而,在GL11ExtensionPack gl11ep=(GL11ExtensionPack)gl 谁能告诉我为什么GL11ExtensionPack上的ClassCaseException。openglandroid上的纹理渲染,android,opengl-es,classcastexception,render-to-texture,Android,Opengl Es,Classcastexception,Render To Texture,我正在尝试渲染到纹理(我真的认为这会比这更容易!) 我找到了这个资源: 然而,在GL11ExtensionPack gl11ep=(GL11ExtensionPack)gl 谁能告诉我为什么 public void renderToTexture(GLRenderer glRenderer, GL10 gl) { boolean checkIfContextSupportsExtension = checkIfContextSupportsExtension(gl, "GL_OE
public void renderToTexture(GLRenderer glRenderer, GL10 gl)
{
boolean checkIfContextSupportsExtension = checkIfContextSupportsExtension(gl, "GL_OES_framebuffer_object");
if(checkIfContextSupportsExtension)
{
GL11ExtensionPack gl11ep = (GL11ExtensionPack) gl;
int mFrameBuffer = createFrameBuffer(gl,texture.getWidth(), texture.getHeight(), texture.getGLID());
gl11ep.glBindFramebufferOES(GL11ExtensionPack.GL_FRAMEBUFFER_OES, mFrameBuffer);
gl.glClearColor(0f, 1f, 0f, 1f);
gl11ep.glBindFramebufferOES(GL11ExtensionPack.GL_FRAMEBUFFER_OES, 0);
}
}
通过删除setDebugFlags(GLSurfaceView.DEBUG\u LOG\u GL\u调用)修复问题代码>
但是,它仍然不会修改纹理。我修改了代码,使它所做的一切是明确的颜色绿色,所以纹理应该成为全绿色。下面是createFrameBuffer方法。我真的不明白这里面发生的一切:/
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 depthbuffer;
int[] renderbuffers = new int[1];
gl11ep.glGenRenderbuffersOES(1, renderbuffers, 0);
depthbuffer = renderbuffers[0];
gl11ep.glBindRenderbufferOES(GL11ExtensionPack.GL_RENDERBUFFER_OES, depthbuffer);
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, depthbuffer);
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));
Log.v("error","Frame buffer not complete");
} else {
gl11ep.glBindFramebufferOES(GL11ExtensionPack.GL_FRAMEBUFFER_OES, 0);
return -1;
}
return framebuffer;
}在GLSurfaceView
上调用setDebugFlags
来包装GL实例产生了不幸的副作用。不幸的是,该问题没有说明这是在哪个版本中修复的。您是否在使用的GLSurfaceView
上安装了setDebugFlags
?此外,您使用的是哪个安卓版本?我安装了,并且setDebugFlags
目前仍处于活动状态-我是否尝试删除它?(在工作时,我回家后会试试)我使用的是安卓2.3版——从2.2版增加到2.3版,看看它是否能工作。我怎么也想不到!是的,我也发现了这个问题;)这解决了你的问题吗?谢谢,这就是问题所在。但还是不能让它工作!哦,等等!一切都变绿了,然后就崩溃了——这是部分成功!它通过,似乎没有修改纹理几百次,然后再这样做,虽然。。。