1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| private void createBuffers() { int [] params = new int [1]; gl.glBindFramebufferEXT( GL_FRAMEBUFFER_EXT, frameBufferID ); if ( (flags & PIXEL_BUFFER) != 0 ) { gl.glGenTextures( 1, params, 0 ); pixelBufferID = params[0]; gl.glBindTexture( GL_TEXTURE_2D, pixelBufferID ); gl.glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA8, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, null ); gl.glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST ); gl.glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST ); setUpPixelBuffer( gl ); gl.glFramebufferTexture2DEXT( GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, pixelBufferID, 0 ); } else { gl.glDrawBuffer( GL_NONE ); gl.glReadBuffer( GL_NONE ); }
if ( (flags & DEPTH_BUFFER) != 0 ) { gl.glGenTextures( 1, params, 0 ); depthBufferID = params[0]; gl.glBindTexture( GL_TEXTURE_2D, depthBufferID ); gl.glTexImage2D( GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, width, height, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, null ); gl.glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST ); gl.glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST ); gl.glTexParameterf( GL_TEXTURE_2D, GL_DEPTH_TEXTURE_MODE, GL_INTENSITY ); setUpDepthBuffer( gl ); gl.glFramebufferTexture2DEXT( GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_TEXTURE_2D, depthBufferID, 0 ); } int status = gl.glCheckFramebufferStatusEXT( GL_FRAMEBUFFER_EXT ); if ( status != GL_FRAMEBUFFER_COMPLETE_EXT ) { String errorMsg = getErrorMessage( status ); throw new Error( "Could not create offscreen render target - " + errorMsg ); }
gl.glBindFramebufferEXT( GL_FRAMEBUFFER_EXT, 0 ); } |