Ich versuche, eine Textur zu machen (dachte wirklich, es wäre als dies einfacher sein!)ClassCaseException auf GL11ExtensionPack. Rendern Textur auf OpenGL android
ich diese Ressource gefunden: which seems to be exactly what I want
Ich erhalte eine Classcast jedoch, auf GL11ExtensionPack gl11ep = (GL11ExtensionPack) gl;
Kann mir jemand sagen, warum?
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);
}
}
Ausgabe von Entfernen setDebugFlags(GLSurfaceView.DEBUG_LOG_GL_CALLS);
jedoch festgelegt, die immer noch nicht die Textur zu modifizieren. Ich habe den Code so geändert, dass nur noch die Farbe Grün angezeigt wird. Die Textur sollte also grün werden. Hier ist die createFrameBuffer-Methode. Ich verstehe nicht wirklich alles, das in diesen los:/
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;
}
Haben Sie '' '' 'DebugFlags' 'auf die benutzte' GLSurfaceView' gesetzt? –
Zusätzlich, welche Android-Version verwenden Sie? –
Ich tat, und 'setDebugFlags' ist im Moment noch aktiv - soll ich versuchen, es zu entfernen? (at work atm, werde versuchen, wenn ich nach Hause komme) Ich benutze Android Version 2.3 - von 2.2 erhöht, um zu sehen, ob es funktionieren würde. – Joe