bool SetupFramebuffer()
{
int fbo;
try {
GL.Ext.GenFramebuffers(1, out fbo);
GL.Ext.BindFramebuffer(FramebufferTarget.FramebufferExt, fbo);
GL.DrawBuffer(DrawBufferMode.ColorAttachment0);
GL.ReadBuffer(ReadBufferMode.ColorAttachment0);
}
catch {
Logger.Error("Failed to initialize framebuffers. Voxels will not be rendered.");
return false;
}
int depthbuffer;
GL.Ext.GenRenderbuffers(1, out depthbuffer);
GL.Ext.BindRenderbuffer(RenderbufferTarget.RenderbufferExt, depthbuffer);
GL.Ext.RenderbufferStorage(RenderbufferTarget.RenderbufferExt, RenderbufferStorage.DepthComponent32, _surface.BitmapData.Width, _surface.BitmapData.Height);
GL.Ext.FramebufferRenderbuffer(FramebufferTarget.FramebufferExt, FramebufferAttachment.DepthAttachmentExt, RenderbufferTarget.RenderbufferExt, depthbuffer);
int rgb_rb;
GL.Ext.GenRenderbuffers(1, out rgb_rb);
GL.Ext.BindRenderbuffer(RenderbufferTarget.RenderbufferExt, rgb_rb);
GL.Ext.RenderbufferStorage(RenderbufferTarget.RenderbufferExt, RenderbufferStorage.Rgba8, _surface.BitmapData.Width, _surface.BitmapData.Height);
GL.Ext.FramebufferRenderbuffer(FramebufferTarget.FramebufferExt, FramebufferAttachment.ColorAttachment0Ext, RenderbufferTarget.RenderbufferExt, rgb_rb);
return GL.CheckFramebufferStatus(FramebufferTarget.FramebufferExt) == FramebufferErrorCode.FramebufferCompleteExt;
}