public void Dispose() { uint handle = Handle; glDevice.BindFramebuffer(0); glDevice.glDeleteFramebuffers(1, ref handle); glDevice.glDeleteRenderbuffers(1, ref colorAttachment); if (depthStencilAttachment != 0) { glDevice.glDeleteRenderbuffers(1, ref depthStencilAttachment); } if (Texture != 0) { glDevice.glDeleteTextures(1, ref Texture); } glDevice = null; Handle = 0; }
public OpenGLBackbuffer( ModernGLDevice device, int width, int height, DepthFormat depthFormat, int multiSampleCount ) { Width = width; Height = height; glDevice = device; DepthFormat = depthFormat; MultiSampleCount = multiSampleCount; Texture = 0; // Generate and bind the FBO. uint handle; glDevice.glCreateFramebuffers(1, out handle); Handle = handle; glDevice.BindFramebuffer(Handle); // Create and attach the color buffer glDevice.glCreateRenderbuffers(1, out colorAttachment); if (multiSampleCount > 0) { glDevice.glNamedRenderbufferStorageMultisample( colorAttachment, multiSampleCount, GLenum.GL_RGBA8, width, height ); } else { glDevice.glNamedRenderbufferStorage( colorAttachment, GLenum.GL_RGBA8, width, height ); } glDevice.glNamedFramebufferRenderbuffer( Handle, GLenum.GL_COLOR_ATTACHMENT0, GLenum.GL_RENDERBUFFER, colorAttachment ); if (depthFormat == DepthFormat.None) { // Don't bother creating a depth/stencil buffer. depthStencilAttachment = 0; return; } // Create and attach the depth/stencil buffer glDevice.glCreateRenderbuffers(1, out depthStencilAttachment); if (multiSampleCount > 0) { glDevice.glNamedRenderbufferStorageMultisample( depthStencilAttachment, multiSampleCount, XNAToGL.DepthStorage[(int) depthFormat], width, height ); } else { glDevice.glNamedRenderbufferStorage( depthStencilAttachment, XNAToGL.DepthStorage[(int) depthFormat], width, height ); } glDevice.glNamedFramebufferRenderbuffer( Handle, GLenum.GL_DEPTH_ATTACHMENT, GLenum.GL_RENDERBUFFER, depthStencilAttachment ); if (depthFormat == DepthFormat.Depth24Stencil8) { glDevice.glNamedFramebufferRenderbuffer( Handle, GLenum.GL_STENCIL_ATTACHMENT, GLenum.GL_RENDERBUFFER, depthStencilAttachment ); } }