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