82 lines
1.6 KiB
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);
|
|
}
|
|
}
|
|
|
|
}
|