using OpenTK.Graphics.OpenGL4; namespace SM.OGL.Framebuffer { /// /// Describes a renderbuffer attachment. /// public struct RenderbufferAttachment { /// /// Preset for the depthbuffer attachment. /// public static readonly RenderbufferAttachment Depth = new RenderbufferAttachment(RenderbufferStorage.Depth24Stencil8, FramebufferAttachment.DepthStencilAttachment); /// /// Storage describes the internal format for the renderbuffer. /// public RenderbufferStorage Storage; /// /// FramebufferAttachment describes the attachment for the framebuffer. /// public FramebufferAttachment FramebufferAttachment; /// /// This contains the amount of multisampling for the attachment. /// public int Multisample; /// /// Constructor /// public RenderbufferAttachment(RenderbufferStorage storage, FramebufferAttachment framebufferAttachment, int multisample = 0) { Storage = storage; FramebufferAttachment = framebufferAttachment; Multisample = multisample; } /// /// This generates the renderbuffer for the framebuffer to add. /// /// The framebuffer /// The ID of the renderbuffer. public int Generate(Framebuffer f) { int rb = GL.GenRenderbuffer(); GL.BindRenderbuffer(RenderbufferTarget.Renderbuffer, rb); if (Multisample != 0) GL.RenderbufferStorageMultisample(RenderbufferTarget.Renderbuffer, Multisample, Storage, (int)f.Size.X, (int)f.Size.Y); else GL.RenderbufferStorage(RenderbufferTarget.Renderbuffer, Storage, (int)f.Size.X, (int)f.Size.Y); GL.BindRenderbuffer(RenderbufferTarget.Renderbuffer, 0); return rb; } } }