WarptenLe 22/11/2017 à 09:36
public void Bind()
{
if (!_dirty)
{
GL.BindFramebuffer(FramebufferTarget.Framebuffer, _handle);
return;
}
// Delete the previous framebuffer if it existed
if (GL.IsFramebuffer(_handle))
GL.DeleteFramebuffer(_handle);
_handle = GL.GenFramebuffer();
GL.BindFramebuffer(FramebufferTarget.Framebuffer, _handle);
if (!GL.IsTexture(_colorBufferHandle))
_colorBufferHandle = GL.GenTexture();
GL.BindTexture(TextureTarget.Texture2DMultisample, _colorBufferHandle);
GL.TexImage2DMultisample(TextureTargetMultisample.Texture2DMultisample, 4, PixelInternalFormat.Rgb, _width, _height, true); // 0, PixelFormat.Rgb, PixelType.UnsignedByte, IntPtr.Zero);
// GL.TexParameter(TextureTarget.Texture2DMultisample, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.Linear);
// GL.TexParameter(TextureTarget.Texture2DMultisample, TextureParameterName.TextureMagFilter, (int)TextureMinFilter.Linear);
GL.FramebufferTexture2D(FramebufferTarget.Framebuffer, FramebufferAttachment.ColorAttachment0, TextureTarget.Texture2DMultisample, _colorBufferHandle, 0);
if (!GL.IsRenderbuffer(_depthBufferHandle))
_depthBufferHandle = GL.GenRenderbuffer();
GL.BindRenderbuffer(RenderbufferTarget.Renderbuffer, _depthBufferHandle);
GL.RenderbufferStorageMultisample(RenderbufferTarget.Renderbuffer, 4, RenderbufferStorage.Depth32fStencil8, _width, _height);
GL.FramebufferRenderbuffer(FramebufferTarget.Framebuffer, FramebufferAttachment.DepthStencilAttachment, RenderbufferTarget.Renderbuffer, _depthBufferHandle);
if (GL.CheckFramebufferStatus(FramebufferTarget.Framebuffer) != FramebufferErrorCode.FramebufferComplete)
throw new InvalidOperationException();
_dirty = false;
}