public void AddDepthBuffer(bool multisampling) { if (depthBuffer != -1) { DevConsole.Log(LogType.Error, "Framebuffer already has depth buffer"); return; } multisampledDepth = multisampling; TextureTarget textureTarget = multisampling ? TextureTarget.Texture2DMultisample : TextureTarget.Texture2D; depthBuffer = Ogl.GenTexture($"{name} - Depth"); Ogl.BindTexture(textureTarget, depthBuffer); if (multisampling) { Ogl.TexImage2DMultisample(TextureTargetMultisample.Texture2DMultisample, 4, PixelInternalFormat.DepthComponent, Size.x, Size.y, true); } else { Ogl.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.DepthComponent, Size.x, Size.y, 0, PixelFormat.DepthComponent, PixelType.Float, null); Ogl.TexParameter(textureTarget, TextureParameterName.TextureMinFilter, TextureMinFilter.Nearest); Ogl.TexParameter(textureTarget, TextureParameterName.TextureMagFilter, TextureMagFilter.Nearest); Ogl.TexParameter(textureTarget, TextureParameterName.TextureWrapS, TextureWrapMode.ClampToBorder); Ogl.TexParameter(textureTarget, TextureParameterName.TextureWrapT, TextureWrapMode.ClampToBorder); Ogl.TexParameter(textureTarget, TextureParameterName.TextureBorderColor, new float[] { 1, 1, 1, 1 }); } Ogl.BindFramebuffer(FramebufferTarget.Framebuffer, handle); Ogl.FramebufferTexture2D(FramebufferTarget.Framebuffer, FramebufferAttachment.DepthAttachment, textureTarget, depthBuffer, 0); var error = Ogl.CheckFramebufferStatus(FramebufferTarget.Framebuffer); if (error != FramebufferErrorCode.FramebufferComplete) { DevConsole.Log(LogType.Warning, error); } Ogl.BindFramebuffer(FramebufferTarget.Framebuffer, 0); }
public void AddColorBuffer(bool multisampling) { if (colorBuffer != -1) { DevConsole.Log(LogType.Error, "Framebuffer already has color buffer"); return; } multisampledColor = multisampling; TextureTarget textureTarget = multisampling ? TextureTarget.Texture2DMultisample : TextureTarget.Texture2D; colorBuffer = Ogl.GenTexture($"{name} - Color"); Ogl.BindTexture(textureTarget, colorBuffer); if (multisampling) { Ogl.TexImage2DMultisample(TextureTargetMultisample.Texture2DMultisample, 4, PixelInternalFormat.Rgb, Size.x, Size.y, true); } else { Ogl.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgb, Size.x, Size.y, 0, PixelFormat.Rgb, PixelType.UnsignedByte, null); Ogl.TexParameter(textureTarget, TextureParameterName.TextureMinFilter, TextureMinFilter.Linear); Ogl.TexParameter(textureTarget, TextureParameterName.TextureMagFilter, TextureMagFilter.Linear); Ogl.TexParameter(textureTarget, TextureParameterName.TextureWrapS, TextureWrapMode.Repeat); Ogl.TexParameter(textureTarget, TextureParameterName.TextureWrapT, TextureWrapMode.Repeat); } Ogl.BindFramebuffer(FramebufferTarget.Framebuffer, handle); Ogl.FramebufferTexture2D(FramebufferTarget.Framebuffer, FramebufferAttachment.ColorAttachment0, textureTarget, colorBuffer, 0); var error = Ogl.CheckFramebufferStatus(FramebufferTarget.Framebuffer); if (error != FramebufferErrorCode.FramebufferComplete) { DevConsole.Log(LogType.Warning, error); } Ogl.BindFramebuffer(FramebufferTarget.Framebuffer, 0); }
public override void UnbindShadowMap() { //Framebuffer.Blit(multisampledFBO, finalFBO, ClearBufferMask.DepthBufferBit); Ogl.BindFramebuffer(FramebufferTarget.Framebuffer, 0); }
public override void BindShadowMap() { Ogl.Viewport(0, 0, TEXTURE_RES, TEXTURE_RES); Ogl.BindFramebuffer(FramebufferTarget.Framebuffer, finalFBO.Handle); }
public static void Blit(Framebuffer read, Framebuffer write, ClearBufferMask mask) { Ogl.BindFramebuffer(FramebufferTarget.ReadFramebuffer, read.handle); Ogl.BindFramebuffer(FramebufferTarget.DrawFramebuffer, write.handle); Ogl.BlitFramebuffer(0, 0, read.Size.x, read.Size.y, 0, 0, write.Size.x, write.Size.y, mask, BlitFramebufferFilter.Nearest); }
public void Unbind() { Ogl.BindFramebuffer(FramebufferTarget.Framebuffer, 0); }
public void Bind() { Ogl.BindFramebuffer(FramebufferTarget.Framebuffer, handle); Ogl.DrawBuffer(DrawBufferMode.ColorAttachment0); }