package Ġorg . open rnd r . extra . shapes . draw ers Ċ Ċ import Ġorg . open rnd r . color . Color RGB a Ċ import Ġorg . open rnd r . draw .* Ċ import Ġorg . open rnd r . extra . shapes . Bezier Patch Base Ċ import Ġorg . open rnd r . extra . shapes . Bezier Patch 3 D Base Ċ import Ġorg . open rnd r . internal . Driver Ċ import Ġorg . open rnd r . math . Vector 2 Ċ Ċ import Ġorg . open rnd r . draw . Shade Style GLSL . Companion . drawer Uniform s Ċ import Ġorg . open rnd r . draw . Shade Style GLSL . Companion . fragment Main Constants Ċ import Ġorg . open rnd r . draw . Shade Style GLSL . Companion . vertex Main Constants Ċ import Ġorg . open rnd r . extra . shader ph rases . preprocess Ċ import Ġorg . open rnd r . extra . shapes . ph rases . Bezier Phrase Book Ċ import Ġorg . open rnd r . extras . color . ph rases . Color Phrase Book Ċ import Ġorg . open rnd r . extras . color . spaces . Color OK LAB a Ċ import Ġorg . open rnd r . math . Vector 4 Ċ import Ġkotlin . jvm . Jvm Name Ċ Ċ private Ġval Ġglsl Version Ġ= Ġ" 4 1 0 Ġcore " Ċ Ċ class ĠBe zier Patch Drawer Ġ{ ĊĠĠĠ Ġprivate Ġfun Ġvs Generator ( structure : ĠSh ade Structure ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| // ĠBe zier Patch Drawer . kt Ġ/ Ġvs Generator ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| # version Ġ$ glsl Version ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ${ drawer Uniform s ()} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ${ structure . attributes . or Empty ()} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ${ structure . varying Out . or Empty ()} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| void Ġmain () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġ${ vertex Main Constants ()} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġvec 3 Ġx _ normal Ġ= Ġvec 3 ( 0 . 0 , Ġ 0 . 0 , Ġ 1 . 0 ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġvec 3 Ġx _ position Ġ= Ġa _ position ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġ${ structure . varying Bridge } ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| } """. trim Margin () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfs Generator ( structure : ĠSh ade Structure ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ( """ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| // ĠBe zier Patch Drawer . kt Ġ/ Ġfs Generator ĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| # version Ġ$ glsl Version ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ${ drawer Uniform s ()} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ${ structure . varying In . or Empty ()} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| out Ġvec 4 Ġo _ color ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| void Ġmain () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġvec 4 Ġx _ fill Ġ= Ġu _ fill Ġ* Ġva _ color ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġvec 4 Ġx _ stroke Ġ= Ġu _ stroke ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠ Ġ${ structure . fragment Transform . or Empty ()} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġo _ color Ġ= Ġx _ fill ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġo _ color . rgb Ġ*= Ġo _ color . a ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} """. trim Margin ()) ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġfun Ġfs Generator OK Lab ( structure : ĠSh ade Structure ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ( """ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| // ĠBe zier Patch Drawer . kt Ġ/ Ġfs Generator OK Lab ĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| # version Ġ$ glsl Version ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ${ drawer Uniform s ()} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ${ Color Phrase Book . ok lab To Linear Rgb . phrase } ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ${ Color Phrase Book . linear Rgb To SR gb . phrase } ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ${ structure . varying In . or Empty ()} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| out Ġvec 4 Ġo _ color ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| void Ġmain () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġ${ fragment Main Constants ( instance Ġ= Ġ" 0 ")} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġvec 4 Ġx _ fill Ġ= Ġu _ fill Ġ* Ġva _ color ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġvec 4 Ġx _ stroke Ġ= Ġu _ stroke ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠ Ġ${ structure . fragment Transform . or Empty ()} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġo _ color Ġ= Ġlinear _ rgb _ to _ s rgb ( ok lab _ to _ linear _ rgb ( x _ fill )); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġo _ color . rgb Ġ*= Ġo _ color . a ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| } """. trim Margin ()) ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġfun Ġt se Generator ( structure : ĠSh ade Structure ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ ĠBe zier Phrase Book . register () ĊĠĠĠĠĠĠĠ Ġreturn Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| # version Ġ$ glsl Version ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| # pragma Ġimport Ġbe zi ers . bezier _ patch 4 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| # pragma Ġimport Ġbe zi ers . bezier _ patch 4 3 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| # pragma Ġimport Ġbe zi ers . bezier _ patch 4 4 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ${ drawer Uniform s ()} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| layout ( qu ads , Ġequal _ spacing , Ġcc w ) Ġin ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| in Ġvec 3 Ġc va _ position [ gl _ Max Patch Vertices ]; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| in Ġvec 4 Ġc va _ color [ gl _ Max Patch Vertices ]; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| in Ġvec 2 Ġc va _ tex Coord 0 [ gl _ Max Patch Vertices ]; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ${ structure . varying Out . or Empty ()} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| void Ġmain () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġva _ position Ġ= Ġbe zier _ patch 4 3 ( cv a _ position , Ġgl _ Tess Coord . xy ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġva _ color Ġ= Ġbe zier _ patch 4 4 ( cv a _ color , Ġgl _ Tess Coord . xy ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġva _ tex Coord 0 Ġ= Ġbe zier _ patch 4 2 ( cv a _ tex Coord 0 , Ġgl _ Tess Coord . xy ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġgl _ Position Ġ= Ġu _ projection Matrix Ġ* Ġu _ view Matrix Ġ* Ġu _ model Matrix Ġ* Ġvec 4 ( va _ position , 1 . 0 ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} """. trim Margin (). preprocess () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġt sc Generator ( structure : ĠSh ade Structure ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| # version Ġ$ glsl Version ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| uniform Ġint Ġu _ sub div isions ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ${ drawer Uniform s ()} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| layout ( vertices Ġ= Ġ 1 6 ) Ġout ; Ġ// Ġ 1 6 Ġpoints Ġper Ġpatch ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| in Ġvec 3 Ġva _ position []; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| in Ġvec 4 Ġva _ color []; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| in Ġvec 2 Ġva _ tex Coord 0 []; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| out Ġvec 3 Ġc va _ position []; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| out Ġvec 4 Ġc va _ color []; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| out Ġvec 2 Ġc va _ tex Coord 0 []; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| void Ġmain () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġc va _ position [ gl _ Invocation ID ] Ġ= Ġva _ position [ gl _ Invocation ID ]; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġc va _ color [ gl _ Invocation ID ] Ġ= Ġva _ color [ gl _ Invocation ID ]; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġc va _ tex Coord 0 [ gl _ Invocation ID ] Ġ= Ġva _ tex Coord 0 [ gl _ Invocation ID ]; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġif Ġ( gl _ Invocation ID Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠ Ġgl _ Tess Level Outer [ 0 ] Ġ= Ġu _ sub div isions ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠ Ġgl _ Tess Level Outer [ 1 ] Ġ= Ġu _ sub div isions ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠ Ġgl _ Tess Level Outer [ 2 ] Ġ= Ġu _ sub div isions ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠ Ġgl _ Tess Level Outer [ 3 ] Ġ= Ġu _ sub div isions ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠ Ġgl _ Tess Level Inner [ 0 ] Ġ= Ġu _ sub div isions ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠ Ġgl _ Tess Level Inner [ 1 ] Ġ= Ġu _ sub div isions ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| } """. trim Margin () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġsh ade Style Manager Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠSh ade Style Manager . from Generators ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" bezier - patches ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvs Generator Ġ= Ġ:: vs Generator , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġt sc Generator Ġ= Ġ:: tsc Generator , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġt se Generator Ġ= Ġ:: t se Generator , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfs Generator Ġ= Ġ:: fs Generator ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġsh ade Style Manager OK Lab Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠSh ade Style Manager . from Generators ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" bezier - patches - ok lab ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvs Generator Ġ= Ġ:: vs Generator , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġt sc Generator Ġ= Ġ:: tsc Generator , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġt se Generator Ġ= Ġ:: t se Generator , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfs Generator Ġ= Ġ:: fs Generator OK Lab ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġvertices Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvertex Buffer ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvertex Format Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition ( 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor ( 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtexture Coordinate ( 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ 1 6 , Ġsession Ġ= ĠSession . root ) ĊĊĊĠĠĠ Ġinternal Ġfun Ġensure Vertex Count ( count : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( vertices . vertex Count Ġ< Ġcount ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvertices . destroy () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvertices Ġ= Ġvertex Buffer ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvertex Format Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition ( 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor ( 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtexture Coordinate ( 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġcount , Ġsession Ġ= ĠSession . root ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġdraw Bezier Pat ches ( ĊĠĠĠĠĠĠĠ Ġcontext : ĠDraw Context , ĊĠĠĠĠĠĠĠ Ġdraw Style : ĠDraw Style , ĊĠĠĠĠĠĠĠ Ġbe zier Pat ches : ĠList < Bezier Patch Base < Color RGB a >>, ĊĠĠĠĠĠĠĠ Ġsub div isions : ĠInt Ġ= Ġ 3 2 ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġensure Vertex Count ( bezier Pat ches . size Ġ* Ġ 1 6 ) ĊĠĠĠĠĠĠĠ Ġval Ġshader Ġ= Ġsh ade Style Manager . shader ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Style . shade Style , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( vertices . vertex Format ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġempty List () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġvertices . put Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( bezier Patch Ġin Ġbe zier Pat ches ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 0 Ġuntil Ġ 4 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġ 4 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite ( bezier Patch . points [ j ][ i ]. xy 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( bezier Patch . colors . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite ( Color RGB a . WHITE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite ( bezier Patch . colors [ j ][ i ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite ( Vector 2 ( i Ġ/ Ġ 3 . 0 , Ġj Ġ/ Ġ 3 . 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġshader . begin () ĊĠĠĠĠĠĠĠ Ġshader . uniform (" u _ sub div isions ", Ġsub div isions ) ĊĠĠĠĠĠĠĠ Ġcontext . apply To Shader ( shader ) ĊĠĠĠĠĠĠĠ Ġdraw Style . apply To Shader ( shader ) ĊĠĠĠĠĠĠĠ ĠDriver . instance . setState ( draw Style ) ĊĠĠĠĠĠĠĠ ĠDriver . instance . draw VertexBuffer ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshader , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( vertices ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDraw Primitive . PATCH ES , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 6 Ġ* Ġbe zier Pat ches . size , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 6 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġshader . end () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Name (" draw Bezier Pat ches OK Lab ") ĊĠĠĠ Ġfun Ġdraw Bezier Pat ches ( ĊĠĠĠĠĠĠĠ Ġcontext : ĠDraw Context , ĊĠĠĠĠĠĠĠ Ġdraw Style : ĠDraw Style , ĊĠĠĠĠĠĠĠ Ġbe zier Pat ches : ĠList < Bezier Patch Base < Color OK LAB a >>, ĊĠĠĠĠĠĠĠ Ġsub div isions : ĠInt Ġ= Ġ 3 2 ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġensure Vertex Count ( bezier Pat ches . size Ġ* Ġ 1 6 ) ĊĠĠĠĠĠĠĠ Ġval Ġshader Ġ= Ġsh ade Style Manager OK Lab . shader ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Style . shade Style , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( vertices . vertex Format ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġempty List () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġvertices . put Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor ( bezier Patch Ġin Ġbe zier Pat ches ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 0 Ġuntil Ġ 4 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġ 4 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite ( bezier Patch . points [ j ][ i ]. xy 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( bezier Patch . colors . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite ( Color RGB a . WHITE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite ( bezier Patch . colors [ j ][ i ]. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVector 4 ( it . l , Ġit . a , Ġit . b , Ġit . alpha ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite ( Vector 2 ( i Ġ/ Ġ 3 . 0 , Ġj Ġ/ Ġ 3 . 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġshader . begin () ĊĠĠĠĠĠĠĠ Ġshader . uniform (" u _ sub div isions ", Ġsub div isions ) ĊĠĠĠĠĠĠĠ Ġcontext . apply To Shader ( shader ) ĊĠĠĠĠĠĠĠ Ġdraw Style . apply To Shader ( shader ) ĊĠĠĠĠĠĠĠ ĠDriver . instance . setState ( draw Style ) ĊĠĠĠĠĠĠĠ ĠDriver . instance . draw VertexBuffer ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshader , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( vertices ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDraw Primitive . PATCH ES , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 6 Ġ* Ġbe zier Pat ches . size , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 6 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġshader . end () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Name (" draw Bezier Pat ches 3 D ") ĊĠĠĠ Ġfun Ġdraw Bezier Pat ches ( ĊĠĠĠĠĠĠĠ Ġcontext : ĠDraw Context , ĊĠĠĠĠĠĠĠ Ġdraw Style : ĠDraw Style , ĊĠĠĠĠĠĠĠ Ġbe zier Pat ches : ĠList < Bezier Patch 3 D Base < Color RGB a >>, ĊĠĠĠĠĠĠĠ Ġsub div isions : ĠInt Ġ= Ġ 3 2 ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġensure Vertex Count ( bezier Pat ches . size Ġ* Ġ 1 6 ) ĊĠĠĠĠĠĠĠ Ġval Ġshader Ġ= Ġsh ade Style Manager . shader ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Style . shade Style , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( vertices . vertex Format ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġempty List () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġvertices . put Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( bezier Patch Ġin Ġbe zier Pat ches ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 0 Ġuntil Ġ 4 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġ 4 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite ( bezier Patch . points [ j ][ i ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( bezier Patch . colors . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite ( Color RGB a . WHITE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite ( bezier Patch . colors [ j ][ i ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite ( Vector 2 ( i Ġ/ Ġ 3 . 0 , Ġj Ġ/ Ġ 3 . 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġshader . begin () ĊĠĠĠĠĠĠĠ Ġshader . uniform (" u _ sub div isions ", Ġsub div isions ) ĊĠĠĠĠĠĠĠ Ġcontext . apply To Shader ( shader ) ĊĠĠĠĠĠĠĠ Ġdraw Style . apply To Shader ( shader ) ĊĠĠĠĠĠĠĠ ĠDriver . instance . setState ( draw Style ) ĊĠĠĠĠĠĠĠ ĠDriver . instance . draw VertexBuffer ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshader , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( vertices ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDraw Primitive . PATCH ES , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 6 Ġ* Ġbe zier Pat ches . size , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 6 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġshader . end () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Name (" draw Bezier Pat ches 3 DO K Lab ") ĊĠĠĠ Ġfun Ġdraw Bezier Pat ches ( ĊĠĠĠĠĠĠĠ Ġcontext : ĠDraw Context , ĊĠĠĠĠĠĠĠ Ġdraw Style : ĠDraw Style , ĊĠĠĠĠĠĠĠ Ġbe zier Pat ches : ĠList < Bezier Patch 3 D Base < Color OK LAB a >>, ĊĠĠĠĠĠĠĠ Ġsub div isions : ĠInt Ġ= Ġ 3 2 ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġensure Vertex Count ( bezier Pat ches . size Ġ* Ġ 1 6 ) ĊĠĠĠĠĠĠĠ Ġval Ġshader Ġ= Ġsh ade Style Manager OK Lab . shader ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Style . shade Style , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( vertices . vertex Format ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġempty List () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġvertices . put Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor ( bezier Patch Ġin Ġbe zier Pat ches ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 0 Ġuntil Ġ 4 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġ 4 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite ( bezier Patch . points [ j ][ i ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( bezier Patch . colors . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite ( Color RGB a . WHITE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite ( bezier Patch . colors [ j ][ i ]. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVector 4 ( it . l , Ġit . a , Ġit . b , Ġit . alpha ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite ( Vector 2 ( i Ġ/ Ġ 3 . 0 , Ġj Ġ/ Ġ 3 . 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġshader . begin () ĊĠĠĠĠĠĠĠ Ġshader . uniform (" u _ sub div isions ", Ġsub div isions ) ĊĠĠĠĠĠĠĠ Ġcontext . apply To Shader ( shader ) ĊĠĠĠĠĠĠĠ Ġdraw Style . apply To Shader ( shader ) ĊĠĠĠĠĠĠĠ ĠDriver . instance . setState ( draw Style ) ĊĠĠĠĠĠĠĠ ĠDriver . instance . draw VertexBuffer ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshader , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( vertices ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDraw Primitive . PATCH ES , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 6 Ġ* Ġbe zier Pat ches . size , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 6 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġshader . end () ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġval ĠDraw er . bezier Patch Drawer : ĠBe zier Patch Drawer Ġby Ġlazy Ġ{ ĠBe zier Patch Drawer () Ġ} Ċ Ċ @ Jvm Name (" bezier Patch RGB a ") Ċ fun ĠDraw er . bezier Patch ( bezier Patch : ĠBe zier Patch Base < Color RGB a >, Ġsub div isions : ĠInt Ġ= Ġ 3 2 ) Ġ{ ĊĠĠĠ Ġbe zier Patch Drawer . draw Bezier Pat ches ( context , Ġdraw Style , ĠlistOf ( bezier Patch ), Ġsub div isions ) Ċ } Ċ Ċ @ Jvm Name (" bezier Pat ches RGB a ") Ċ fun ĠDraw er . bezier Pat ches ( bezier Patch : ĠList < Bezier Patch Base < Color RGB a >>, Ġsub div isions : ĠInt Ġ= Ġ 3 2 ) Ġ{ ĊĠĠĠ Ġbe zier Patch Drawer . draw Bezier Pat ches ( context , Ġdraw Style , Ġbe zier Patch , Ġsub div isions ) Ċ } Ċ Ċ @ Jvm Name (" bezier Patch OK LAB ") Ċ fun ĠDraw er . bezier Patch ( bezier Patch : ĠBe zier Patch Base < Color OK LAB a >, Ġsub div isions : ĠInt Ġ= Ġ 3 2 ) Ġ{ ĊĠĠĠ Ġbe zier Patch Drawer . draw Bezier Pat ches ( context , Ġdraw Style , ĠlistOf ( bezier Patch ), Ġsub div isions ) Ċ } Ċ Ċ @ Jvm Name (" bezier Pat ches OK LAB ") Ċ fun ĠDraw er . bezier Pat ches ( bezier Patch : ĠList < Bezier Patch Base < Color OK LAB a >>, Ġsub div isions : ĠInt Ġ= Ġ 3 2 ) Ġ{ ĊĠĠĠ Ġbe zier Patch Drawer . draw Bezier Pat ches ( context , Ġdraw Style , Ġbe zier Patch , Ġsub div isions ) Ċ } Ċ Ċ @ Jvm Name (" bezier Patch 3 DR GB a ") Ċ fun ĠDraw er . bezier Patch ( bezier Patch : ĠBe zier Patch 3 D Base < Color RGB a >, Ġsub div isions : ĠInt Ġ= Ġ 3 2 ) Ġ{ ĊĠĠĠ Ġbe zier Patch Drawer . draw Bezier Pat ches ( context , Ġdraw Style , ĠlistOf ( bezier Patch ), Ġsub div isions ) Ċ } Ċ Ċ @ Jvm Name (" bezier Pat ches 3 DR GB a ") Ċ fun ĠDraw er . bezier Pat ches ( bezier Patch : ĠList < Bezier Patch 3 D Base < Color RGB a >>, Ġsub div isions : ĠInt Ġ= Ġ 3 2 ) Ġ{ ĊĠĠĠ Ġbe zier Patch Drawer . draw Bezier Pat ches ( context , Ġdraw Style , Ġbe zier Patch , Ġsub div isions ) Ċ } Ċ Ċ @ Jvm Name (" bezier Patch 3 DO K LAB ") Ċ fun ĠDraw er . bezier Patch ( bezier Patch : ĠBe zier Patch 3 D Base < Color OK LAB a >, Ġsub div isions : ĠInt Ġ= Ġ 3 2 ) Ġ{ ĊĠĠĠ Ġbe zier Patch Drawer . draw Bezier Pat ches ( context , Ġdraw Style , ĠlistOf ( bezier Patch ), Ġsub div isions ) Ċ } Ċ Ċ @ Jvm Name (" bezier Pat ches 3 DO K LAB ") Ċ fun ĠDraw er . bezier Pat ches ( bezier Patch : ĠList < Bezier Patch 3 D Base < Color OK LAB a >>, Ġsub div isions : ĠInt Ġ= Ġ 3 2 ) Ġ{ ĊĠĠĠ Ġbe zier Patch Drawer . draw Bezier Pat ches ( context , Ġdraw Style , Ġbe zier Patch , Ġsub div isions ) Ċ } Ċ