package Ġdev . x an hub . tiny engine . renderer . framebuffer Ċ Ċ import Ġorg . j om l . Vector 2 ic Ċ import Ġorg . lwjgl . opengl . GL 3 0 .* Ċ import Ġjava . nio . ByteBuffer Ċ Ċ class ĠFrame Buffer ( val Ġsize : ĠVector 2 ic ) Ġ{ ĊĠĠĠ Ġval Ġid Ġ= Ġgl Gen Frame buffers () ĊĠĠĠ Ġval Ġr bo Id Ġ= Ġgl Gen Render buffers () ĊĠĠĠ Ġval Ġtexture Ġ= ĠFrame buffer Texture ( this ) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠFrame Buffer ĊĠĠĠĠĠĠĠ ĠglBind Framebuffer ( GL _ FRAMEBUFFER , Ġid ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠTexture ĊĠĠĠĠĠĠĠ Ġval Ġempty Buffer : ĠByteBuffer ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ ĠglBind Texture ( GL _ TEXTURE _ 2 D , Ġtexture . id ) ĊĠĠĠĠĠĠĠ Ġgl TexImage 2 D ( GL _ TEXTURE _ 2 D , Ġ 0 , ĠGL _ RGB , Ġsize . x (), Ġsize . y (), Ġ 0 , ĠGL _ RGB , ĠGL _ UNSIGNED _ BYTE , Ġempty Buffer ) ĊĠĠĠĠĠĠĠ Ġgl TexParameter i ( GL _ TEXTURE _ 2 D , ĠGL _ TEXTURE _ WRAP _ S , ĠGL _ CLAMP _ TO _ EDGE ) ĊĠĠĠĠĠĠĠ Ġgl TexParameter i ( GL _ TEXTURE _ 2 D , ĠGL _ TEXTURE _ WRAP _ T , ĠGL _ CLAMP _ TO _ EDGE ) ĊĠĠĠĠĠĠĠ Ġgl TexParameter i ( GL _ TEXTURE _ 2 D , ĠGL _ TEXTURE _ MIN _ FILTER , ĠGL _ LINEAR ) ĊĠĠĠĠĠĠĠ Ġgl TexParameter i ( GL _ TEXTURE _ 2 D , ĠGL _ TEXTURE _ MAG _ FILTER , ĠGL _ LINEAR ) ĊĠĠĠĠĠĠĠ Ġgl Framebuffer Texture 2 D ( GL _ FRAMEBUFFER , ĠGL _ COLOR _ ATTACHMENT 0 , ĠGL _ TEXTURE _ 2 D , Ġtexture . id , Ġ 0 ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠRender Buffer ĊĠĠĠĠĠĠĠ ĠglBind Render buffer ( GL _ RENDER BUFFER , Ġr bo Id ) ĊĠĠĠĠĠĠĠ Ġgl Render buffer Storage ( GL _ RENDER BUFFER , ĠGL _ DEPTH 2 4 _ STENCIL 8 , Ġsize . x (), Ġsize . y ()) ĊĠĠĠĠĠĠĠ Ġgl Framebuffer Render buffer ( GL _ FRAMEBUFFER , ĠGL _ DEPTH _ STENCIL _ ATTACHMENT , ĠGL _ RENDER BUFFER , Ġr bo Id ) ĊĊĠĠĠĠĠĠĠ Ġif ( gl Check Framebuffer Status ( GL _ FRAMEBUFFER ) Ġ!= ĠGL _ FRAMEBUFFER _ COMPLETE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException () ĊĊĠĠĠĠĠĠĠ ĠglBind Texture ( GL _ TEXTURE _ 2 D , Ġ 0 ) ĊĠĠĠĠĠĠĠ ĠglBind Render buffer ( GL _ RENDER BUFFER , Ġ 0 ) ĊĠĠĠĠĠĠĠ ĠglBind Framebuffer ( GL _ FRAMEBUFFER , Ġ 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġuse ( lambda : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ ĠglBind Framebuffer ( GL _ FRAMEBUFFER , Ġid ) ĊĠĠĠĠĠĠĠ Ġlambda () ĊĠĠĠĠĠĠĠ ĠglBind Framebuffer ( GL _ FRAMEBUFFER , Ġ 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdestroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġgl Delete Frame buffers ( id ) ĊĠĠĠĠĠĠĠ Ġgl Delete Render buffers ( this . r bo Id ) ĊĠĠĠĠĠĠĠ Ġthis . texture . destroy () ĊĠĠĠ Ġ} Ċ }