SimpleJavaEngine/src/main/java/speiger/src/coreengine/rendering/models/frameBuffer/BufferAttachment.java

82 lines
1.6 KiB
Java

package speiger.src.coreengine.rendering.models.frameBuffer;
import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.GL30;
public class BufferAttachment implements IFrameAttachment
{
int id;
int format;
int type;
int samples;
public BufferAttachment(int format)
{
this.format = format;
}
public static BufferAttachment createRGBA()
{
return new BufferAttachment(GL11.GL_RGBA);
}
public static BufferAttachment createRGB()
{
return new BufferAttachment(GL11.GL_RGB);
}
public static BufferAttachment createDepth()
{
return new BufferAttachment(GL11.GL_DEPTH_COMPONENT);
}
public static BufferAttachment createDepthStencil()
{
return new BufferAttachment(GL30.GL_DEPTH24_STENCIL8);
}
@Override
public int getId()
{
return id;
}
public void setBufferId(int id)
{
if(this.id != id)
{
this.id = id;
if(type != 0 && id != 0)
{
GL30.glFramebufferRenderbuffer(GL30.GL_FRAMEBUFFER, type, GL30.GL_RENDERBUFFER, id);
GL30.glBindRenderbuffer(GL30.GL_RENDERBUFFER, 0);
}
}
}
@Override
public void init(int type, int width, int height, int samples)
{
this.type = type;
this.samples = samples;
if(id == 0)
{
id = GL30.glGenRenderbuffers();
}
GL30.glBindRenderbuffer(GL30.GL_RENDERBUFFER, id);
GL30.glRenderbufferStorageMultisample(GL30.GL_RENDERBUFFER, samples, format, width, height);
GL30.glFramebufferRenderbuffer(GL30.GL_FRAMEBUFFER, type, GL30.GL_RENDERBUFFER, id);
GL30.glBindRenderbuffer(GL30.GL_RENDERBUFFER, 0);
}
@Override
public void delete()
{
if(id != 0)
{
GL30.glDeleteRenderbuffers(id);
}
}
}