32883Fermer32885
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; }