package Ġtest Ċ Ċ import Ġcom . github . z omb _ 6 7 6 . f antasy Soup . im GUI . I Im GUI Ċ import Ġcom . github . z omb _ 6 7 6 . f antasy Soup . render . graphic . Constants Ċ import Ġcom . github . z omb _ 6 7 6 . f antasy Soup . render . graphic . Op eng l Functions . add Gl Debug Message Callback Ċ import Ġcom . github . z omb _ 6 7 6 . f antasy Soup . render . graphic . Op eng l Functions . add Gl Key Callback Ċ import Ġcom . github . z omb _ 6 7 6 . f antasy Soup . render . graphic . Op eng l Functions . assert NoError Ċ import Ġcom . github . z omb _ 6 7 6 . f antasy Soup . render . graphic . Program Ċ import Ġcom . github . z omb _ 6 7 6 . f antasy Soup . render . graphic . Shader Ċ import Ġcom . github . z omb _ 6 7 6 . f antasy Soup . render . graphic . texture . File Texture Ċ import Ġcom . github . z omb _ 6 7 6 . f antasy Soup . render . graphic . texture . Texture Ċ import Ġcom . github . z omb _ 6 7 6 . f antasy Soup . render . graphic . vertex . VertexArray Object Ċ import Ġcom . github . z omb _ 6 7 6 . f antasy Soup . render . graphic . vertex . Vertex Attribute Ċ import Ġcom . github . z omb _ 6 7 6 . f antasy Soup . render . graphic . vertex . VertexBuffer Object Ċ import Ġimg ui . ImGui Ċ import Ġorg . lwjgl . glfw . GLFW Ċ import Ġorg . lwjgl . opengl . GL Ċ import Ġorg . lwjgl . opengl . GL 4 3 Ċ import Ġorg . lwjgl . opengl . GL 4 5 Ċ import Ġorg . lwjgl . system . Memory Stack Ċ import Ġorg . lwjgl . system . Memory Util Ċ import Ġjava . io . File Ċ import Ġjava . lang . management . Management Factory Ċ Ċ /** Ċ Ġ* Ġadd Ġj vm Ġoptions :- D org . lwjgl . library path = ./ src / test / resources / lib Ġ- D org . lwjgl . util . Debug = true Ċ Ġ*/ Ċ fun Ġmain () Ġ{ ĊĊ Ċ // ĠĠĠ ĠThread Ġ{ ĠJ ImGui Test . main () Ġ}. start () Ċ Ċ // ĠĠĠ ĠSystem . load Library (" render doc ") ĊĠĠĠ Ġif Ġ(! GLFW . glfw Init ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" failed Ġto Ġinit Ġglfw ") ĊĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġwidth Ġ= Ġ 8 0 0 ; ĊĠĠĠ Ġval Ġheight Ġ= Ġ 4 5 0 ; ĊĠĠĠ Ġval Ġwindow Ġ= ĠGLFW . glfw Create Window ( width , Ġheight , Ġ" Op eng l Test ", ĠMemory Util . NULL , ĠMemory Util . NULL ) ĊĠĠĠ ĠGLFW . glfw Make Context Current ( window ) ĊĠĠĠ ĠGL . create Capabilities () ĊĠĠĠ ĠGLFW . glfw Window Hint ( GLFW . GLFW _ OPEN GL _ PROFILE , ĠGLFW . GLFW _ OPEN GL _ CORE _ PROFILE ) ĊĠĠĠ ĠGLFW . glfw Window Hint ( GLFW . GLFW _ OPEN GL _ FORWARD _ COMPAT , ĠGL 4 3 . GL _ FALSE ) ĊĠĠĠ ĠGLFW . glfw Window Hint ( GLFW . GLFW _ OPEN GL _ COMPAT _ PROFILE , ĠGL 4 3 . GL _ FALSE ) ĊĠĠĠ Ġassert NoError () ĊĠĠĠ Ġprintln ( Management Factory . get Runtime MX Bean (). name . split ("@ ")[ 0 ]) ĊĠĠĠ ĠGL 4 3 . gl Enable ( GL 4 3 . GL _ DEBUG _ OUTPUT ) ĊĠĠĠ Ġassert NoError () ĊĠĠĠ Ġadd Gl Debug Message Callback ( 1 ) ĊĠĠĠ Ġassert NoError () ĊĠĠĠ ĠGLFW . glfw Window Hint ( GLFW . GLFW _ CONTEXT _ VERSION _ MAJOR , Ġ 4 ) ĊĠĠĠ ĠGLFW . glfw Window Hint ( GLFW . GLFW _ CONTEXT _ VERSION _ MINOR , Ġ 3 ) ĊĠĠĠ ĠGLFW . glfw Window Hint ( GLFW . GLFW _ OPEN GL _ FORWARD _ COMPAT , ĠGL 4 3 . GL _ FALSE ) ĊĠĠĠ ĠGLFW . glfw Window Hint ( GLFW . GLFW _ OPEN GL _ PROFILE , ĠGLFW . GLFW _ OPEN GL _ CORE _ PROFILE ) ĊĊĠĠĠ Ġprintln ( GLFW . glfw Get Version String ()) ĊĠĠĠ Ġassert NoError () ĊĠĠĠ Ġval Ġpos Ġ= Ġfloat ArrayOf ( ĊĠĠĠĠĠĠĠ Ġ- 0 . 5 f , Ġ- 0 . 5 f , Ġ- 0 . 5 f , Ġ 0 . 0 f , Ġ 0 . 0 f , ĊĠĠĠĠĠĠĠĠ 0 . 5 f , Ġ- 0 . 5 f , Ġ- 0 . 5 f , Ġ 1 . 0 f , Ġ 0 . 0 f , ĊĠĠĠĠĠĠĠĠ 0 . 5 f , Ġ 0 . 5 f , Ġ- 0 . 5 f , Ġ 1 . 0 f , Ġ 1 . 0 f , ĊĠĠĠĠĠĠĠĠ 0 . 5 f , Ġ 0 . 5 f , Ġ- 0 . 5 f , Ġ 1 . 0 f , Ġ 1 . 0 f , ĊĠĠĠĠĠĠĠ Ġ- 0 . 5 f , Ġ 0 . 5 f , Ġ- 0 . 5 f , Ġ 0 . 0 f , Ġ 1 . 0 f , ĊĠĠĠĠĠĠĠ Ġ- 0 . 5 f , Ġ- 0 . 5 f , Ġ- 0 . 5 f , Ġ 0 . 0 f , Ġ 0 . 0 f , ĊĊĠĠĠĠĠĠĠ Ġ- 0 . 5 f , Ġ- 0 . 5 f , Ġ 0 . 5 f , Ġ 0 . 0 f , Ġ 0 . 0 f , ĊĠĠĠĠĠĠĠĠ 0 . 5 f , Ġ- 0 . 5 f , Ġ 0 . 5 f , Ġ 1 . 0 f , Ġ 0 . 0 f , ĊĠĠĠĠĠĠĠĠ 0 . 5 f , Ġ 0 . 5 f , Ġ 0 . 5 f , Ġ 1 . 0 f , Ġ 1 . 0 f , ĊĠĠĠĠĠĠĠĠ 0 . 5 f , Ġ 0 . 5 f , Ġ 0 . 5 f , Ġ 1 . 0 f , Ġ 1 . 0 f , ĊĠĠĠĠĠĠĠ Ġ- 0 . 5 f , Ġ 0 . 5 f , Ġ 0 . 5 f , Ġ 0 . 0 f , Ġ 1 . 0 f , ĊĠĠĠĠĠĠĠ Ġ- 0 . 5 f , Ġ- 0 . 5 f , Ġ 0 . 5 f , Ġ 0 . 0 f , Ġ 0 . 0 f , ĊĊĠĠĠĠĠĠĠ Ġ- 0 . 5 f , Ġ 0 . 5 f , Ġ 0 . 5 f , Ġ 1 . 0 f , Ġ 0 . 0 f , ĊĠĠĠĠĠĠĠ Ġ- 0 . 5 f , Ġ 0 . 5 f , Ġ- 0 . 5 f , Ġ 1 . 0 f , Ġ 1 . 0 f , ĊĠĠĠĠĠĠĠ Ġ- 0 . 5 f , Ġ- 0 . 5 f , Ġ- 0 . 5 f , Ġ 0 . 0 f , Ġ 1 . 0 f , ĊĠĠĠĠĠĠĠ Ġ- 0 . 5 f , Ġ- 0 . 5 f , Ġ- 0 . 5 f , Ġ 0 . 0 f , Ġ 1 . 0 f , ĊĠĠĠĠĠĠĠ Ġ- 0 . 5 f , Ġ- 0 . 5 f , Ġ 0 . 5 f , Ġ 0 . 0 f , Ġ 0 . 0 f , ĊĠĠĠĠĠĠĠ Ġ- 0 . 5 f , Ġ 0 . 5 f , Ġ 0 . 5 f , Ġ 1 . 0 f , Ġ 0 . 0 f , ĊĊĠĠĠĠĠĠĠĠ 0 . 5 f , Ġ 0 . 5 f , Ġ 0 . 5 f , Ġ 1 . 0 f , Ġ 0 . 0 f , ĊĠĠĠĠĠĠĠĠ 0 . 5 f , Ġ 0 . 5 f , Ġ- 0 . 5 f , Ġ 1 . 0 f , Ġ 1 . 0 f , ĊĠĠĠĠĠĠĠĠ 0 . 5 f , Ġ- 0 . 5 f , Ġ- 0 . 5 f , Ġ 0 . 0 f , Ġ 1 . 0 f , ĊĠĠĠĠĠĠĠĠ 0 . 5 f , Ġ- 0 . 5 f , Ġ- 0 . 5 f , Ġ 0 . 0 f , Ġ 1 . 0 f , ĊĠĠĠĠĠĠĠĠ 0 . 5 f , Ġ- 0 . 5 f , Ġ 0 . 5 f , Ġ 0 . 0 f , Ġ 0 . 0 f , ĊĠĠĠĠĠĠĠĠ 0 . 5 f , Ġ 0 . 5 f , Ġ 0 . 5 f , Ġ 1 . 0 f , Ġ 0 . 0 f , ĊĊĠĠĠĠĠĠĠ Ġ- 0 . 5 f , Ġ- 0 . 5 f , Ġ- 0 . 5 f , Ġ 0 . 0 f , Ġ 1 . 0 f , ĊĠĠĠĠĠĠĠĠ 0 . 5 f , Ġ- 0 . 5 f , Ġ- 0 . 5 f , Ġ 1 . 0 f , Ġ 1 . 0 f , ĊĠĠĠĠĠĠĠĠ 0 . 5 f , Ġ- 0 . 5 f , Ġ 0 . 5 f , Ġ 1 . 0 f , Ġ 0 . 0 f , ĊĠĠĠĠĠĠĠĠ 0 . 5 f , Ġ- 0 . 5 f , Ġ 0 . 5 f , Ġ 1 . 0 f , Ġ 0 . 0 f , ĊĠĠĠĠĠĠĠ Ġ- 0 . 5 f , Ġ- 0 . 5 f , Ġ 0 . 5 f , Ġ 0 . 0 f , Ġ 0 . 0 f , ĊĠĠĠĠĠĠĠ Ġ- 0 . 5 f , Ġ- 0 . 5 f , Ġ- 0 . 5 f , Ġ 0 . 0 f , Ġ 1 . 0 f , ĊĊĠĠĠĠĠĠĠ Ġ- 0 . 5 f , Ġ 0 . 5 f , Ġ- 0 . 5 f , Ġ 0 . 0 f , Ġ 1 . 0 f , ĊĠĠĠĠĠĠĠĠ 0 . 5 f , Ġ 0 . 5 f , Ġ- 0 . 5 f , Ġ 1 . 0 f , Ġ 1 . 0 f , ĊĠĠĠĠĠĠĠĠ 0 . 5 f , Ġ 0 . 5 f , Ġ 0 . 5 f , Ġ 1 . 0 f , Ġ 0 . 0 f , ĊĠĠĠĠĠĠĠĠ 0 . 5 f , Ġ 0 . 5 f , Ġ 0 . 5 f , Ġ 1 . 0 f , Ġ 0 . 0 f , ĊĠĠĠĠĠĠĠ Ġ- 0 . 5 f , Ġ 0 . 5 f , Ġ 0 . 5 f , Ġ 0 . 0 f , Ġ 0 . 0 f , ĊĠĠĠĠĠĠĠ Ġ- 0 . 5 f , Ġ 0 . 5 f , Ġ- 0 . 5 f , Ġ 0 . 0 f , Ġ 1 . 0 f ĊĠĠĠ Ġ) Ċ // ĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . toDouble () Ġ}. toDouble Array () ĊĊĠĠĠ Ġval Ġpos 2 Ġ= Ġfloat ArrayOf ( ĊĠĠĠĠĠĠĠ Ġ- 1 . 0 f , Ġ- 1 . 0 f , Ġ 0 . 0 f , Ġ 0 f , Ġ 0 f , ĊĠĠĠĠĠĠĠĠ 1 . 0 f , Ġ- 1 . 0 f , Ġ 0 . 0 f , Ġ 1 . 0 f , Ġ 0 f , ĊĠĠĠĠĠĠĠĠ 1 . 0 f , Ġ 1 . 0 f , Ġ 0 . 0 f , Ġ 1 . 0 f , Ġ 1 . 0 f , ĊĊĠĠĠĠĠĠĠ Ġ- 1 . 0 f , Ġ- 1 . 0 f , Ġ 0 . 0 f , Ġ 0 f , Ġ 0 f , ĊĠĠĠĠĠĠĠĠ 1 . 0 f , Ġ 1 . 0 f , Ġ 0 . 0 f , Ġ 1 . 0 f , Ġ 1 . 0 f , ĊĠĠĠĠĠĠĠ Ġ- 1 . 0 f , Ġ 1 . 0 f , Ġ 0 . 0 f , Ġ 0 f , Ġ 1 . 0 f , ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġval Ġpos Test Ġ= Ġfloat ArrayOf ( ĊĠĠĠĠĠĠĠ Ġ- 1 . 0 f , Ġ- 1 . 0 f , Ġ 0 . 0 f , ĊĠĠĠĠĠĠĠĠ 1 . 0 f , Ġ- 1 . 0 f , Ġ 0 . 0 f , ĊĠĠĠĠĠĠĠĠ 1 . 0 f , Ġ 1 . 0 f , Ġ 0 . 0 f , ĊĊĠĠĠĠĠĠĠ Ġ- 1 . 0 f , Ġ- 1 . 0 f , Ġ 0 . 0 f , ĊĠĠĠĠĠĠĠĠ 1 . 0 f , Ġ 1 . 0 f , Ġ 0 . 0 f , ĊĠĠĠĠĠĠĠ Ġ- 1 . 0 f , Ġ 1 . 0 f , Ġ 0 . 0 f ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġval Ġpos Attribute Ġ= ĠVertex Attribute ( Constants . Vertex DataType . VEC 3 , Ġ" pos ") ĊĠĠĠ Ġval Ġtex Attribute Ġ= ĠVertex Attribute ( Constants . Vertex DataType . VEC 2 , Ġ" tex ") ĊĊĠĠĠ Ġval Ġv ao Blur Ġ= ĠVertex Array Object () ĊĠĠĠĠĠĠĠ Ġ. gen VertexArray Object () ĊĠĠĠĠĠĠĠ Ġ. bind VertexArray Object () ĊĊĠĠĠ Ġval Ġv bo Blur Ġ= ĠVertex Buffer Object ( Constants . Vertex Storage Type . STATIC _ DRAW ) ĊĠĠĠĠĠĠĠ Ġ. gen VertexBuffer Object () ĊĠĠĠĠĠĠĠ Ġ. bind VertexBuffer Object () ĊĠĠĠĠĠĠĠ Ġ. bind Date ( pos ) ĊĊĠĠĠ Ġv ao Blur . push Vertex Type ( pos Attribute ) ĊĠĠĠĠĠĠĠ Ġ. push Vertex Type ( tex Attribute ) ĊĠĠĠĠĠĠĠ Ġ. setup By Attribute Pointer () ĊĊĠĠĠ Ġval Ġv ao Full Ġ= ĠVertex Array Object () ĊĠĠĠĠĠĠĠ Ġ. gen VertexArray Object () ĊĠĠĠĠĠĠĠ Ġ. bind VertexArray Object () ĊĊĠĠĠ Ġval Ġv bo Full Ġ= ĠVertex Buffer Object ( Constants . Vertex Storage Type . STATIC _ DRAW ) ĊĠĠĠĠĠĠĠ Ġ. gen VertexBuffer Object () ĊĠĠĠĠĠĠĠ Ġ. bind VertexBuffer Object () ĊĠĠĠĠĠĠĠ Ġ. bind Date ( pos 2 ) ĊĊĠĠĠ Ġv ao Full . push Vertex Type ( pos Attribute ) ĊĠĠĠĠĠĠĠ Ġ. push Vertex Type ( tex Attribute ) ĊĠĠĠĠĠĠĠ Ġ. setup By Attribute Pointer () ĊĊĠĠĠ Ġval Ġv ao Test : ĠVertex Array Object Ġ= ĠVertex Array Object () ĊĠĠĠĠĠĠĠ Ġ. gen VertexArray Object () ĊĠĠĠĠĠĠĠ Ġ. bind VertexArray Object () ĊĠĠĠ Ġval Ġv bo Test : ĠVertex Buffer Object Ġ= ĠVertex Buffer Object ( Constants . Vertex Storage Type . STATIC _ DRAW ) ĊĠĠĠĠĠĠĠ Ġ. gen VertexBuffer Object () ĊĠĠĠĠĠĠĠ Ġ. bind VertexBuffer Object () ĊĠĠĠĠĠĠĠ Ġ. bind Date ( pos Test ) ĊĊĠĠĠ Ġv ao Test ĊĠĠĠĠĠĠĠ Ġ. push Vertex Type ( pos Attribute ) Ċ // ĠĠĠĠĠĠĠ Ġ. push Vertex Type ( Vertex Attribute ( Constants . Vertex DataType . VEC 3 ," pos ")) ĊĠĠĠĠĠĠĠ Ġ. setup By Attribute Pointer () ĊĊĠĠĠ Ġval Ġtexture : ĠTexture Ġ= Ġobject Ġ: ĠFile Texture (" src / test / resources / texture / mal ay p . png ") Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġset Tex Wr apping Type ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx Wr apping Type : ĠConstants . Texture Wr apping Type , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġy Wr apping Type : ĠConstants . Texture Wr apping Type ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . set Tex Wr apping Type ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . Texture Wr apping Type . CL AM _ TO _ EDGE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . Texture Wr apping Type . CL AM _ TO _ EDGE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ. gen Texture (). bind Texture () ĊĊĠĠĠ Ġval Ġprogram Draw Ġ= ĠProgram ( ĊĠĠĠĠĠĠĠ ĠShader ( Constants . Shader Type . VERTEX , ĠFile (" src / main / resources / assets / f antasy _ soup / shader / vertex / basic . v sh ")), ĊĠĠĠĠĠĠĠ ĠShader ( Constants . Shader Type . FRAGMENT , ĠFile (" src / main / resources / assets / f antasy _ soup / shader / fragment / basic . f sh ")), ĊĠĠĠĠĠĠĠ Ġ" draw " ĊĠĠĠ Ġ). link Program () ĊĠĠĠ Ġval Ġprogram Blur Ġ= ĠProgram ( ĊĠĠĠĠĠĠĠ ĠShader ( Constants . Shader Type . VERTEX , ĠFile (" src / main / resources / assets / f antasy _ soup / shader / vertex / tex _ pos . v sh ")), ĊĠĠĠĠĠĠĠ ĠShader ( Constants . Shader Type . FRAGMENT , ĠFile (" src / main / resources / assets / f antasy _ soup / shader / fragment / blur . f sh ")), ĊĠĠĠĠĠĠĠ Ġ" blur " ĊĠĠĠ Ġ). link Program () ĊĠĠĠ Ġval Ġprogram Test Ġ= ĠProgram ( ĊĠĠĠĠĠĠĠ ĠShader ( Constants . Shader Type . VERTEX , ĠFile (" src / main / resources / assets / f antasy _ soup / shader / vertex / rectangle . v sh ")), ĊĠĠĠĠĠĠĠ ĠShader ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . Shader Type . FRAGMENT , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFile (" src / main / resources / assets / f antasy _ soup / shader / fragment / rectangle . f sh ") ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġ" test " ĊĠĠĠ Ġ). link Program () ĊĊĠĠĠ Ġval Ġframe Buffer Ġ= ĠGL 4 3 . gl Gen Frame buffers () ĊĠĠĠ ĠGL 4 3 . glBind Framebuffer ( GL 4 3 . GL _ FRAMEBUFFER , Ġframe Buffer ) ĊĠĠĠ Ġval Ġframe Buffer Tex Ġ= ĠGL 4 3 . gl Gen Textures () ĊĠĠĠ ĠGL 4 3 . gl Active Texture ( GL 4 3 . GL _ TEXTURE 1 ) ĊĠĠĠ ĠGL 4 3 . glBind Texture ( GL 4 3 . GL _ TEXTURE _ 2 D , Ġframe Buffer Tex ) ĊĠĠĠ ĠGL 4 3 . gl TexImage 2 D ( ĊĠĠĠĠĠĠĠ ĠGL 4 3 . GL _ TEXTURE _ 2 D , Ġ 0 , ĠGL 4 3 . GL _ RGB , Ġwidth , Ġheight , ĊĠĠĠĠĠĠĠĠ 0 , ĠGL 4 3 . GL _ RGB , ĠGL 4 3 . GL _ UNSIGNED _ BYTE , ĠMemory Util . NULL ĊĠĠĠ Ġ) ĊĠĠĠ ĠGL 4 3 . gl TexParameter i ( GL 4 3 . GL _ TEXTURE _ 2 D , ĠGL 4 3 . GL _ TEXTURE _ MIN _ FILTER , ĠGL 4 3 . GL _ LINEAR ) ĊĠĠĠ ĠGL 4 3 . gl TexParameter i ( GL 4 3 . GL _ TEXTURE _ 2 D , ĠGL 4 3 . GL _ TEXTURE _ MAG _ FILTER , ĠGL 4 3 . GL _ LINEAR ) ĊĠĠĠ ĠGL 4 3 . gl Framebuffer Texture 2 D ( ĊĠĠĠĠĠĠĠ ĠGL 4 3 . GL _ FRAMEBUFFER , ĠGL 4 3 . GL _ COLOR _ ATTACHMENT 0 , ĊĠĠĠĠĠĠĠ ĠGL 4 3 . GL _ TEXTURE _ 2 D , Ġframe Buffer Tex , Ġ 0 ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġadd Gl Key Callback ( window ) Ġ{ Ġkey : ĠInt , Ġscan code : ĠInt , Ġaction : ĠInt , Ġmods : ĠInt Ġ-> ĊĠĠĠĠĠĠĠ Ġif Ġ( key Ġ== ĠGLFW . GLFW _ KEY _ R Ġ&& Ġaction Ġ== ĠGLFW . GLFW _ PRESS ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprogram Blur . reload Program () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" reload Ġsuccess ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ ĠI Im GUI . init From Other ( window ) Ċ // ĠĠĠ Ġvar Ġrad Ġ= Ġ 0 . 1 f ĊĠĠĠ Ġvar Ġrad Ġ= Ġ 2 f ĊĠĠĠ Ġvar Ġis Add Ġ= Ġ 1 ĊĠĠĠ ĠGL 4 3 . gl Viewport ( 0 , Ġ 0 , Ġwidth , Ġheight ) ĊĊĠĠĠ Ġval Ġdir Ġ= Ġfloat ArrayOf ( 1 f , 1 f ) ĊĠĠĠ Ġval Ġradius Ġ= Ġfloat ArrayOf ( 1 f ) ĊĊĠĠĠ Ġwhile Ġ(! GLFW . glfw Window Should Close ( window )) Ġ{ ĊĊĠĠĠĠĠĠĠ ĠGL 4 3 . gl Clear ( GL 4 5 . GL _ COLOR _ BUFFER _ BIT Ġor ĠGL 4 5 . GL _ DEPTH _ BUFFER _ BIT ) ĊĊĠĠĠĠĠĠĠ Ġv ao Full . bind VertexArray Object () ĊĠĠĠĠĠĠĠ ĠGL 4 3 . glBind Framebuffer ( GL 4 3 . GL _ FRAMEBUFFER , Ġframe Buffer ) ĊĠĠĠĠĠĠĠ Ġprogram Draw . use Program () ĊĠĠĠĠĠĠĠ ĠGL 4 3 . gl Uniform 1 i ( 1 , Ġ 0 ) ĊĠĠĠĠĠĠĠ ĠGL 4 3 . gl Draw Arrays ( GL 4 5 . GL _ TRI ANG LES , Ġ 0 , Ġ 6 ) Ċ Ċ // ĠĠĠĠĠĠĠ Ġif Ġ( rad <= 0 f ){ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġis Add Ġ= Ġ 1 Ċ // ĠĠĠĠĠĠĠ Ġ} else Ġif Ġ( rad Ġ>= Ġ 5 f ){ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġis Add Ġ= Ġ- 1 Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġrad Ġ+= Ġ( 0 . 1 Ġ* Ġis Add ). toFloat () Ċ Ċ // ĠĠĠĠĠĠĠ Ġv ao Blur . bind VertexArray Object () ĊĠĠĠĠĠĠĠ ĠGL 4 3 . glBind Framebuffer ( GL 4 3 . GL _ FRAMEBUFFER , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġprogram Blur . use Program () ĊĠĠĠĠĠĠĠ ĠGL 4 3 . gl Uniform 2 f ( 0 , Ġdir [ 0 ], Ġdir [ 1 ]) // blur Ġdir ĊĠĠĠĠĠĠĠ ĠGL 4 3 . gl Uniform 1 f ( 1 , Ġradius . first ()) // radius ĊĠĠĠĠĠĠĠ ĠGL 4 3 . gl Uniform 1 i ( 2 , Ġ 1 ) ĊĠĠĠĠĠĠĠ ĠGL 4 3 . gl Uniform 2 f ( 3 , Ġ 1 f Ġ/ Ġwidth , Ġ 1 f Ġ/ Ġheight ) ĊĠĠĠĠĠĠĠ ĠGL 4 3 . gl Draw Arrays ( GL 4 5 . GL _ TRI ANG LES , Ġ 0 , Ġ 6 ) Ċ Ċ // ĠĠĠĠĠĠĠ Ġv ao Test . bind VertexArray Object () Ċ // ĠĠĠĠĠĠĠ ĠGL 4 3 . glBind Framebuffer ( GL 4 3 . GL _ FRAMEBUFFER , 0 ) Ċ // ĠĠĠĠĠĠĠ Ġprogram Test . use Program () Ċ // ĠĠĠĠĠĠĠ ĠGL 4 3 . gl Draw Arrays ( GL 4 5 . GL _ TRI ANG LES , Ġ 0 , Ġ 6 ) ĊĊĠĠĠĠĠĠĠ ĠI Im GUI . wrap Run Im GUI Only Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwindow (" thon k "){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImGui . slider Float 2 (" dir ", dir , 0 f , 2 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImGui . slider Float (" radius ", radius , 0 f , 1 0 f ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage ( 0 , 1 0 0 f , 1 0 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠGLFW . glfw Swap Buffers ( window ) ĊĠĠĠĠĠĠĠ ĠGLFW . glfw Poll Events () ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ @ Suppress (" Convert Try Finally ToUse Call ") Ċ inline Ġfun Ġ< T , ĠC Ġ: ĠMemory Stack > ĠC . use ( block : ĠC . () Ġ-> ĠT ): ĠT Ġ{ ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġblock () ĊĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . close () ĊĠĠĠ Ġ} Ċ }