package Ġde . fab max . k ool . platform . gl Ċ Ċ import Ġde . fab max . k ool . Desktop Impl Ċ import Ġde . fab max . k ool . K ool Context Ċ import Ġde . fab max . k ool . K ool Exception Ċ import Ġde . fab max . k ool . math . Mat 4 d Ċ import Ġde . fab max . k ool . modules . k sl . K sl Shader Ċ import Ġde . fab max . k ool . modules . k sl . generator . Gl sl Generator Ċ import Ġde . fab max . k ool . pipeline .* Ċ import Ġde . fab max . k ool . platform . Lwjgl 3 Context Ċ import Ġde . fab max . k ool . platform . Render Backend Ċ import Ġde . fab max . k ool . scene . Scene Ċ import Ġde . fab max . k ool . util . Viewport Ċ import Ġde . fab max . k ool . util . log E Ċ import Ġorg . lwjgl . glfw . GLFW .* Ċ import Ġorg . lwjgl . opengl . EXT Texture Filter An isot ropic Ċ import Ġorg . lwjgl . opengl . GL . create Capabilities Ċ import Ġorg . lwjgl . opengl . GL 1 1 .* Ċ import Ġorg . lwjgl . opengl . GL 1 1 C . gl GetString Ċ import Ġorg . lwjgl . opengl . GL 2 0 . GL _ MAX _ TEXTURE _ IMAGE _ UNITS Ċ import Ġorg . lwjgl . opengl . GL 2 0 . GL _ VERTEX _ PROGRAM _ POINT _ SIZE Ċ import Ġorg . lwjgl . opengl . GL 3 2 . GL _ TEXTURE _ CUBE _ MAP _ SE AM LESS Ċ Ċ class ĠGl Render Backend ( props : ĠL wjgl 3 Context . Init Props , Ġval Ġctx : ĠL wjgl 3 Context ) Ġ: ĠRender Backend Ġ{ ĊĠĠĠ Ġoverride Ġval Ġapi Name : ĠString ĊĠĠĠ Ġoverride Ġval Ġdevice Name : ĠString ĊĊĠĠĠ Ġprivate Ġval Ġglfw Window : ĠG lfw Gl Window ĊĠĠĠ Ġoverride Ġval Ġwindow Width : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġglfw Window . framebuffer Width ĊĠĠĠ Ġoverride Ġval Ġwindow Height : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġglfw Window . framebuffer Height ĊĠĠĠ Ġoverride Ġval Ġglfw Window Handle : ĠLong ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġglfw Window . window Ptr ĊĠĠĠ Ġoverride Ġvar Ġis Fullscreen : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġglfw Window . is Fullscreen ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ Ġglfw Window . is Fullscreen Ġ= Ġvalue Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġshader Generator Ġ= ĠShader Generator Impl GL () ĊĊĠĠĠ Ġoverride Ġval Ġproj Correction Matrix Screen Ġ= ĠMat 4 d () ĊĠĠĠ Ġoverride Ġval Ġproj Correction Matrix Off screen Ġ= ĠMat 4 d () ĊĠĠĠ Ġoverride Ġval Ġdepth Bias Matrix Ġ= ĠMat 4 d (). translate ( 0 . 5 , Ġ 0 . 5 , Ġ 0 . 5 ). scale ( 0 . 5 , Ġ 0 . 5 , Ġ 0 . 5 ) ĊĊĠĠĠ Ġval Ġsupported Extensions Ġ= Ġmutable Set Of < String >() ĊĠĠĠ Ġval Ġgl Capabilities Ġ= ĠGl Capabilities () ĊĊĠĠĠ Ġinternal Ġval Ġqueue Renderer Ġ= ĠQueue Renderer Gl ( this , Ġctx ) ĊĠĠĠ Ġinternal Ġval Ġafter Render Actions Ġ= Ġmutable ListOf < () Ġ-> ĠUnit >() ĊĊĠĠĠ Ġprivate Ġval Ġopen Render P asses Ġ= Ġmutable ListOf < Off screen RenderPass >() ĊĠĠĠ Ġprivate Ġval Ġdone Render P asses Ġ= Ġmutable Set Of < Off screen RenderPass >() ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġconfigure ĠGLFW ĊĠĠĠĠĠĠĠ Ġglfw Default Window Hints () ĊĠĠĠĠĠĠĠ Ġglfw Window Hint ( GLFW _ VISIBLE , ĠGLFW _ FALSE ) ĊĠĠĠĠĠĠĠ Ġglfw Window Hint ( GLFW _ RE SIZ ABLE , ĠGLFW _ TRUE ) ĊĠĠĠĠĠĠĠ Ġglfw Window Hint ( GLFW _ SCALE _ TO _ MONITOR , ĠGLFW _ TRUE ) ĊĠĠĠĠĠĠĠ Ġglfw Window Hint ( GLFW _ SAMPLES , Ġprops . ms aa Samples ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġcreate Ġwindow ĊĠĠĠĠĠĠĠ Ġval Ġfs Monitor Ġ= Ġif Ġ( props . monitor Ġ< Ġ 0 ) ĠDesktop Impl . primary Monitor Ġelse ĠDesktop Impl . monitor s [ props . monitor ] ĊĠĠĠĠĠĠĠ Ġglfw Window Ġ= ĠG lfw Gl Window ( props . width , Ġprops . height , Ġprops . title , Ġfs Monitor , Ġctx ) ĊĠĠĠĠĠĠĠ Ġglfw Window . is Fullscreen Ġ= Ġprops . is Fullscreen ĊĊĠĠĠĠĠĠĠ Ġ// Ġmake Ġthe ĠOpenGL Ġcontext Ġcurrent ĊĠĠĠĠĠĠĠ Ġglfw Make Context Current ( glfw Window Handle ) ĊĠĠĠĠĠĠĠ Ġ// Ġenable Ġv - sync ĊĠĠĠĠĠĠĠ Ġglfw Swap Interval ( 1 ) ĊĠĠĠĠĠĠĠ Ġ// Ġmake Ġthe Ġwindow Ġvisible ĊĠĠĠĠĠĠĠ Ġglfw Show Window ( glfw Window Handle ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThis Ġline Ġis Ġcritical Ġfor ĠL WJ GL 's Ġinter operation Ġwith ĠGLFW 's ĠOpenGL Ġcontext , Ġor Ġany Ġcontext Ġthat Ġis Ġmanaged ĊĠĠĠĠĠĠĠ Ġ// Ġextern ally . ĠL WJ GL Ġdetect s Ġthe Ġcontext Ġthat Ġis Ġcurrent Ġin Ġthe Ġcurrent Ġthread , Ġcreates Ġthe ĠGL Capabilities ĊĠĠĠĠĠĠĠ Ġ// Ġinstance Ġand Ġmakes Ġthe ĠOpenGL Ġbindings Ġavailable Ġfor Ġuse . ĊĠĠĠĠĠĠĠ Ġcreate Capabilities () ĊĊĠĠĠĠĠĠĠ Ġval Ġversion Str Ġ= Ġgl GetString ( GL _ VERSION ) Ġ?: Ġ"" ĊĠĠĠĠĠĠĠ Ġvar Ġversion Major Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġversion Minor Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġif Ġ( version Str . matches ( Regex ("^ [ 0 - 9 ]\\ .[ 0 - 9 ]. * "))) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparts Ġ= Ġversion Str . split ( Regex ("[ ^ 0 - 9 ] "), Ġ 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġversion Major Ġ= Ġparts [ 0 ]. toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġversion Minor Ġ= Ġparts [ 1 ]. toInt () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( version Major Ġ< Ġ 3 Ġ|| Ġ( version Major Ġ== Ġ 3 Ġ&& Ġversion Minor Ġ< Ġ 3 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠK ool Exception (" Minimum Ġrequired ĠOpenGL Ġversion Ġis Ġ 3 . 3 Ġbut Ġsystem Ġversion Ġis Ġ$ version Major .$ version Minor ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġapi Name Ġ= Ġ" OpenGL Ġ$ version Str " ĊĠĠĠĠĠĠĠ Ġdevice Name Ġ= Ġgl GetString ( GL _ RENDER ER ) Ġ?: Ġ"" ĊĊĠĠĠĠĠĠĠ Ġ// Ġcheck Ġfor Ġan isot ropic Ġtexture Ġfiltering Ġsupport ĊĠĠĠĠĠĠĠ Ġsupported Extensions . addAll ( gl GetString ( GL _ EXTENSION S )?. split (" Ġ") Ġ?: Ġempty List ()) ĊĠĠĠĠĠĠĠ Ġif Ġ( supported Extensions . contains (" GL _ EXT _ texture _ filter _ an isot ropic ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgl Capabilities . max An isot ropy Ġ= ĠglGet Float ( EXT Texture Filter An isot ropic . GL _ MAX _ TEXTURE _ MAX _ AN IS OT RO PY _ EXT ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgl Capabilities . gl Texture Max An isot ropy Ext Ġ= ĠEXT Texture Filter An isot ropic . GL _ TEXTURE _ MAX _ AN IS OT RO PY _ EXT ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġgl Capabilities . max Tex Units Ġ= ĠglGet Integer ( GL _ MAX _ TEXTURE _ IMAGE _ UNITS ) ĊĠĠĠĠĠĠĠ Ġgl Enable ( GL _ VERTEX _ PROGRAM _ POINT _ SIZE ) ĊĠĠĠĠĠĠĠ Ġgl Enable ( GL _ TEXTURE _ CUBE _ MAP _ SE AM LESS ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Window Viewport ( result : ĠView port ) Ġ{ ĊĠĠĠĠĠĠĠ Ġresult . set ( 0 , Ġ 0 , Ġwindow Width , Ġwindow Height ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdraw Frame ( ctx : ĠL wjgl 3 Context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( ctx . dis posable P ipelines . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġqueue Renderer . dispose P ipelines ( ctx . dis posable P ipelines ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġctx . dis posable P ipelines . clear () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġctx . background P asses . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ctx . background P asses [ j ]. isEnabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Off screen ( ctx . background P asses [ j ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx . background P asses [ j ]. after Draw ( ctx ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġctx . scenes . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscene Ġ= Ġctx . scenes [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( scene . isVisible ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Off screen P asses ( scene , Ġctx ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqueue Renderer . render Queue ( scene . main RenderPass . draw Queue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscene . main RenderPass . after Draw ( ctx ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( after Render Actions . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġafter Render Actions . forEach Ġ{ Ġit () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġafter Render Actions . clear () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġswap Ġthe Ġcolor Ġbuffers ĊĠĠĠĠĠĠĠ Ġglfw Swap Buffers ( glfw Window Handle ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdo Off screen P asses ( scene : ĠScene , Ġctx : ĠK ool Context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdone Render P asses . clear () ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġscene . off screen P asses . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrp Ġ= Ġscene . off screen P asses [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( rp . isEnabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Render P asses Ġ+= Ġrp ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdone Render P asses Ġ+= Ġrp ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwhile Ġ( open Render P asses . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġany Draw n Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġopen Render P asses . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpass Ġ= Ġopen Render P asses [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġskip Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġpass . dependencies . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdep Ġ= Ġpass . dependencies [ j ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( dep Ġ! in Ġdone Render P asses ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġskip Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! skip ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġany Draw n Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Render P asses Ġ-= Ġpass ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdone Render P asses Ġ+= Ġpass ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Off screen ( pass ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpass . after Draw ( ctx ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! any Draw n ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog E Ġ{ Ġ" Failed Ġto Ġrender Ġall Ġoff screen Ġpasses , Ġremaining :" Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Render P asses . forEach Ġ{ Ġp Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmissing P asses Ġ= Ġp . dependencies . filter Ġ{ Ġit Ġ! in Ġdone Render P asses Ġ}. map Ġ{ Ġit . name Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog E Ġ{ Ġ" Ġ Ġ${ p . name }, Ġmissing Ġdependencies : Ġ$ missing P asses " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Render P asses . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdraw Off screen ( off screen Pass : ĠOff screen RenderPass ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( off screen Pass ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠOff screen RenderPass 2 d Ġ-> Ġoff screen Pass . impl . draw ( ctx ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠOff screen RenderPass Cube Ġ-> Ġoff screen Pass . impl . draw ( ctx ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠOff screen RenderPass 2 d Ping P ong Ġ-> Ġdraw Off screen Ping P ong ( off screen Pass ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalArgumentException (" Off screen Ġpass Ġtype Ġnot Ġimplemented : Ġ$ off screen Pass ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdraw Off screen Ping P ong ( off screen Pass : ĠOff screen RenderPass 2 d Ping P ong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġoff screen Pass . ping P ong P asses ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoff screen Pass . on Draw Ping ?. invoke ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoff screen Pass . ping . impl . draw ( ctx ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoff screen Pass . on Draw P ong ?. invoke ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoff screen Pass . p ong . impl . draw ( ctx ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclose ( ctx : ĠL wjgl 3 Context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġglfw SetWindow Should Close ( glfw Window . window Ptr , Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcleanup ( ctx : ĠL wjgl 3 Context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġfor Ġnow , Ġwe Ġleave Ġthe Ġcleanup Ġto Ġthe Ġsystem ... ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġload Tex 2 d ( tex : ĠTexture 2 d , Ġdata : ĠTexture Data ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtex . loaded Texture Ġ= ĠTexture Loader . load Texture 2 d ( ctx , Ġtex . props , Ġdata ) ĊĠĠĠĠĠĠĠ Ġtex . loading State Ġ= ĠTexture . Loading State . LOADED ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġload Tex Cube ( tex : ĠTexture Cube , Ġdata : ĠTexture Data Cube ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtex . loaded Texture Ġ= ĠTexture Loader . load Texture Cube ( ctx , Ġtex . props , Ġdata ) ĊĠĠĠĠĠĠĠ Ġtex . loading State Ġ= ĠTexture . Loading State . LOADED ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcreate Off screen Pass 2 d ( parent Pass : ĠOff screen Pass 2 d Impl ): ĠOff screen Pass 2 d Impl . Backend Impl Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠOff screen Pass 2 d Gl ( parent Pass ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcreate Off screen Pass Cube ( parent Pass : ĠOff screen Pass Cube Impl ): ĠOff screen Pass Cube Impl . Backend Impl Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠOff screen Pass Cube Gl ( parent Pass ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġgenerate K sl Shader ( shader : ĠK sl Shader , Ġpipeline Layout : ĠPipeline . Layout ): ĠShader Code Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsrc Ġ= ĠGl sl Generator (). generate Program ( shader . program ) ĊĠĠĠĠĠĠĠ Ġif Ġ( shader . program . dump Code ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsrc . dump () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠShader Code . gl Code From Source ( src . vertex Src , Ġsrc . fragment Src ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠGl Capabilities Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġmax Tex Units Ġ= Ġ 1 6 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Ġset ĊĠĠĠĠĠĠĠ Ġvar Ġhas Float Textures Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Ġset ĊĠĠĠĠĠĠĠ Ġvar Ġmax An isot ropy Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Ġset ĊĠĠĠĠĠĠĠ Ġvar Ġgl Texture Max An isot ropy Ext Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Ġset ĊĠĠĠ Ġ} Ċ }