Hello!
I’m tryin to use FBO.
I created an FBO instance with an GL_TEXTURE_2D texture attached to GL_COLOR_ATTACHMENT0_EXT.
When I use like this:
gl.glBindFramebufferEXT( GL.GL_FRAMEBUFFER_EXT, FBO[0] );
//gl.glPushMatrix();
//gl.glScalef( 1.0f, -1.0f, 1.0f );
render();
//gl.glPopMatrix();
gl.glBindFramebufferEXT( GL.GL_FRAMEBUFFER_EXT, 0 );
render();
After calling the first time the render method the fbo texture is a black.
What do I make wrong?
(sorry, for the bad english)
Thanks…
fbo creation method:
public static void createNewFrameBuffer(int width, int height, int[] FBO, int[] FBORenderBuffer, int[] FBOTexture ){
gl.glGenFramebuffersEXT( 1, FBO );
gl.glBindFramebufferEXT( GL.GL_FRAMEBUFFER_EXT, FBO[0] );
gl.glGenTextures( 1, FBOTexture );
//gl.glBindFramebufferEXT( GL.GL_FRAMEBUFFER_EXT, FBOTexture[0] );
gl.glBindTexture( GL.GL_TEXTURE_2D, FBOTexture[0] );
gl.glTexImage2D( GL.GL_TEXTURE_2D, 0, GL.GL_RGBA, width, height, 0, GL.GL_RGBA, GL.GL_UNSIGNED_BYTE, BufferUtils.bufferOffset(0) );
gl.glTexParameteri( GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MIN_FILTER, GL.GL_NEAREST );
gl.glTexParameteri( GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MAG_FILTER, GL.GL_NEAREST );
gl.glFramebufferTexture2DEXT( GL.GL_FRAMEBUFFER_EXT, GL.GL_COLOR_ATTACHMENT0_EXT, GL.GL_TEXTURE_2D, FBOTexture[0], 0 );
gl.glGenRenderbuffersEXT( 1, FBORenderBuffer );
gl.glBindRenderbufferEXT( GL.GL_RENDERBUFFER_EXT, FBORenderBuffer[0] );
gl.glRenderbufferStorageEXT( GL.GL_RENDERBUFFER_EXT, GL.GL_DEPTH_COMPONENT24, width, height );
gl.glFramebufferRenderbufferEXT( GL.GL_FRAMEBUFFER_EXT, GL.GL_DEPTH_ATTACHMENT_EXT, GL.GL_RENDERBUFFER_EXT, FBORenderBuffer[0] );
if( !checkFrameBufferStatus( width, height ) ){
JOptionPane.showMessageDialog(null, "FBO jajjajj", "Unavailable extension", JOptionPane.ERROR_MESSAGE);
System.exit( -1 );
}
gl.glBindFramebufferEXT(GL.GL_FRAMEBUFFER_EXT, 0);
}
private static boolean checkFrameBufferStatus(int width, int height) {
int status = gl.glCheckFramebufferStatusEXT( GL.GL_FRAMEBUFFER_EXT );
switch(status) {
case GL.GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENTS_EXT:
log( "Framebuffer status = GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT" +status);
return false;
case GL.GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT:
log( "Framebuffer status = GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT" +status);
return false;
case GL.GL_FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT_EXT:
log( "Framebuffer status = GL_FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT_EXT" +status);
return false;
case GL.GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT:
log( "Framebuffer status = GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT" +status);
return false;
case GL.GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT:
log( "Framebuffer status = GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT"+status);
return false;
case GL.GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT:
log( "Framebuffer status = GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT"+status);
return false;
case GL.GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT:
log( "Framebuffer status = GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT" );
return false;
case GL.GL_FRAMEBUFFER_COMPLETE_EXT:
log( "Successfully created the frame buffer object < " +
width + ", " + height + ">" );
return true;
case GL.GL_FRAMEBUFFER_UNSUPPORTED_EXT:
log("Failed to create the frame buffer object, please verify your format");
return false;
default:
log("????? FBO ????????");
return false;
}
}