úÎehOcÉ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstu v w x y z { | } ~  € ‚ ƒ „ … † ‡ ˆ ‰ Š ‹ Œ Ž ‘ ’ “ ” • – — ˜ ™ š › œ ž Ÿ   ¡ ¢ £ ¤ ¥ ¦ § ¨ © ª « ¬ ­ ® ¯ ° ± ² ³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈ'(C) 2015 Dimitri SabadieBSD3+Dimitri Sabadie <dimitri.sabadie@gmail.com> experimentalportableNone!"'(*-/3457>CFIKLNVÉOpenGL error type.ÊGiven a context Ë¡ and an action, that function clears the OpenGL errors in order to run the action in a sane and error-free OpenGL context. If an error has occured, print it on stderr along with the Ë; context. Otherwise, simply it returns the action s result.[Keep in mind that you can mute that function s implementation by disabling the cabal flag  'debug-gl', which is the default setting. ÉÌÍÎÏÐÑÒÓÔÕÊ ÉÌÍÎÏÐÑÒÓÔÕÊÉÌÍÎÏÐÑÒÓÔÕÊ(C) 2015 Dimitri SabadieBSD3+Dimitri Sabadie <dimitri.sabadie@gmail.com> experimentalportableNone!"'(*-/3457>CFIKLNV A sampling configuration type. Class of all textures. 0Size of a texture. This is an associated type   type family?  because the dimensionality of a texture relies on its type. }In order to index regions of texels in texture, we need another associated type  for the same dimensionality reason as for  . kFor textures that might require depth comparison, that type defines all the possible cases for comparison.Sampling filter. C will sample the nearest texel at the sampling coordinates whilst : will perform linear interpolation with the texels nearby.Wrap texture parameter. Such an object is used to tell how to sampling is performed when going out of the texture coordinates.D will clamp the texture coordinates between in '[0,1]'. If you pass '1.1' or '31.456'#, in both cases you ll end up with '1',. Same thing for negative values clamped to '0'.4 will clamp the texture in '[0,1]' after applying a fract6 on the value, yielding a a repeated '[0,1]' pattern. ClampToBorder*'createTexture w h levels sampling' a new 'w'*'h' texture with levels- levels. The format is set through the type.Default  for convenience. ÿ defaultSampling = Sampling { samplingWrapS = ClampToEdge , samplingWrapT = ClampToEdge , samplingWrapR = ClampToEdge , samplingMinFilter = Linear , samplingMagFilter = Linear , samplingCompareFunction = Nothing }  tex offset size autolvl texelsp uploads data to a subpart of the texture s storage. The offset is given with origin at upper-left corner, and size( is the size of the area to upload to. autolvl is a Ö4 that can be used to automatically generate mipmaps.;Fill a subpart of the texture s storage with a given value.3רÙÚÛÜÝ Þßàáâãä åæçèéêë3רÙÚÛÜÝ Þßàáâãä åæçèéêëרÙÚÛÜÝ Þßàáâãä  åæçèéêë(C) 2015 Dimitri SabadieBSD3+Dimitri Sabadie <dimitri.sabadie@gmail.com> experimentalportableNone!"'(*-/3457>CFIKLNV Types that can handle !.!Error type of shaders.J'CompilationFailed reason' occurs when a shader fails to compile, and the Ë reason( contains a description of the failure.# A shader #.%0Create a new tessellation control shader from a Ë# representation of its source code.&3Create a new tessellation evaluation shader from a Ë# representation of its source code.'"Create a new vertex shader from a Ë# representation of its source code.($Create a new geometry shader from a Ë# representation of its source code.)$Create a new fragment shader from a Ë# representation of its source code.*#Create a new compute shader from a Ë# representation of its source code. !"#ì$%&'()*íîïðñ !"#ì$%&'()*íîïðñ !"#ì$%&'()*íîïðñ(C) 2015 Dimitri SabadieBSD3+Dimitri Sabadie <dimitri.sabadie@gmail.com> experimentalportableNone!"'(*-/3457>CFIKLNV  !"#$%&'()* #$$%&'()*!" (C) 2015 Dimitri SabadieBSD3+Dimitri Sabadie <dimitri.sabadie@gmail.com> experimentalportableNone!"'(*-/3457>CFIKLNV+Read-write type.,Write-only type.-Read-only type..0Writable typeclass, for types that admit writes.//Readable typeclass, for types that admit reads. +ò,ó-ô./õö÷ø+ò,ó-ô./ +ò,ó-ô./õö÷ø(C) 2015 Dimitri SabadieBSD3+Dimitri Sabadie <dimitri.sabadie@gmail.com> experimentalportableNone!"'(*-/3457>CFIKLNV0Get the OpenGL vendor Ë.1Get the OpenGL renderer Ë.2Get the OpenGL version Ë.3Get the GLSL version Ë.40Retrieve all the supported OpenGL extensions as Ës.ù01234ù01234ù01234(C) 2015 Dimitri SabadieBSD3+Dimitri Sabadie <dimitri.sabadie@gmail.com> experimentalportableNone!"'(*-/3457>CFIKLNV =A pixel format.?A depth channel.A$Red, green, blue and alpha channels.CRed, green and blue channels.ERd and green channels.GA red channel only.IChannels are floating values.K&Channels are unsigned integral values.MChannels are integral values.PA 32-bit channel.RA 16-bit channel.TA 8-bit channel.856úûüý789:;<=>?@ABCDEFGHIJKLMNOþPQRSTUVÿ     (56úûüý789:;<=>?@ABCDEFGHIJKLMNOþPQRSTUVÿ&56úûüý789:;<=>?@ABCDEFGHIJKLMNOþPQRSTUVÿ     (C) 2015 Dimitri SabadieBSD3+Dimitri Sabadie <dimitri.sabadie@gmail.com> experimentalportableNone!"'(*-/3457>CFIKLNVW A cubemap.Z Face of a W.WXYZ[\]^_` WXYZ[\]^_`WXYZ[\]^_`(C) 2015 Dimitri SabadieBSD3+Dimitri Sabadie <dimitri.sabadie@gmail.com> experimentalportableNone!"'(*-/3457>CFIKLNVa A 1D texture.ababab(C) 2015 Dimitri SabadieBSD3+Dimitri Sabadie <dimitri.sabadie@gmail.com> experimentalportableNone!"'(*-/3457>CFIKLNVc A 2D texture.cdecdecde(C) 2015 Dimitri SabadieBSD3+Dimitri Sabadie <dimitri.sabadie@gmail.com> experimentalportableNone!"'(*-/3457>CFIKLNVf A 3D texture.fghifghifghi(C) 2015 Dimitri SabadieBSD3+Dimitri Sabadie <dimitri.sabadie@gmail.com> experimentalportableNone!"'(*-/3457>CFIKLNVjA shader uniform. j aw doesn t hold any value. It s more like a mapping between the host code and the shader the uniform was retrieved from.j? is contravariant in its argument. That means that you can use Æ to build more interesting uniform types. It s also a divisible contravariant functor, then you can divide structures to take advantage of divisible contravariant properties and then glue several jX with different types. That can be useful to build a uniform type by gluing its fields.*Another interesting part is the fact that jÓ is also monoidal. You can accumulate several of them with '(<>)' if they have the same type. That means that you can join them so that when you pass an actual value, it gets shared inside the resulting value.OThe '()' instance doesn t do anything and doesn t even use its argument ('()').k¤Class of types that can be sent down to shaders. That class is closed because shaders cannot handle a lot of uniform types. However, you should have a look at the jq documentation for further information about how to augment the scope of the types you can send down to shaders.*jk !"#$%&'()*+,-./0123456789:;<=>?@ABCDEjk !"#'jk !"#$%&'()*+,-./0123456789:;<=>?@ABCDE(C) 2015 Dimitri SabadieBSD3+Dimitri Sabadie <dimitri.sabadie@gmail.com> experimentalportableNone!"'(*-/3457>CFIKLNVjkkj(C) 2015 Dimitri SabadieBSD3+Dimitri Sabadie <dimitri.sabadie@gmail.com> experimentalportableNone!"'(*-/3457>CFIKLNV lTypes that can handle n  read as, have .nShader program error.:'LinkFailed reason' happens when a program fails to link. reason contains the error message.'InactiveUniform uni' happens at linking when a uniform is inactive in the program; that is, unused or semantically set to a negative value.qShader program.sCreate a new shader q.That function takes a list of #9s and a uniform interface builder function and yields a q and the interface.kThe builder function takes a function you can use to retrieve uniforms. You can pass 'Left name' to map a Ë= to a uniform or you can pass 'Right sem' to map a semantic F9 to a uniform. If the uniform can t be retrieved, throws p.In the end, you get the new q’ and a polymorphic value you can choose the type of in the function you pass as argument. You can use that value to gather uniforms for instance.tA simpler version of sV. That function assumes you don t need a uniform interface and then just returns the q.GIs a shader program linked?H!Shader program link log s length.IShader program link log.J Either map a Ë or F to a uniform.lmnopqKrstGHIJlmnopqKrstGHIJ lmnopqKrstGHIJ(C) 2015 Dimitri SabadieBSD3+Dimitri Sabadie <dimitri.sabadie@gmail.com> experimentalportableNone!"'(*-/3457>CFIKLNV lmnopqrst qrrstnoplm(C) 2015 Dimitri SabadieBSD3+Dimitri Sabadie <dimitri.sabadie@gmail.com> experimentalportableNone!"'(*-/3457>CFIKLNVLMNOLMNOLMNO(C) 2015 Dimitri SabadieBSD3+Dimitri Sabadie <dimitri.sabadie@gmail.com> experimentalportableNone!"'(*-/3457>CFIKLNVuConvenient type to build vs.PaSize of a region, in elements. You don t have to worry about bytes consideration. If you want a Region rw Float with 10 elements in it, use  RegionSize 10. That s as simple as that.vA v? is a GPU typed memory area. It can be pictured as a GPU array.wx s vQs can have reads and writes. That typeclass makes implements all possible cases.xA xÖ is an opaque and untyped region of abstract GPU memory. You cannot do much with it and you might even not see the type in the user interface as it s not really needed. It s shown for informational purposes only.Q Create a new x using regions through the u monadic type. The x& is returned as well as the computed a value in the u."Typically, the user will wrap the v in the a type.z Create a new x and expose vs. Through the ul type, you can yield new regions and embed them in the type of your choice. The function returns that type.| Create a new v, by providing the number of wished elements.} Read a whole v.~Write the whole v€. If value are missing, only the provided values will replace the existing ones. If there are more values than the size of the v, they are ignored.Fill a v with a value.€7Index getter. Bounds checking is performed and returns R if out of bounds.'Index getter. Unsafe version of '(@?)'.‚PIndex setter. Bounds checking is performed and nothing is done if out of bounds.ƒ Index setter. Unsafe version of ƒ.uSTPUvVWXwYxZy[\Qz{]|}~€‚ƒ^_`uSTPUvVWXwYxZy[\Qz{]|}~€‚ƒuSTPUvVWXwYxZy[\Qz{]|}~€‚ƒ^_`(C) 2015 Dimitri SabadieBSD3+Dimitri Sabadie <dimitri.sabadie@gmail.com> experimentalportableNone!"'(*-/3457>CFIKLNV „Blending factors.…1 * color = factor† 0 * color = 0‡ src * colorˆ(1 - src) * color‰ dst * colorŠ(1 - dst) * color‹ srcA * colorŒ(1 - src) * color dstA * colorŽ(1 - dstA) * colorAll different blending modes.‘, represents the following blending equation: !blended = src * srcK + dst * dstK’, represents the following blending equation: !blended = src * srcK - dst * dstK(Because subtracting is not commutating, “8 represents the following additional blending equation: !blended = dst * dstK - src * srcK”, represents the following blending equation:  blended = a src dst•, represents the following blending equation:  blended = b src dst„…†‡ˆ‰Š‹ŒŽ‘’“”•cde„…†‡ˆ‰Š‹ŒŽ‘’“”•cde„ …†‡ˆ‰Š‹ŒŽ‘’“”•cde (C) 2015 Dimitri SabadieBSD3+Dimitri Sabadie <dimitri.sabadie@gmail.com> experimentalportableNone!"'(*-/3457>CFIKLNV–A GPU^ render command. That type exists to implement a stateless way to issue draw commands to the GPU5. You can set several hints for a given draw command:blending+: the blending mode is represented by f (,„,„). If you pass R, blendingT is disabled for that draw command. If you want to enable it, you have to pass g (mode,srcK,dstK), where mode is the  and srcK and dstK are both „1 representing the source and destination factors. depth test+: the depth test can be enabled by passing h and disabled with i.a 4per draw command uniform interface and uniform value“: that is the way you can customize the draw calls. You just have to pass the uniform interface and the value to send down to the shader. Finally, a –\ holds a value. That value will be consumed later by other functions. In general, it ll be Geometry.——( blending depthTest uniformInterface u a constructs a new –.˜ A standard – builder.no blending depth test enabled™ A standard –# builder with no uniform interface.no blending depth test enabled–j—˜™k–j—˜™–j—˜™k(C) 2015 Dimitri SabadieBSD3+Dimitri Sabadie <dimitri.sabadie@gmail.com> experimentalportableNone!"'(*-/3457>CFIKLNV1 WXYZ[\]^_`abcdefghi9  abbcdedefghighiWXYZ[\]^_`XY!(C) 2015 Dimitri SabadieBSD3+Dimitri Sabadie <dimitri.sabadie@gmail.com> experimentalportableNone!"'(*-/3457>CFIKLNV !"#$%&'()*jklmnopqrst(C) 2015 Dimitri SabadieBSD3+Dimitri Sabadie <dimitri.sabadie@gmail.com> experimentalportableNone!"'(*-/3457>CFIKLNV+,-.//-.,+ (C) 2015 Dimitri SabadieBSD3+Dimitri Sabadie <dimitri.sabadie@gmail.com> experimentalportableNone!"'(*-/3457>CFIKLNV–—˜™–—˜™(C) 2015 Dimitri SabadieBSD3+Dimitri Sabadie <dimitri.sabadie@gmail.com> experimentalportableNone!"'(*-/3457>CFIKLNV0123401234(C) 2015 Dimitri SabadieBSD3+Dimitri Sabadie <dimitri.sabadie@gmail.com> experimentalportableNone!"'(*-/3457>CFIKLNV"56789:;<=>?@ABCDEFGHIJKLMNOPQRSTUV"VTURSPQOMNKLIJGHEFCDAB?@=>6<;:9875 (C) 2015 Dimitri SabadieBSD3+Dimitri Sabadie <dimitri.sabadie@gmail.com> experimentalportableNone!"'(*-/3457>CFIKLNVš#A tuple of types, right-associated.The l0 instance is used for foreign packing on 32-bit.š›œš›š›œš›œš›"(C) 2015 Dimitri SabadieBSD3+Dimitri Sabadie <dimitri.sabadie@gmail.com> experimentalportableNone!"'(*-/3457>CFIKLNV ¡$Mask for framebuffer blit operation.¥Framebuffer output.§Given a =, inject it into a c to handle it.¨Framebuffer representation of -, , and +.©FTypeclass used to implement read/write operation per color attachment.ª4Typeclass of possible framebuffer depth attachments.«4Typeclass of possible framebuffer color attachments.¬A ® with the color8 buffer muted. Can be used to implement fast pre-passes.­A ® with the depth buffer muted.®A ® represents two buffers: a color buffer and depthX buffer. You can select which one you want and specify the formats to use by providing 60 types. If you want to mute a buffer, use '()'.±± w h mipmaps creates a new ® with dimension w * h and allocating spaces for mipmapsJ level of textures. The textures are created by providing a correct type.(For the color part, you can pass either:9'()': that will mute the color buffer of the framebuffer;= t cA: that will create a single texture with the wished color format;or a š b(: that will create a chain of textures; a and b cannot be '()'.(For the depth part, you can pass either:9'()': that will mute the depth buffer of the framebuffer;= t cA: that will create a single texture with the wished depth format. Finally, the rw parameter can be set to -, , or +: to specify which kind of framebuffer access you ll need.² The default ®; represents the screen (back buffer with double buffering).0žŸ ¡¢£¤¥¦§¨m©nªo«pqrs¬­®t¯°±uvwxyz{|²}~€‚ƒ„…†&žŸ ¡¢£¤¥¦§¨m©nªo«pqrs¬­®t¯°±uvwxyz{|²!žŸ ¡¢£¤¥¦§¨m©nªo«pqrs¬­®t¯°±uvwxyz{|²}~€‚ƒ„…† (C) 2015 Dimitri SabadieBSD3+Dimitri Sabadie <dimitri.sabadie@gmail.com> experimentalportableNone!"'(*-/3457>CFIKLNVžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²®¯°­¬¯°±«ª©¨§¥¦¡¢£¤²Ÿ ž#(C) 2015 Dimitri SabadieBSD3+Dimitri Sabadie <dimitri.sabadie@gmail.com> experimentalportableNone!"'(*-/3457>CFIKLNV³A vertex has to implement ³Ê in order to be used as-is. That typeclass is closed, so you you cannot add anymore instances. However, you shouldn t need to since you can use the already provided types to build up your vertex type.´]A vertex might have several attributes. The types of those attributes have to implement the ´4 typeclass in order to be used as vertex attributes.µ Create a new  2.¶ Create a new  3.· Create a new  3. ³‡´ˆµ¶·‰Š‹ŒŽ‘’“”•–—˜™³‡´ˆµ¶·‰ ³‡´ˆµ¶·‰Š‹ŒŽ(C) 2015 Dimitri SabadieBSD3+Dimitri Sabadie <dimitri.sabadie@gmail.com> experimentalportableNone!"'(*-/3457>CFIKLNV³´µ¶·µ¶·´³$(C) 2015 Dimitri SabadieBSD3+Dimitri Sabadie <dimitri.sabadie@gmail.com> experimentalportableNone!"'(*-/3457>CFIKLNV¸The ¸H is used to specify how vertices should be connected between each other.A ¹L mode won t connect vertices at all and will leave them as a vertices cloud.A º€ mode will connect vertices two-by-two. You then have to provide pairs of indices to correctly connect vertices and form lines.A »‹ mode will connect vertices three-by-three. You then have to provide triplets of indices to correctly connect vertices and form triangles.¼A ¼p represents a GPU version of a mesh; that is, vertices attached with indices and a geometry mode. You can have ¼ in two flavours:direct geometry{: doesn t require any indices as all vertices are unique and in the right order to connect vertices between each other ;indexed geometryS: requires indices to know how to connect and share vertices between each other.½*This function is the single one to create ¼ . It takes a š' type of vertices used to provide the ¼ with vertices and might take a š of indices (›). If you don t pass indices (R), you end up with a direct geometry. Otherwise, you get an indexed geometry. You also have to provide a ¸E to state how you want the vertices to be connected with each other.¸¹º»¼œžŸ ¡¢£½¸¹º»¼œžŸ ¡¢£½¸¹º»¼œžŸ ¡¢£½(C) 2015 Dimitri SabadieBSD3+Dimitri Sabadie <dimitri.sabadie@gmail.com> experimentalportableNone!"'(*-/3457>CFIKLNV¸¹º»¼½¼¸¹º»½%(C) 2015 Dimitri SabadieBSD3+Dimitri Sabadie <dimitri.sabadie@gmail.com> experimentalportableNone!"'(*-/3457>CFIKLNV¾ Abstract ¿ over uniform interface.¿Shader q batch. Such a batch is used to share a q between several –. It also gathers a uniform j u and a u value to send to the uniform.The uð type can be used to send uniforms for the whole batch. It can be useful for cold values  that won t change very often for a given frame  like the resolution of the screen, the mouse cursor coordinates, the time, and so on and so forth.The v+ type variable is used to add uniforms per-–.À® batch.A À is used to expose a ®6 and share it between several shader program batches.¤Run a À.ÁShare a ®( between several shader program batches. Abstract ¿.à Create a new ¿.Ä Create a new ¿ with no uniform interface.¾¥¿¦§¨©ªÀ«¬­¤Á®Ãį¾¥¿¦§¨©ªÀ«¬­¤Á®Ãį ¾¥¿¦§¨©ªÀ«¬­¤Á®Ãį&(C) 2015 Dimitri SabadieBSD3+Dimitri Sabadie <dimitri.sabadie@gmail.com> experimentalportableNone!"'(*-/3457>CFIKLNVÅ3Command type. Used to accumulate GPU commands. Use Æ) to execute the whole chain of commands.Ç=Draw a framebuffer batch and return the framebuffer s output.ÈjBlit a framebuffer batch onto a framebuffer and return the framebuffer s output of the write framebuffer.ŰÆÇÈŰÆÇÈŰÆÇÈ(C) 2015 Dimitri SabadieBSD3+Dimitri Sabadie <dimitri.sabadie@gmail.com> experimentalportableNone!"'(*-/3457>CFIKLNVÅÆÇÈÅÆÇÈ (C) 2015 Dimitri SabadieBSD3+Dimitri Sabadie <dimitri.sabadie@gmail.com> experimentalportableNone!"'(*-/3457>CFIKLNVuvwxyz{|}~€‚ƒxyyz{wvu|}~€‚ƒ (C) 2015 Dimitri SabadieBSD3+Dimitri Sabadie <dimitri.sabadie@gmail.com> experimentalportableNone!"'(*-/3457>CFIKLNV„…†‡ˆ‰Š‹ŒŽ‘’“”•‘’“”•„…†‡ˆ‰Š‹ŒŽ(C) 2015 Dimitri SabadieBSD3+Dimitri Sabadie <dimitri.sabadie@gmail.com> experimentalportableNone!"'(*-/3457>CFIKLNV¾¿ÀÁÂÃÄÀÁ¿¾ÂÃÄ'(C) 2015 Dimitri SabadieBSD3+Dimitri Sabadie <dimitri.sabadie@gmail.com> experimentalportableNone!"'(*-/3457>CFIKLNVÈ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇȱ()*++,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdeffgghhiijjkkllmmnnoppqqrrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±² ³ ´ µ ¶ · · ¸"¹"º"»"¼"½"¾"¿"À"Á"Á"Â"Ã"Ä"Å"Æ"Ç"È"É"Ê"Ë"Ì"Í#Î#Ï#Ð#Ñ#Ò$Ó$Ô$Õ$Ö$×$Ø%Ù%Ú%Û%Ü%Ý%Þ%ß&à&á&â&ãäåæçèéêëìíîïðñòóôõöö÷øøùúûüýþÿL     TUV !"#$%&'(t)*+~,-€./ƒ01234‡56789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[æ\]^  _Ž``abcdæçe’fc“ghi•jklmnoópqóprstuæçvæçwóôxóôy ³ zæ{|"}"~""€""‚"ƒ"É"„"…"†"‡"ˆ"‰"Š"‹"Œ""Ž"""‘"’"“"”"•#–#—#˜#™#š#›#œ#()ž()Ÿ() ()¡()¢()£()¤()¥()¦()*§¨©æª«æ¬­$®$¯$°$°$±$²$³$´%µ%Ù%Ú%¶%·%¸%¹%Û%º%»%¼%½&à¾lumin_C39U3Mplhh7IDTJE11cvLrGraphics.Luminance.VertexGraphics.Luminance.TextureGraphics.Luminance.Shader.StageGraphics.Luminance.RWGraphics.Luminance.QueryGraphics.Luminance.Pixel!Graphics.Luminance.Shader.Uniform!Graphics.Luminance.Shader.ProgramGraphics.Luminance.BufferGraphics.Luminance.BlendingGraphics.Luminance.RenderCmdGraphics.Luminance.Core.TupleGraphics.Luminance.FramebufferGraphics.Luminance.GeometryGraphics.Luminance.BatchGraphics.Luminance.CmdGraphics.Luminance.Core.DebugGraphics.Luminance.Core.Texture$Graphics.Luminance.Core.Shader.StageGraphics.Luminance.Core.RWGraphics.Luminance.Core.QueryGraphics.Luminance.Core.PixelGraphics.Luminance.Core.Cubemap!Graphics.Luminance.Core.Texture1D!Graphics.Luminance.Core.Texture2D!Graphics.Luminance.Core.Texture3D&Graphics.Luminance.Core.Shader.Uniform&Graphics.Luminance.Core.Shader.Program$Graphics.Luminance.Core.RenderbufferGraphics.Luminance.Core.Buffer Graphics.Luminance.Core.Blending!Graphics.Luminance.Core.RenderCmdGraphics.Luminance.Shader#Graphics.Luminance.Core.FramebufferGraphics.Luminance.Core.Vertex Graphics.Luminance.Core.GeometryGraphics.Luminance.Core.BatchGraphics.Luminance.Core.CmdGraphics.Luminancelinea_GrlEbXjtBZcF1OAFuqlJOlLinear.VVSampling samplingWrapS samplingWrapT samplingWrapRsamplingMinFiltersamplingMagFiltersamplingCompareFunctionTexture TextureSize TextureOffset CompareFuncNeverLessEqual LessOrEqualGreaterGreaterOrEqualNotEqualAlwaysFilterNearestLinearWrap ClampToEdgeRepeat createTexturedefaultSampling uploadSubfillSub HasStageErrorfromStageError StageErrorCompilationFailedStagestageIDcreateTessCtrlShadercreateTessEvalShadercreateVertexShadercreateGeometryShadercreateFragmentShadercreateComputeShaderRWWRWritableReadable getGLVendor getGLRenderer getGLVersiongetGLSLVersiongetGLExtensions ColorPixelPixelDepth32FRGBA32FRGB32FRGBA8FRGBA8UIRGB8UIFormatCDepthCRGBACRGBCRGCRCFloatsCUIntsCInts ChannelTypeC32C16C8 ChannelSizeCubemapcubemapWcubemapHCubeFace PositiveX NegativeX PositiveY NegativeY PositiveZ NegativeZ Texture1D texture1DW Texture2D texture2DW texture2DH Texture3D texture3DW texture3DH texture3DDUUniformHasProgramErrorfromProgramError ProgramError LinkFailedInactiveUniformProgram programID createProgramcreateProgram_ BuildRegionRegionBufferRWBufferbufferID createBuffer createBuffer_ newRegion readWhole writeWholefill@?@!writeAtwriteAt'BlendingFactorOneZeroSrcColorNegativeSrcColor DestColorNegativeDestColorSrcAlphaNegativeSrcAlphaDstAlphaNegativeDstAlphaSrcAlphaSaturate BlendingModeAdditiveSubtractReverseSubtractMinMax RenderCmd renderCmd stdRenderCmd stdRenderCmd_:. $fStorable:.HasFramebufferErrorfromFramebufferErrorFramebufferErrorIncompleteFramebufferFramebufferBlitMask BlitColor BlitDepthBlitBothOutputTexturizeFormatFramebufferTargetFramebufferColorRWFramebufferDepthAttachmentFramebufferColorAttachmentDepthFramebufferColorFramebuffer Framebuffer framebufferIDframebufferOutputcreateFramebufferdefaultFramebufferVertexVertexAttributevec2vec3vec4 GeometryModePointLineTriangleGeometrycreateGeometry AnySPBatchSPBatchFBBatchframebufferBatch anySPBatchshaderProgramBatchshaderProgramBatch_CmdrunCmddrawblitGLErrordebugGLbaseGHC.BaseString InvalidEnum InvalidValueInvalidOperationInvalidFramebufferOperation OutOfMemoryStackUnderflow StackOverflow clearGLError fromGLError toGLErrorghc-prim GHC.TypesBoolSampler samplerID BaseTexture baseTextureIDbaseTextureHndfromBaseTexture toBaseTexturetextureTypeEnum textureSizetextureStoragetransferTexelsSubfillTextureSubfromWrap fromFilterfromCompareFunc setSamplingsetTextureSamplingsetSamplerSampling createSamplermkShader isCompiled clogLengthclogprependGLSLPragma $fWritable*RW $fReadable*RW $fWritable*W $fReadable*R getString PixelBase pixelFormat pixelIFormat pixelType channelType channelSize$fColorPixel*Format$fColorPixel*Format0$fColorPixel*Format1$fColorPixel*Format2$fPixel*Format$fPixel*Format0$fPixel*Format1$fPixel*Format2$fPixel*Format3$fChannelType*Format$fChannelType*CFloats$fChannelType*CUInts$fChannelType*CInts$fChannelSize*C32$fChannelSize*C16$fChannelSize*C8 cubemapBase fromCubeFace$fTextureCubemap texture1DBase$fTextureTexture1D texture2DBase$fTextureTexture2D texture3DBase$fTextureTexture3Dcontr_GCTo0F9BXbJ1Kd5vCffR3XData.Functor.Contravariant contramaprunUtoUunPairunTripleunQuad$fUniformCubemap$fUniformTexture3D$fUniformTexture2D$fUniformTexture1D $fUniform[] $fUniform[]0 $fUniform[]1 $fUniform[]2$fUniform(,,,) $fUniform(,,) $fUniform(,)$fUniformFloat $fUniform[]3 $fUniform[]4 $fUniform[]5 $fUniform[]6$fUniform(,,,)0$fUniform(,,)0 $fUniform(,)0$fUniformWord32 $fUniform[]7 $fUniform[]8 $fUniform[]9 $fUniform[]10$fUniform(,,,)1$fUniform(,,)1 $fUniform(,)1$fUniformInt32 $fUniform() $fSemigroupU $fMonoidU $fDivisibleU $fDecidableU$fContravariantU GHC.NaturalNaturalisLinked ifaceWith RenderbufferrenderbufferIDcreateRenderbuffer RegionSizemkBufferWithRegionsNothingrunBuildRegion regionPtr regionSizebufferFlagsFromRWmkBuffer createStoragebytesOfR $fBufferRWW $fBufferRWRW $fBufferRWR GHC.ClassesminmaxfromBlendingModefromBlendingFactor setBlendingMaybeJustTrueFalse$fFunctorRenderCmdForeign.StorableStorableframebufferTargetsetFramebufferColorRWaddDepthOutputaddColorOutput AttachmentColorAttachmentDepthAttachmenttranslateFramebufferStatusfromAttachmentcolorAttachmentsFromMaxsetColorBufferssetDepthRenderbuffer addOutputfromFramebufferBlitMaskframebufferBlit$fFramebufferTarget*RW$fFramebufferTarget*W$fFramebufferTarget*R$fFramebufferColorRW*RW$fFramebufferColorRW*W"$fFramebufferDepthAttachmentFormat$fFramebufferDepthAttachment()$fFramebufferColorAttachment:."$fFramebufferColorAttachmentFormat$fFramebufferColorAttachment() setFormatV vertexGLTypevertexBindingIndex $fVertex*:. $fVertex*V$fVertexAttribute*Word32$fVertexAttribute*Int32$fVertexAttribute*Float fromVector reifyVectorreifyDimreifyVectorNat reifyDimNatdim reflectDimDimtoVectorrefle_55GmxHFm9OKHapWimU2dzjData.Reflectionint Data.FoldableFoldableGHC.WordWord32DirectGeometryIndexedGeometry VertexArray vertexArrayIDvertexArrayModevertexArrayCountfromGeometryMode runFBBatchspBatchShaderProgramspBatchUniformspBatchUniformValuespBatchGeometriesfbBatchFramebufferfbBatchSPBatch runSPBatch drawGeometry