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); }