B      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~(c) 2014 Edward KmettBSD2Edward Kmett <ekmett@gmail.com> experimental non-portableNone+U  major.minor  vendor-specific information major.minor.release  vendor-specific information OpenGL ES major.minor  vendor-specific information OpenGL ES major.minor.release  vendor-specific information OpenGL ES GLSL ES major.minor  vendor-specific information' OpenGL ES GLSL ES major.minor.release  vendor-specific information nReturns the company responsible for this GL implementation. This name does not change from release to release.Returns the name of the renderer. This name is typically specific to a particular configuration of a hardware platform. It does not change from release to release.$Returns a version or release number.+Return the primary shading language versionLReturns a set of shading language versions supported by this implementation.  Safe-Inferred68.All OpenGL resources implement this typeclass.,The resources have an inner type, usually a GLuint but not always.;If you work with raw OpenGL resources, you may need to use A to make sure the resource is not garbage collected prematurely.Returns the raw OpenGL type.cGuarantees that the resource has not been garbage collected at the point this function is invoked. Promptly finalizes the resource.This can be unsafe; see . Safe-InferredM Same as  but the result will be a , not . Same as  but does not return a value.  Similar to Y but raises a user error if the source integer cannot be represented in the target type.6This cannot turn an integral into a non-integral type.       !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrs   None+M !The type of a Caramia context ID.'Returns the current Caramia context ID.4The context ID is unique between different calls to  giveContext.Returns A if there is no context active.Stores a context local value.The type of the given value is used as a key. This means that if a value of the same type was stored before, that value is thrown away and replaced with this new value you just gave.The value is evaluated to WHNF.?You don't need this function to work with context local data. \ is sufficient as it also lets you set a default value in case a value was not already set.-Context local data is wiped to oblivion once  giveContext ends. Retrieves a context local value.See . UDefault value generating action; not evaluated if there was already a value stored.    None+}Thrown when there was a detected attempt to use an OpenGL feature that is not supported by the driver, hardware or platform.ACaramia cannot detect all attempts to use non-supported features.dIf the platform supports at least OpenGL 3.3, then this exception is guaranteed to never be thrown.YThe text contains human-readable string that may tell what exactly is missing and where.-Checks that extension is available and throw - with the given extension name if it is not.Same as ^ but takes an action to run afterwards, it checks for the extension and then runs the action.XChecks that OpenGL version is at least given version or that an extension is available.bThis is for the common case of checking core OpenGL version and falling back to a core extension.ttNoneU@FThis function is a no-op if the required extensions are not available.C Shortcut to u! when you query only one integer.) !"#$%&'()*+,-./0123456789:;<=>?@ABCDvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrsutuvwxyz{|}~                           ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                            ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                            ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                            !"#$%&'()*+,-./0123456789:;<=>?@ABCD,CD+')*%$&(! #"0/-.,123456789:;<=>?AB@) !"#$%&'()*+,-./0123456789:;<=>?@ABCDNone+ !EF " # $EFEF  !EF " # $None+0 G$Class that turns Haskell types into I.HReturns the corresponding I for a Haskell type.ISpecification formats.FThese formats specify the type of the data passed from Haskell to GPU.R!All the various internal formats.This list corresponds to the OpenGL specification of 3.3, required texture formats (+ S3TC compressed formats). Check the OpenGL specification for explanations on how these formats work.Given a format, returns _ if that format can be rendered to. That is, if it can be one of the targets in a framebuffer.~This is conservative. Sometimes you may be able to render anyway; however this is not guaranteed by the OpenGL specification.8Returns true if the given format is a compressed format.3Returns true if the given format is a color format.7Returns true if the given format has a depth component.9Returns true if the given format has a stencil component.;Returns true if the given format uses the sRGB color space.-If the format is not a color format, returns .LGiven a specification format, returns the number of bytes one element uses.]GH%Used to pass the type; not evaluated.IJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~SGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~]R~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSIQPONMLKJGHGHIQPONMLKJR>~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTS None+ OSpecifies the tests that are run on a fragment to decide if it should be seen. Which depth test to use, if any?If depth test is specified, should we also update the depth buffer with new depth values? The depth buffer will not be written if 9 is not specified regardless of the value in this field."Which stencil test to use, if any?9What to do with the stencil buffer if stencil test fails.TWhat to do with the stencil buffer if stencil test passes but depth testing fails).What to do with the stencil buffer if stencil and depth test passes, or if depth buffer is not present or depth test is disabled.'What kind of face culling should we do.iThis stops the drawing of any faces but points and lines (or other non-facey like primitives) are drawn.Stencil buffer operations.See  glStencilOp & for explanations of each constructor.tThis one replaces the old value in the stencil buffer with the given reference value and ANDs the result with mask.\A comparison function. Incoming value is compared with this function to the existing value..This can be used with depth and stencil tests.See  glDepthFunc G from OpenGL specification or man pages for more detailed explanation.(Returns the default fragment pass tests.*Neither depth or stencil test is enabled. S is set to true but that value is only used if you specify with depth test to use."All stencil operations are set to .Culling is set to ....  None+0B The color data type.This data type says nothing about the color space these values are in. The color space depends on the usage; for example, a framebuffer with sRGB textures attached uses sRGB color space in these color values.'s  % instance is equal to  & 's  %" instance, in the order "r g b a".!A convenience function to turn a  color value to a .'The value is clamped between 0 and 255.Maps a  to a 5, so that 255 is mapped to 1.0 and 0 is mapped to 0.#Construct a color from rgba values.View rgba in a tuple.Lens to all components.Lens to red component.Lens to green component.Lens to blue component.Lens to alpha component. ' ( ' ( None+0!Captures the blending parameters.,Describes the arithmetic to use in blending.See  in OpenGL documentation.,Describes which equation to use in blending.See  in OpenGL documentation.### NoneXBlending that doesn't do anything special; just copies the source pixel to destination.!!NoneQGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~QR~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSIQPONMLKJGH None+MTQAn exception that is thrown when the OpenGL version is too old for this library.)The OpenGL version this library needs. 9The OpenGL version reported by current OpenGL context. =Tell Caramia the current thread has an OpenGL context active.When the given IO action returns, Caramia will think that the OpenGL context is now gone. It is probably best to actually close the context because this also means OpenGL finalizers will not be run (Caramia thinks they were all released when the OpenGL context went away).~The context in the IO action is referred to as 'Caramia context' in this documentation to distinguish it from OpenGL context.If the environment variable 'CARAMIA_OPENGL_DEBUG' is set, then, if 'GL_KHR_debug' extension is supported, OpenGL debug output is written. Note that you might need a debug OpenGL context for there to be any messages.IIf the window size changes while the context is active, you should call  p with the new dimensions. There is no mechanism from OpenGL's side to automatically detect if size has changed.Throws J if the code detects a context that does not provide at least OpenGL 2.1. Sets the new viewport size. You should call this if the display size has changed; otherwise your rendering may look twisted and stretched. )Scraps the current context.Not public API. :Run any pending finalizers in the current Caramia context.cDoes nothing if current thread does not have a Caramia context or there are no pending finalizers.If any finalizer throws an exception (asynchronous or synchronous), the Caramia context dies and that exception is propagated upwards.   itself runs  *{ to run the finalizers with exceptions masked but you might still receive asynchronous exceptions with, for example, the  + functions.DA good place to call this is right after or before swapping buffers. 5Schedules a finalizer to be run in a Caramia context.3Does nothing if given context is not alive anymore.This is typically called from Haskell garbage collector finalizers because they cannot do finalization there (Haskell finalizers are running in the wrong operating system thread).    WidthHeight )  , -               )  , -None+U8Returns information about current state of video memory.There is no guarantee that all, or even any information is actually returned. You need either 'GL_ATI_meminfo' or 'GL_NVX_gpu_memory_info' extension to get any results.dNo guarantees for accuracy either. Seriously, don't rely on this for anything but rough estimation. . / 0 . / 0None+246TWrap a  to a . The wrapped resource has  implementation.$The data type of a Caramia resource.Creates a new resource.bMust be called in a thread that has an OpenGL context active. Otherwise, an error will be thrown.If you throw an exception in the OpenGL finalizer, then this will disrupt Caramia context and make it invalid. So try not to throw those exceptions?Promptly finalize a resource.This is UNSAFE if you finalize a resource that is being referred to from another resource that you will still use. Consequences will be unpredictable (although you are unlikely to hit a hard crash).The ordinary finalizer will be run immediately. The OpenGL finalizer will be run if the current thread is the same OpenGL thread where the resource was created.If ordinary finalizer throws an exception, the OpenGL finalizer is not run and the resource is marked as finalized. The exception propagates out from this call to you.2Does nothing if the resource is already finalized.Uses a resource.HThrows an user error if the resource is used in a wrong or dead context.  1 2 3JAction that returns the raw, unmanaged resource. Good place to create it.BOpenGL finalizer. Will only be called in the same thread as this A is called, but only if the same OpenGL context is still alive.W'Ordinary' finalizer. This will be called immediately when garbage collector collects the resource which means before the OpenGL finalizer and in a separate thread. If this finalizer throws an exception then the OpenGL finalizer is cancelled and the resource is marked as finalized. This will be run even if the OpenGL context is gone.yUse the resource inside this action. Don't return the unmanaged resource from this because behaviour is then undefined. 4 5 6 1 2 3 4 5 6None +246UCreate a fence.Waits for a fence to signal.@IMPORTANT: this is not interruptible by asynchronous exceptions.%Checks if a fence has been signalled.  isFenceSignalled = waitFence 0  7 8 9Number of microseconds to wait. if the fence was signalled,  if waiting timed out. : ; 7 8 9 : ;None  +0246HMVA query object. The type variable tells the type of the return values from the query.<What of query to make? These queries return boolean results. If  GL_ARB_occlusion_query2 @ or OpenGL 3.3 is not available, this is implemented with % behind the scenes.!AWhat kind of query to make? These queries return integer results."Requires OpenGL 3.3 or  GL_ARB_timer_query . <&Which queries cannot be used together?&>Creates a query, runs some actions in it and then returns an  value.jThere can be only one active query for each query type. An user error will be thrown if this is violated. $ cannot be used at the same time as %.You can query the returned  for results. However, because using the GPU is typically asynchronous, results may not be (and often are not) immediately available. Use ., to check if results have become available.'Same as &2 but throws away the result of the action itself.(Same as &5, but uses boolean queries, whose results is either  or .)Same as (2 but throws away the result of the action itself.*8Creates a new query object, that returns a numeric type.Use , and -F to decide which part of GPU commands you want the query to be about.You may want to use &3 instead, which begins and ends the query for you.+Same as * but for boolean queries. =Creates a new query.ENOT PUBLIC API. Does not check or care what the query result type is.,1Begins a query. A query can only be started once.- Ends a query..)Returns results if they are available or A./=Returnts query results, blocks if it has to wait for results.NNote: cannot be interrupted by asynchronous exceptions if it decides to wait.. > ? @ A B C D E F G H !"#$% < I J K&'() L M N O P*+ =,-./ Q R S T U V !"#$%&'()*+,-./&'()*+,-/.!%$#" ! > ? @ A B C D E F G H !%$#" < I J K&'() L M N O P*+ =,-./ Q R S T U VNone +0246 0Additional mapping flags.1dIf set, you need to explicitly flush ranges of the mapping after you have modified them, with  explicitFlush. The mapping must allow writes. Requires OpenGL 3.0 or greater or "GL_ARB_map_buffer_range", but if neither of these are available, then this flag is no-op and so is  explicitFlush.Explicit flushing can be useful when you map a large buffer but don't know beforehand how much of that buffer you are going to modify.2Map the buffer without synchronization. You will have to use synchronization primitives to make sure you and OpenGL won't be using the buffer at the same time.3Describes a style of mapping.4>No access; you cannot map the buffer at all after creation.5%Both reading and writing can be done.6The mapping can be written to.7The mapping can be read from.=Buffer data type.AReturns the allowed mappings.B)Returns the size of the buffer, in bytes.0123456789:;<=>?@ABCDEFG0123456789:;<=>?@ABC=>?@ABCGF:;<ED8937654021 0213765489:;<=>?@ABCDEFGNone+0HMHException that is thrown from _$ when buffer corruption is detected.ECorruption can happen due to external factors and is system-specific.JXThis data describes how a buffer should behave and what operations can be done with it.-Accurate description can improve performance.6For forwards compatibility, it is recommended to use X, and then set the fields you want to change.L(Hints on how the buffer will be used.M,How large the buffer should be, in bytes.N5The initial data to be copied to the buffer. Can be A4 in which case the initial contents are undefined.O/What kind of mapping access is allowed. See map.P!The nature of access to a buffer.zThese correspond to the OpenGL access nature hints. You can look for them in the OpenGL specification or check this link: .https://www.opengl.org/wiki/GLAPI/glBufferDataT$The frequency of access to a buffer.}These correspond to the OpenGL access frequency hints. You can look for them in the OpenGL specification or check this link: .https://www.opengl.org/wiki/GLAPI/glBufferDataX"The default buffer creation flags.yThe default attempts to give you the most general (and possibly slowest) buffer. Both read and write access are allowed."Default size is 0 which will make Y fail if you don't set it.Y"Creates a new buffer according to J specification.Z(Creates a buffer from a storable vector.This is a convenience function.[Creates a buffer from a list. The principle is the same as in Z.\*Creates a buffer from a strict bytestring. The principle is the same as in Z.]Same as ^& but allows more control over mapping.  bufferMap = bufferMap2 mempty^/Maps (part) of a buffer to system memory space.zThe mapping is valid until the buffer is garbage collected (in which case the mapping is automatically unmapped) or when _ is called on the buffer.8You can not have two mappings going on at the same time._Unmaps a buffer.*Does nothing if the buffer was not mapped.hIt is possible that the mapping become corrupt during the time it was mapped. If there was corruption, H is thrown in this call.CCorruption means that the contents of the buffer are now undefined.`Same as a but with map flags.See ].awA convenience function over map/unmap that automatically unmaps the buffer when done (even in the case of exceptions).3The arguments to this function are the same as for ^$, except for extra action argument. This calls _ which means it can throw H when the action is done.There is a rare case that can happen if your action throws an exception AND the unmapping throws an exception. Which exception is propagated upwards? If this happens, this call silences H exception and re-throws the user exception. This unfortunately means there is no way to know if the buffer was corrupted if you threw an exception inside the action.b?A convenience function to upload a storable vector to a buffer.CThe buffer must be in an unmapped state and must be write-mappable.c(Copies bytes from one buffer to another.This will use  GL_ARB_copy_buffer E extension if it is available (this became available in OpenGL 3.1).VThe buffers must not be mapped; however this call can bypass the access flags set in Y, if the above extension is available. That is, you can copy data even to a buffer that was set as not writable or copy from a buffer that was set as not readable.When  GL_ARB_copy_buffer 4 is not available, this is implemented in terms of a( and is subject to mapping restrictions.This is faster (when the required extensions are available) than mapping both buffers and then doing a memcpy() style copying in system memory because this call usually does not require a round-trip to the driver.bYou can use the same buffer for both destination and source but the copying area may not overlap.d%Invalidates the contents of a buffer.iThis is you saying: "I don't care what's in this buffer anymore. You can do whatever you want with it.".The data may be gone or it may not be gone. Use this as a hint to the implementation that you will not use the _current_ contents of the buffer anymore.This requires the OpenGL extension "GL_ARB_invalidate_subdata" but if this extension is not present, then this simply does nothing.See  6https://www.opengl.org/wiki/Buffer_Object#Invalidation.e,Explicitly flushes part of a buffer mapping.&The buffer must have been mapped with 1 set. Furthermore, either OpenGL 3.0 or "GL_ARB_map_buffer_range" is required; however this function does nothing is neither of those are available.$HIJKLMNOPQRSTUVW W X Y ZXYZA hook to modify J. You can use ]u. By default all access is forbidden and buffer usage is static, draw. Don't shrink buffer size or this may crash.[\]^@Offset, in bytes, from start of the buffer from where to map.How many bytes to map.&What access is allowed in the mapping._`a(The pointer is valid during this action.b#The vector from which to pull data.COffset, in bytes, to which point in the buffer to copy the data.cDestination buffer.Offset in destination buffer.Source buffer.Offset in source buffer.How many bytes to copy.de5Offset, in bytes, from start of the mapped region.How many bytes to flush. [ \)01234567=ABHIJKLMNOPQRSTUVWXYZ[\]^_`abcde+Y\[Z=ABTWVUPSRQ37654021JKLMNOXde^]_ca`bBAHIHIJKLMNOPSRQTWVU W X Y ZXYZ[\]^_`abcde [ \None+246TUf"Specifies a topology of a texture.gBuffer textures, see *https://www.opengl.org/wiki/Buffer_Texture'Available if OpenGL version >= 3.1 or GL_ARB_texture_buffer_object is available.q8Multisampling is available if OpenGL version >= 3.2 or GL_ARB_texture_multisample is available.1Specification on what the texture should be like.Use textureSpecification and set at least  and 6. Future minor versions remain compatible if you use textureSpecification& instead of the constructor directly.FHow many mipmap levels including the base level? Must be at least 1.7Ignored and not evaluated for multisampling textures.The type of a texture unit.The minimum valid value is 0 and maximum is implementation dependant but in OpenGL at least 48 units will work at the same time in shaders.Given a bind location (such as GL_TEXTURE_3D), returns the query enum that retrieves the current binding from glGetIntegerv (such as GL_TEXTURE_BINDING_3D). If you use >, be careful of any resource that might refer to the texture.5fghijklmnopqrstuvwxyz{|}~2fghijklmnopqrstuvwxyz{|}~5f}zvqkig~{|wxyrstulmnopjh f}zvqkig~{|wxyrstulmnopjhNone+0246HM"Returns the size of a framebuffer. This is an 9 action because it can change for the screen framebuffer. NoneUglTextureStorage1DglTextureStorage2DglTextureStorage3D ] ^ _ ] ^ _None  +0MU$Texture comparison modes.See  glTexParameteri  documentation in OpenGL.-Values of this type refer to sides of a cube.,Used to specify how to move the data from a Buffer to a  in .gThis is common for all texture topologies. However, some fields are ignored depending on the topology.aFor example, if you upload into a 1D texture, then all fields that deal with higher dimensions (, ,  etc.) are ignored.It is recommended that you use one of the smart constructors as they implement the common use cases so you don't have to fill all these fields by yourself.From which buffer to upload.AOffset in the buffer, in bytes, from where to start uploading.5To which mipmap level to upload. (0 = base level).;What data type is used for each component value in a pixel."What format is the source data in.X offset where to put the data.Y offset where to put the data.Z offset where to put the data.Width of the data to put.Height of the data to put.Number of 2D images to put.Only used for cube map textures. Specifies which side of the cube to upload. Not evaluated if the texture is not a cube texture.wNumber of columns in the image in the source buffer. This value is also sometimes known as 'pitch'. It is the same as o except in cases where the next row in source data does not come immediately after the current row but after ! from the first pixel in the row.Same as  but for images in 3D uploading.Alignment in which the source texture data is. Every row is aligned to this value. Allowed values are 1, 2, 4 and 8. The default value in smart constructors is 1.cSpecifies the format in which buffer data is for the purposes of uploading said data to a texture.Stencil values. Depth values.You know the drill.Red and green. Just red.Returns the width of a texture.$Returns the size of a texture, as a  `. Width and height. 5viewSize2D tex = V2 (viewWidth tex) (viewHeight tex) $Returns the size of a texture, as a  a. Width, height and depth. EviewSize3D tex = V3 (viewWidth tex) (viewHeight tex) (viewDepth tex)  Returns the height of a texture.'This is 1 for one-dimensional textures.HReturns the depth of a 3D texture or number of layers in array textures.(This is 1 for any other type of texture.Creates a new texture.4Initially the contents of the texture are undefined.$Texture dimensions must be positive.NGenerate all mipmaps for a texture. If mipmap levels were specified, that is.!Constructs a common 1D uploading.!Constructs a common 2D uploading.;This can also be used for uploading into 1D texture arrays.!Constructs a common 3D uploading.;This can also be used for uploading into 2D texture arrays.Uploads an image to a texture.EReturns the maximal number of mipmap levels when given a side length.[ b c d e f g hHow many pixels to upload.Width of the image to upload.Height of the image to upload.Width of the image to upload.Height of the image to upload.Number of images to upload. i j k l m n o p q r sqfghijklmnopqrstuvwxyz{|}~rf}zvqkig~{|wxyrstulmnopjh. b c d e f g h i j k l m n o p q r sNone + Specifies what to clear in a   invocation.Use  5 smart constructor instead for forward-compatibility.#Each member of this data type is a C value; if any value is B: then that value is cleared, otherwise it is not touched.!Clear depth buffer to this value.#Clear stencil buffer to this value.(Clear (all) color buffers to some color.Returns the screen framebuffer.Note that all s are equal to each other with ,, even those in unrelated Caramia contexts.UThis makes it easy to check if any framebuffer happens to be the screen framebuffer.?Make a texture target that is the "front" of the given texture.vThis is the most common use case. "front" means the first texture in a texture array and the base layer mipmap level.(Map a specific mipmlayer from a texture.IMap a specific mipmap layer of a specific layer in a 3D or array texture. Creates a new framebuffer. BReturns the maximum number of draw buffers in the current context.6Almost all GPUs in the last few years have at least 8. Smart constructor for . All members are A. Clears values in a framebuffer.Which mipmap layer?Which mipmap layer?Which topological layer? t              t    None +0246:A pipeline object that references a collection of shaders./OpenGL equivalent is the shader program object.,A shader object for a specific shader stage.'OpenGL equivalent is the shader object.'Which stage does this shader belong to.!Despite the Haskell name, ), the object is a shader program object."kThe ordering has no inherent meaning but it allows shaders to be stored correctly in containers that have  constraint.  !"#$ $#"!     !"#$None +024:M%FClass of data types that can be set to a uniform in a shader pipeline.7We provide instances for large integer values (such as ) but you should know that uniforms are rarely larger than 32-bit. We throw a user error if you pass a value that is larger than what the OpenGL API can accept (which is 2^32-1 for unsigned integer types and 2^31-1 for signed integer types).&4Binds attribute names to specific attribute indices.See  from OpenGL documentation.The Map' is from containers and is a member of  so you can use * if you are not doing any special binding. You can use mapKeys or mapKeysMonotonic to change the key and  to map indices.'RThrown when a shader linking error occurs. The text is the error log for linking.Can also be caught as +.)ZThrown when a shader compilation error occurs. The text is the error log for compilation.Can also be caught as +.+9Thrown when either a compilation or linking error occurs..Sets a uniform in a pipeline./DCreates a shader from GLSL shader source, using a strict bytestring.0BCreates a shader from GLSL shader source, using a lazy bytestring.The bytestring will be forced and converted to a strict bytestring internally, so this is not so efficient, if you care about storage efficiency in shader compilation.1PCreates a shader from GLSL shader source, encoding a Text into an UTF-8 string.This can throw ) if compilation fails. uGChecks that there are no compilation errors in an OpenGL shader object.(DELETES the shader if there were errors. vSame as  u but for linking.)DELETES the program if there were errors.2:Creates a pipeline from vertex and fragment shader source.5This is a convenience function for a common use case.31Creates a pipeline composed of different shaders.4,Returns a uniform location for a given name.The uniform may not be in the shader or it may not be active. If this happens, a special uniform location is returned that can be used in . to make it do nothing.5-Returns a pipeline that does not do anything.LWithin the same context, this returns the same pipeline for each invocation. w x y z { | }% ~&'()*+,-  . /01The shader source code. u v2Vertex shader source.Fragment shader source.Attribute bindings.3 45  %&'()*+,-./0123451/032&.4%- 5)*'(+, w x y z { | }% ~&'()*+,-  . /01 u v23 45 None +2468"The vertex array object data type. 6789:;<=>?6789:;< 89:;<?>67=6789:;<=>?None+0@Specifies how to source data.1For forward compatibility, you might want to use X or Y5 and then set the fields that are of interest to you.B?Offset, in bytes, at which point from buffer to start sourcing.CDWhich attribute index in a shader program to source this data. See  ! on attributes.DjNumber of components in one piece of data (that is, per vertex). This must be an integer between 1 and 4.EHow many bytes there are between pieces of data. Because of OpenGL inconsistencies behind the scenes, 0 means the data is tightly packed, that is, ) stride = components * sizeOf sourceType F2This only applies when an integer type is used in I and GG is false. It determines whether integer values should be normalized.ZNormalization maps the integer value to [-1..1] or [0..1] range. For example, if you use h as the type parameter, then 0 is mapped to 0.0 and 65535 is mapped to 1.0. Signed types (for example, () are mapped to [-1..1] instead so for 2 32767 is mapped to 1 and -32768 is mapped to -1.ZThis value is ignored and unevaluated for types that are one of the floating point types.GvDon't convert integers to floats in any way. Normally integers are converted to floating point. If this is set, then F is ignored and not evalutated.H When doing instanced rendering ("#m > 1), this value tells how many instances must be rendered before the attribute from this source advances.HIf zero (the default) then the attribute is advanced after every vertex.You can look up  glVertexAttribDivisor 2 from OpenGL to find more information about this.IPThe data type of values in the buffer. It tells the type of a single component.J0Class of types that are valid for sourcing data.5This is a convenience class to turn Haskell types to L.KReify the type to a compatible L.LTypes allowed for sourcing.*These are mostly Haskell types except for O" which has no Haskell equivalent.O16-bit floating point value.VCreates a vertex array object.PInitially, the vertex array object makes no data available to a shader program.WThis returns the size of a L , in bytes.XThe default sourcing.Offset and stride are set to 0.At the very least you must set D and C.You must also set F, G and I in a consistent way. See @.YSame as X but sets I according to a Haskell type.ZISpecifies that some data from a buffer should be sourced for each vertex.The vertex array object retains a reference to the buffer which means it will not be garbage collected as long as the VAO remains active.#Consequences are undefined if your @u does not make sense. There is some error checking but it can only detect obviously invalid values in the sourcing.%@ABCDEFGHIJKLMNOPQRSTUVW XY%Used to pass the type; not evaluated.Z%From which buffer to source the data.#Specifies how the sourcing is done. 8@ABCDEFGHIJKLMNOPQRSTUVWXYZV8Z@ABCDEFGHIXYJKLUTSRQPONMW@ ABCDEFGHIJKL UTSRQPONMVW XYZ None *+02468BHMU"]<Values of this type tell how to select attribute data from g.Future minor versions will not add any new fields or remove any fields from these values. Instead, new constructors are introduced.^Use an index buffer.OpenGL equivalent is  glDrawElements()  or  glDrawElementsInstanced() L. Index buffer contains indices that point to offsets in the vertex arrays.bCSimply start from some index and continue from there, 0, 1, 2, etc.OpenGL equivalent is  glDrawArrays()  or  glDrawArraysInstanced() .d)Contains a specification of what to draw.It is recommended to use  instead of this constructor.gNThis is the VAO from which attributes are retrieved in the shader pipeline.hHow many indices to render?iHow many instances to render.j&How to select the attribute data from g.kContains drawing parameters. You can use # to obtain default draw parameters.mWhich shader pipeline to use.n(What kind of fragment pass tests to use.oWhich blending to use.pWhere do you want to render?qFWhich textures do you want to bind? The keys in this integer map are @s and tell which texture units you want to bind given textures.r/Modify the depth values that are being written. (factor, units) .5By default this is (0, 0) (that is, do nothing). See  glPolygonOffset " for the meaning of these values.sUse primitive restart? >https://www.opengl.org/wiki/Vertex_Rendering#Primitive_Restart Is this is A8 (the default) then primitive restart will not be used.uTurns a Haskell type to v.v,The type of indices in an index buffer. See _.z<The different types of primitives you can use for rendering. %https://www.opengl.org/wiki/PrimitiveDefault drawing parameters.m7 is not set (that is, it's undefined). You must set it.No textures are bound.%Blending mode is premultiplied alpha.No primitive restart is used.p is the screen framebuffer.Returns a default draw command.<Several fields are undefined so you must set them. These arefghjio is set to 1. In future (minor) versions if we add any new fields those fields will have a sane default value.Draws according to a d.1There is a very large overhead in doing a single ! call. You probably want to use  and  instead.Same as  but in a [ command stream.!Use to hoist the base monad in a \.Runs a drawing specification.&You can think of this as running many U commands with similar draw command specifications. This call is an optimization to & which has a high overhead by itself.Another way to think of this is a place where the functional, "no hidden state" design of the Caramia API is relaxed inside the [ stream. PSets the active texture (not public API! What would they use this for anyway?). Sets new primitive restart mode.Sets new texture bindings.Changes the pipeline in a [ command stream."Changes the current blending mode.!Sets the new fragment pass tests.Sets polygon offset.Sets the current framebuffer. Using   is safe inside a \' stream. It is possible to run nested \ streams this way as well.]       [\       ]^_`abcdefghijklmnopqrstu%Used to pass the type, not evaluated.vwxyz{|}~  ;Initial drawing parameters. These can be changed in the [ command stream.Draw command stream.            ! " #[[\]^_`abcdefghijklmnopqrstuvwxyz{|}~[\[defghijklmnopqrs]b^c_`avyxwz~}|{tu)       [\       ]b^c_`adefghijklmnopqrstuvyxwz ~}|{              ! " #$None GHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./01234567=ABHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~     %&'()*+,-./0123458@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ $%%&'()*+,-./001234567889:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                                                             ! " # $ % & & ' ( ) * + ,--./01123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTTUUVWWXYZ[\]^_`aabbcdefghijklmnopqrstuvwxyz{|}~X\X\       !!!X"#$%&'()*+,,--../012345678899X:;<=>??@ABCDEFGHIJKLMNOPQRSTUVWXjYZ[\]^_`aabcd#effghijklmnopqrstuvwxyz{|}~i      !"#$%&'()*+,-./0123456789:;<=<><?@ABCDEFGHIJKLLMNOPQRSTTUVWXYZ[\]^_``abcdefghijjklmnonpnqnrnstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRQSQTQUQVQWQXQYQZQ[Q\Q]^_`abcdefghijklmnopqrstuvtuwtuxtuytuztu{tu|tu}tu~tututututututututututututututututu      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                                  ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                                                                                                                                                                   ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                                                                                                                                                                   ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                                                                                                                                                                                  !  "  #  $  %  &  '  (  )  *  +  ,  -  .  /  0  1  2  3  4  5  6  7  8  9  : ; ; < = > ? @ A B C  D E F G H I J K L M N O2 P Q R S T5X\ U V W X Y Y Z [ [:X\ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u A v w A x y z { | } ~                         n                                                                                                                      n                    Y     ! " # $ % & ' n ( ) * + , - . / 0 1 2 3 4 5 6 7caramia-0.7.2.0'Graphics.Caramia.Internal.OpenGLVersionGraphics.Caramia.OpenGLResourceGraphics.Caramia.Prelude*Graphics.Caramia.Internal.ContextLocalData#Graphics.Caramia.Internal.Exception$Graphics.Caramia.Internal.OpenGLCApi%Graphics.Caramia.Internal.OpenGLDebug&Graphics.Caramia.ImageFormats.Internal Graphics.Caramia.Render.InternalGraphics.Caramia.ColorGraphics.Caramia.Blend.InternalGraphics.Caramia.BlendGraphics.Caramia.ContextGraphics.Caramia.MemoryGraphics.Caramia.ResourceGraphics.Caramia.SyncGraphics.Caramia.Query Graphics.Caramia.Buffer.InternalGraphics.Caramia.Buffer!Graphics.Caramia.Texture.Internal%Graphics.Caramia.Framebuffer.Internal$Graphics.Caramia.Internal.TexStorageGraphics.Caramia.TextureGraphics.Caramia.Framebuffer Graphics.Caramia.Shader.InternalGraphics.Caramia.ShaderGraphics.Caramia.VAO.InternalGraphics.Caramia.VAOGraphics.Caramia.Render finalizeNowGraphics.Caramia.ImageFormatsCaramiaShaderCaramia.Render numInstancesGraphics.Caramia OpenGLVersion openGLVersionshadingLanguageVersionshadingLanguageVersionsOpenGLResourcegetRawtouchfinalizeshowTatomicModifyIORef_'safeFromIntegral ContextID nextContextID newContextIDrunningContextscontextLocalDatacurrentContextIDstoreContextLocalDataretrieveContextLocalData NoSupportinfocheckExtensioncheckExtensionMcheckOpenGLOrExtensionM checkOpenGLMmglDeleteBuffermglDeleteVertexArray mglGenBuffermglGenVertexArraymglGenFramebuffermglDeleteFramebuffer mglGenQuerymglDeleteQuerywithBoundDrawFramebufferwithBoundProgramsetBoundProgramwithBoundBuffersetBoundElementBufferwithBoundElementBufferwithBoundPixelUnpackBuffer withBoundVAO!mglVertexArrayVertexAttribDivisor)mglVertexArrayVertexAttribOffsetAndEnable*mglVertexArrayVertexAttribIOffsetAndEnablemglNamedBufferStoragemglNamedBufferDatamglProgramUniform1uimglProgramUniform2uimglProgramUniform3uimglProgramUniform4uimglProgramUniform1imglProgramUniform2imglProgramUniform3imglProgramUniform4imglProgramUniform1fmglProgramUniform2fmglProgramUniform3fmglProgramUniform4fmglProgramUniformMatrix4fvmglProgramUniformMatrix3fvmglMapNamedBufferRangemglFlushMappedNamedBufferRangemglUnmapNamedBuffermglNamedCopyBufferSubDatagigfactivateDebugModeflushDebugMessagesSpecificationTypeabletoSpecificationTypeSpecificationType FHalfFloatFFloatFInt32FInt16FInt8FWord32FWord16FWord8 ImageFormatDEPTH24_STENCIL8DEPTH32F_STENCIL8DEPTH_COMPONENT16DEPTH_COMPONENT24DEPTH_COMPONENT32FDEPTH_COMPONENT32COMPRESSED_SRGB_ALPHA_S3TC_DXT5COMPRESSED_SRGB_ALPHA_S3TC_DXT3COMPRESSED_SRGB_ALPHA_S3TC_DXT1COMPRESSED_SRGB_S3TC_DXT1COMPRESSED_RGBA_S3TC_DXT5COMPRESSED_RGBA_S3TC_DXT3COMPRESSED_RGBA_S3TC_DXT1COMPRESSED_RGB_S3TC_DXT1COMPRESSED_SIGNED_RED_RGTC1COMPRESSED_RED_RGTC1COMPRESSED_SIGNED_RG_RGTC2COMPRESSED_RG_RGTC2RGB9_E5SRGB8RGB8UIRGB8IRGB8RGB16RGB16UIRGB16IRGB16FRGB32UIRGB32IRGB32FRGB10_A2 SRGB8_ALPHA8RGBA8UIRGBA8RGBA16UIRGBA16IRGBA16FRGBA16RGBA32UIRGBA32IRGBA32FR11F_G11F_B10FRG32UIRG32IRG32FRG16FRG16UIRG16IRG16RG8UIRG8IRG8R32UIR32IR32FR16FR16UIR16IR16R8UIR8IR8isRenderTargettable isCompressed isColorFormathasDepthComponenthasStencilComponent isSRGBFormat toConstantIF toConstantSTsizeOfSpecificationType$fSpecificationTypeableCFloat$fSpecificationTypeableFloat$fSpecificationTypeableCUInt$fSpecificationTypeableCInt$fSpecificationTypeableInt32$fSpecificationTypeableInt16$fSpecificationTypeableInt8$fSpecificationTypeableWord32$fSpecificationTypeableWord16$fSpecificationTypeableWord8FragmentPassTests depthTest writeDepth stencilTeststencilReference stencilMask failStencilOpdepthFailStencilOpdepthPassStencilOpcullFaceCulling NoCulling FrontAndBackFrontBack StencilOpInvertDecreaseAndWrapDecreaseIncrementAndWrap IncrementReplaceZeroKeepComparisonFuncAlwaysGEqualNotEqualGreaterLEqualEqualLessNevercomparisonFuncToConstantstencilOpToConstantsetStencilFuncwithStencilFunc withCulling setCulling setDepthFunc withDepthFuncsetFragmentPassTestswithFragmentPassTestscullingToConstantdefaultFragmentPassTestsColorv4viewRed viewGreenviewBlue viewAlpha floatToWord8 word8ToFloatrgbaviewRgbargbaLredLgreenLblueLalphaL BlendSpec alphaEquation colorEquation srcColorFunc srcAlphaFunc dstColorFunc dstAlphaFunc blendColor BlendFuncBFSrcAlphaSaturateBFOneMinusConstantAlphaBFConstantAlphaBFOneMinusConstantColorBFConstantColorBFOneMinusDstAlpha BFDstAlphaBFOneMinusSrcAlpha BFSrcAlphaBFOneMinusDstColor BFDstColorBFOneMinusSrcColor BFSrcColorBFOneBFZero BlendEquationBEMaxBEMinBEReverseSubtract BESubtractBEAdd toConstantBE toConstantBF setBlendings withBlendingspreMultipliedAlphanopBlend TooOldOpenGL wantedVersionreportedVersion giveContextsetViewportSizerunPendingFinalizersscheduleFinalizer MemoryInfoavailableVideoMemorytotalVideoMemory getMemoryInfoWrappedOpenGLResourceResource newResource withResourceFencefence waitFenceisFenceSignalledQueryResultTypeQueryBooleanQueryTypeAnySamplesPassedNumericQueryType TimeElapsed"TransformFeedbackPrimitivesWrittenPrimitivesGenerated SamplesPassedwithNumericQuerywithNumericQuery'withBooleanQuerywithBooleanQuery'newNumericQuerynewBooleanQuery beginQueryendQuery tryGetResults getResultsMapFlag ExplicitFlushUnSynchronized AccessFlagsNoAccessReadWriteAccess WriteAccess ReadAccessBuffer_ BufferStatusmappedBufferresourcestatusviewAllowedMappingsviewSizeordIndex $fEqBuffer $fShowBuffer $fOrdBuffer$fOpenGLResourceWord32BufferBufferCorruptionBufferCreation accessHintssize initialData accessFlags AccessNatureCopyReadDrawAccessFrequencyDynamicStaticStreamdefaultBufferCreation newBuffernewBufferFromVectornewBufferFromListnewBufferFromBS bufferMap2 bufferMap bufferUnmap withMapping2 withMapping uploadVectorcopyinvalidateBuffer explicitFlushTopology TexBuffer texBufferTexCube widthCubeTex2DMultisampleArraywidth2DMSArrayheight2DMSArray layers2DMSsamples2DMSArrayfixedSampleLocations2DMSArrayTex2DMultisample width2DMS height2DMS samples2DMSfixedSampleLocations2DMS Tex2DArray width2DArray height2DArraylayers2D Tex1DArray width1DArraylayers1DTex3Dwidth3Dheight3Ddepth3DTex2Dwidth2Dheight2DTex1Dwidth1DTextureSpecificationtopology imageFormat mipmapLevels TextureUnitTexture_TextureviewSpecification withBindingbindingQueryPointgetTopologyBindPointswithBindingByTopologywithTextureBinding $fOrdTexture $fEqTexture$fOpenGLResourceWord32Texture TextureTargetattachertexture Framebuffer_ AttachmentStencilAttachmentDepthAttachmentColorAttachment Framebuffer viewTargets dimensionsbindersetterScreenFramebuffer setBinding getDimensions$fOrdFramebuffer$fEqFramebuffer!$fOpenGLResourceWord32FramebufferfakeTextureStorage1DfakeTextureStorage2DfakeTextureStorage3D CompareModeCompareRefToTexture NoCompareWrappingRepeatClamp MagFilterMaLinear MaNearest MinFilterMiLinearMipmapLinearMiNearestMipmapLinearMiLinearMipmapNearestMiNearestMipmapNearestMiLinear MiNearestCubeSide NegativeZ PositiveZ NegativeX PositiveX NegativeY PositiveY Uploading fromBuffer bufferOffset toMipmapLevelspecificationType uploadFormatxOffsetyOffsetzOffsetuWidthuHeightuDepthcubeSide numColumnsnumRowspixelAlignment UploadFormatUSTENCIL_INDEXUDEPTH_COMPONENTUBGRAUBGRURGBAURGBURGURtextureSpecification viewWidth viewSize2D viewSize3D viewHeight viewDepthviewMipmapLevels newTexturegenerateMipmaps uploading1D uploading2D uploading3DuploadToTexturemaxMipmapLevels setMinFilter setMagFilter getMinFilter getMagFilter setWrappingsetCompareModegetCompareMode getWrapping setAnisotropy getAnisotropyClearing clearDepth clearStencil clearColorscreenFramebufferfrontTextureTargetmipmapTextureTargetlayerTextureTargetnewFramebuffergetMaximumDrawBuffersclearingclear ShaderStageGeometryFragmentVertex Pipeline_Pipeline resourcePLpipelineIdentifiershadersShader_CompiledShader viewStage identifier $fOrdPipeline $fEqPipeline$fOpenGLResourceWord32Pipeline $fOrdShader $fEqShader$fOpenGLResourceWord32Shader UniformableAttributeBindingsShaderLinkingErrorShaderCompilationErrorShaderBuildingErrorUniformLocation setUniform newShaderB newShaderBL newShader newPipelineVF newPipelinegetUniformLocation nopPipelineVAO_VAO boundBuffersvaoIndex$fOpenGLResourceWord32VAO$fOrdVAO$fEqVAOSourcingoffsetattributeIndex componentsstride normalizeintegerMappinginstancingDivisor sourceTypeSourceableType reifyType SourceTypeSDoubleSFloat SHalfFloatSInt32SInt16SInt8SWord32SWord16SWord8newVAOsourceTypeSizedefaultSourcingdefaultSourcingTypesourceVertexDataDrawT SourceDataPrimitivesWithIndices indexBuffer indexOffset indexType Primitives firstIndex DrawCommand primitiveType primitivesVAO numIndices sourceData DrawParamspipelinefragmentPassTestsblendingtargetFramebuffer bindTextures polygonOffsetprimitiveRestart IndexTypeable toIndexType IndexTypeIWord8IWord16IWord32 PrimitiveTrianglesAdjacencyTriangleStripAdjacencyLineStripAdjacencyLinesAdjacencyLineLoop LineStripLinesPoints TriangleFan TriangleStrip TrianglesdefaultDrawParams drawCommanddrawdrawR hoistDrawTrunDrawssetPrimitiveRestartsetTextureBindings setPipeline setBlendingsetPolygonOffsetsetTargetFramebufferparsevendorrendererversion getString versionStringglesshadingLanguageVersionString$fOrdOpenGLVersionbaseGHC.Showshow text-1.2.0.4Data.Text.InternalTextGHC.BaseString Data.IORefatomicModifyIORef'GHC.Real fromIntegral++GHC.Errerrorghc-primGHC.PrimseqGHC.Listfilterzip System.IOprint Data.Tuplefstsnd otherwisemap$ undefinedGHC.Num fromInteger- fromRationalGHC.EnumenumFrom enumFromThen enumFromToenumFromThenTo GHC.Classes==>=negatefail>>=>>fmapreturn Control.Arrowarrfirstapp|||loop realToFrac toInteger toRational Control.MonadguardliftMjoinControl.Applicative<*>pure AlternativeBoundedEnumEq GHC.FloatFloating FractionalIntegralMonadFunctorNumOrdGHC.ReadReal RealFloatRealFracShowData.Typeable.InternalTypeable MonadPlus Applicative Data.FoldableFoldableData.Traversable Traversable GHC.TypesBoolCharDoubleFloatIntGHC.IntInt8Int16Int32Int64 integer-gmpGHC.Integer.TypeIntegerOrderingRationalIOWordGHC.WordWord8Word16Word32Word64 Data.EitherEitherFalseTrueLeftRightLTEQGTShowSeitherfoldMapDefault fmapDefault mapAccumR mapAccumLforMforsequencemapM sequenceAtraversefindnotElemelem minimumByminimum maximumBymaximumproductsumallanyorand concatMapconcattoListmsumasum sequence_ sequenceA_forM_mapM_for_ traverse_foldlMfoldrMfoldl1foldr1foldl'foldlfoldr'foldrfoldMapfold Data.Unique hashUnique newUniqueUniqueoptionalliftA3liftA2liftA<**><**>manysome<|>emptygetConstConst unwrapMonad WrapMonad WrappedMonad unwrapArrow WrapArrow WrappedArrow getZipListZipListleftApp^<<<<^>>^^>>returnA&&&***secondArrow runKleisliKleisli zeroArrow ArrowZero<+> ArrowPlus+++rightleft ArrowChoice ArrowApply ArrowMonad ArrowLoop Data.Functor<$>Control.Category>>><<<.idCategoryPrelude$!readIOreadLn appendFile writeFilereadFileinteract getContentsgetLinegetCharputStrLnputStrputCharGHC.IO.ExceptionioError Data.ListunwordswordsunlineslinesatomicWriteIORefatomicModifyIORef modifyIORef' modifyIORef mkWeakIORef GHC.IORef writeIORef readIORefnewIORefIORefGHC.IOFilePath userErrorIOError Text.Readreadreads Data.MonoidmconcatmappendmemptyMonoidgetDualDualappEndoEndogetAllAllgetAnyAnygetSumSum getProductProduct Data.Typeablegcast2gcast1gcasteqTcast showsTypeReptypeOf7typeOf6typeOf5typeOf4typeOf3typeOf2typeOf1typeOftypeRep tyConString typeRepArgs typeRepTyConmkTyCon3mkAppTy funResultTy splitTyConAppmkFunTy mkTyConAppTypeRep tyConName tyConModule tyConPackageTyCon Typeable1 Typeable2 Typeable3 Typeable4 Typeable5 Typeable6 Typeable7 byteSwap64 byteSwap32 byteSwap16Data.Type.EqualityRefl:~: Data.ProxyProxylex readParenreadList readsPrecacoshatanhasinhcoshtanhsinhacosatanasincostansinlogBase**logsqrtexppiatan2isIEEEisNegativeZeroisDenormalized isInfiniteisNaN scaleFloat significandexponent encodeFloat decodeFloat floatRange floatDigits floatRadixlcmgcd^^^oddevendivModquotRemmoddivremquotrecip/floorceilingroundtruncateproperFractionmaxBoundminBoundfromEnumtoEnumpredsuccText.ParserCombinators.ReadPReadS showParen showStringshowCharshowsshowList showsPrecmfilterapliftM5liftM4liftM3liftM2unlesswhen replicateM_ replicateMfoldM_foldM zipWithM_zipWithM mapAndUnzipMvoidforever<=<>=>filterM=<<mplusmzerounzip3unzipzipWith3zipWithzip3!!lookupreversebreakspansplitAtdroptake dropWhile takeWhilecycle replicaterepeatiteratescanr1scanrscanl1scanllengthnullinitlasttailhead Data.MaybemapMaybe catMaybes listToMaybe maybeToList fromMaybefromJust isNothingisJustmaybeNothingJustMaybeuncurrycurrysubtractsignumabs*+asTypeOfuntilflipconst<$/=compare<=&&||not<>maxminsemigroups-0.16.1Data.Semigroup SemigroupdiffoptiontimesNcycle1times1psconcat<>getMinMingetMaxMaxgetFirstFirstgetLastLast unwrapMonoid WrapMonoid WrappedMonoid getOptionOption$fExceptionNoSupportgl-0.6.3Graphics.GL.Internal.Shared glGetIntegervGraphics.GL.Core32GL_TRIANGLE_STRIP_ADJACENCYGL_TRIANGLES_ADJACENCYGL_PROGRAM_POINT_SIZE"GL_MAX_GEOMETRY_UNIFORM_COMPONENTS'GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS#GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITSGL_MAX_GEOMETRY_OUTPUT_VERTICES!GL_MAX_GEOMETRY_OUTPUT_COMPONENTS GL_MAX_GEOMETRY_INPUT_COMPONENTSGL_LINE_STRIP_ADJACENCYGL_LINES_ADJACENCYGL_GEOMETRY_VERTICES_OUTGL_GEOMETRY_SHADERGL_GEOMETRY_OUTPUT_TYPEGL_GEOMETRY_INPUT_TYPE'GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS!GL_FRAMEBUFFER_ATTACHMENT_LAYEREDGL_CONTEXT_PROFILE_MASKGL_CONTEXT_CORE_PROFILE_BIT$GL_CONTEXT_COMPATIBILITY_PROFILE_BITglFramebufferTextureGL_VERTEX_ATTRIB_ARRAY_DIVISORGL_TIME_ELAPSED GL_TIMESTAMPGL_TEXTURE_SWIZZLE_RGBAGL_TEXTURE_SWIZZLE_RGL_TEXTURE_SWIZZLE_GGL_TEXTURE_SWIZZLE_BGL_TEXTURE_SWIZZLE_A GL_SRC1_COLORGL_SAMPLER_BINDING GL_RGB10_A2UIGL_ONE_MINUS_SRC1_COLORGL_ONE_MINUS_SRC1_ALPHAGL_MAX_DUAL_SOURCE_DRAW_BUFFERSGL_INT_2_10_10_10_REVGL_ANY_SAMPLES_PASSEDglVertexAttribP4uivglVertexAttribP4uiglVertexAttribP3uivglVertexAttribP3uiglVertexAttribP2uivglVertexAttribP2uiglVertexAttribP1uivglVertexAttribP1uiglVertexAttribDivisorglSamplerParameterivglSamplerParameteriglSamplerParameterfvglSamplerParameterfglSamplerParameterIuivglSamplerParameterIivglQueryCounter glIsSamplerglGetSamplerParameterivglGetSamplerParameterfvglGetSamplerParameterIuivglGetSamplerParameterIivglGetQueryObjectui64vglGetQueryObjecti64vglGetFragDataIndex glGenSamplersglDeleteSamplers glBindSamplerglBindFragDataLocationIndexedGL_ZEROGL_XOR GL_WRITE_ONLYGL_WAIT_FAILED GL_VIEWPORTGL_VERTEX_SHADERGL_VERTEX_PROGRAM_POINT_SIZEGL_VERTEX_ATTRIB_ARRAY_TYPEGL_VERTEX_ATTRIB_ARRAY_STRIDEGL_VERTEX_ATTRIB_ARRAY_SIZEGL_VERTEX_ATTRIB_ARRAY_POINTER!GL_VERTEX_ATTRIB_ARRAY_NORMALIZEDGL_VERTEX_ATTRIB_ARRAY_INTEGERGL_VERTEX_ATTRIB_ARRAY_ENABLED%GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDINGGL_VERTEX_ARRAY_BINDING GL_VERSION GL_VENDORGL_VALIDATE_STATUS GL_UPPER_LEFTGL_UNSIGNED_SHORT_5_6_5_REVGL_UNSIGNED_SHORT_5_6_5GL_UNSIGNED_SHORT_5_5_5_1GL_UNSIGNED_SHORT_4_4_4_4_REVGL_UNSIGNED_SHORT_4_4_4_4GL_UNSIGNED_SHORT_1_5_5_5_REVGL_UNSIGNED_SHORTGL_UNSIGNED_NORMALIZEDGL_UNSIGNED_INT_VEC4GL_UNSIGNED_INT_VEC3GL_UNSIGNED_INT_VEC2GL_UNSIGNED_INT_SAMPLER_CUBEGL_UNSIGNED_INT_SAMPLER_BUFFERGL_UNSIGNED_INT_SAMPLER_3DGL_UNSIGNED_INT_SAMPLER_2D_RECT,GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY&GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE GL_UNSIGNED_INT_SAMPLER_2D_ARRAYGL_UNSIGNED_INT_SAMPLER_2D GL_UNSIGNED_INT_SAMPLER_1D_ARRAYGL_UNSIGNED_INT_SAMPLER_1DGL_UNSIGNED_INT_8_8_8_8_REVGL_UNSIGNED_INT_8_8_8_8GL_UNSIGNED_INT_5_9_9_9_REVGL_UNSIGNED_INT_2_10_10_10_REVGL_UNSIGNED_INT_24_8GL_UNSIGNED_INT_10_10_10_2GL_UNSIGNED_INT_10F_11F_11F_REVGL_UNSIGNED_INTGL_UNSIGNED_BYTE_3_3_2GL_UNSIGNED_BYTE_2_3_3_REVGL_UNSIGNED_BYTE GL_UNSIGNALEDGL_UNPACK_SWAP_BYTESGL_UNPACK_SKIP_ROWSGL_UNPACK_SKIP_PIXELSGL_UNPACK_SKIP_IMAGESGL_UNPACK_ROW_LENGTHGL_UNPACK_LSB_FIRSTGL_UNPACK_IMAGE_HEIGHTGL_UNPACK_ALIGNMENTGL_UNIFORM_TYPEGL_UNIFORM_SIZEGL_UNIFORM_OFFSETGL_UNIFORM_NAME_LENGTHGL_UNIFORM_MATRIX_STRIDEGL_UNIFORM_IS_ROW_MAJORGL_UNIFORM_BUFFER_STARTGL_UNIFORM_BUFFER_SIZE"GL_UNIFORM_BUFFER_OFFSET_ALIGNMENTGL_UNIFORM_BUFFER_BINDINGGL_UNIFORM_BUFFER,GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER.GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER.GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADERGL_UNIFORM_BLOCK_NAME_LENGTHGL_UNIFORM_BLOCK_INDEXGL_UNIFORM_BLOCK_DATA_SIZEGL_UNIFORM_BLOCK_BINDING'GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES GL_UNIFORM_BLOCK_ACTIVE_UNIFORMSGL_UNIFORM_ARRAY_STRIDEGL_TRUEGL_TRIANGLE_STRIPGL_TRIANGLE_FAN GL_TRIANGLES(GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTHGL_TRANSFORM_FEEDBACK_VARYINGS(GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN"GL_TRANSFORM_FEEDBACK_BUFFER_START!GL_TRANSFORM_FEEDBACK_BUFFER_SIZE!GL_TRANSFORM_FEEDBACK_BUFFER_MODE$GL_TRANSFORM_FEEDBACK_BUFFER_BINDINGGL_TRANSFORM_FEEDBACK_BUFFERGL_TIMEOUT_IGNOREDGL_TIMEOUT_EXPIREDGL_TEXTURE_WRAP_TGL_TEXTURE_WRAP_SGL_TEXTURE_WRAP_RGL_TEXTURE_WIDTHGL_TEXTURE_STENCIL_SIZEGL_TEXTURE_SHARED_SIZEGL_TEXTURE_SAMPLESGL_TEXTURE_RED_TYPEGL_TEXTURE_RED_SIZEGL_TEXTURE_RECTANGLEGL_TEXTURE_MIN_LODGL_TEXTURE_MIN_FILTERGL_TEXTURE_MAX_LODGL_TEXTURE_MAX_LEVELGL_TEXTURE_MAG_FILTERGL_TEXTURE_LOD_BIASGL_TEXTURE_INTERNAL_FORMATGL_TEXTURE_HEIGHTGL_TEXTURE_GREEN_TYPEGL_TEXTURE_GREEN_SIZE!GL_TEXTURE_FIXED_SAMPLE_LOCATIONSGL_TEXTURE_DEPTH_TYPEGL_TEXTURE_DEPTH_SIZEGL_TEXTURE_DEPTHGL_TEXTURE_CUBE_MAP_SEAMLESSGL_TEXTURE_CUBE_MAP_POSITIVE_ZGL_TEXTURE_CUBE_MAP_POSITIVE_YGL_TEXTURE_CUBE_MAP_POSITIVE_XGL_TEXTURE_CUBE_MAP_NEGATIVE_ZGL_TEXTURE_CUBE_MAP_NEGATIVE_YGL_TEXTURE_CUBE_MAP_NEGATIVE_XGL_TEXTURE_CUBE_MAPGL_TEXTURE_COMPRESSION_HINT GL_TEXTURE_COMPRESSED_IMAGE_SIZEGL_TEXTURE_COMPRESSEDGL_TEXTURE_COMPARE_MODEGL_TEXTURE_COMPARE_FUNC$GL_TEXTURE_BUFFER_DATA_STORE_BINDINGGL_TEXTURE_BUFFERGL_TEXTURE_BORDER_COLORGL_TEXTURE_BLUE_TYPEGL_TEXTURE_BLUE_SIZEGL_TEXTURE_BINDING_RECTANGLEGL_TEXTURE_BINDING_CUBE_MAPGL_TEXTURE_BINDING_BUFFERGL_TEXTURE_BINDING_3D'GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY!GL_TEXTURE_BINDING_2D_MULTISAMPLEGL_TEXTURE_BINDING_2D_ARRAYGL_TEXTURE_BINDING_2DGL_TEXTURE_BINDING_1D_ARRAYGL_TEXTURE_BINDING_1DGL_TEXTURE_BASE_LEVELGL_TEXTURE_ALPHA_TYPEGL_TEXTURE_ALPHA_SIZE GL_TEXTURE_3DGL_TEXTURE_2D_MULTISAMPLE_ARRAYGL_TEXTURE_2D_MULTISAMPLEGL_TEXTURE_2D_ARRAY GL_TEXTURE_2DGL_TEXTURE_1D_ARRAY GL_TEXTURE_1D GL_TEXTURE9 GL_TEXTURE8 GL_TEXTURE7 GL_TEXTURE6 GL_TEXTURE5 GL_TEXTURE4 GL_TEXTURE31 GL_TEXTURE30 GL_TEXTURE3 GL_TEXTURE29 GL_TEXTURE28 GL_TEXTURE27 GL_TEXTURE26 GL_TEXTURE25 GL_TEXTURE24 GL_TEXTURE23 GL_TEXTURE22 GL_TEXTURE21 GL_TEXTURE20 GL_TEXTURE2 GL_TEXTURE19 GL_TEXTURE18 GL_TEXTURE17 GL_TEXTURE16 GL_TEXTURE15 GL_TEXTURE14 GL_TEXTURE13 GL_TEXTURE12 GL_TEXTURE11 GL_TEXTURE10 GL_TEXTURE1 GL_TEXTURE0 GL_TEXTUREGL_SYNC_STATUSGL_SYNC_GPU_COMMANDS_COMPLETEGL_SYNC_FLUSH_COMMANDS_BIT GL_SYNC_FLAGS GL_SYNC_FENCEGL_SYNC_CONDITIONGL_SUBPIXEL_BITSGL_STREAM_READGL_STREAM_DRAWGL_STREAM_COPY GL_STEREOGL_STENCIL_WRITEMASKGL_STENCIL_VALUE_MASKGL_STENCIL_TESTGL_STENCIL_REFGL_STENCIL_PASS_DEPTH_PASSGL_STENCIL_PASS_DEPTH_FAILGL_STENCIL_INDEX8GL_STENCIL_INDEX4GL_STENCIL_INDEX16GL_STENCIL_INDEX1GL_STENCIL_INDEXGL_STENCIL_FUNCGL_STENCIL_FAILGL_STENCIL_CLEAR_VALUEGL_STENCIL_BUFFER_BITGL_STENCIL_BACK_WRITEMASKGL_STENCIL_BACK_VALUE_MASKGL_STENCIL_BACK_REFGL_STENCIL_BACK_PASS_DEPTH_PASSGL_STENCIL_BACK_PASS_DEPTH_FAILGL_STENCIL_BACK_FUNCGL_STENCIL_BACK_FAILGL_STENCIL_ATTACHMENT GL_STENCILGL_STATIC_READGL_STATIC_DRAWGL_STATIC_COPY GL_SRGB_ALPHAGL_SRGB8_ALPHA8GL_SRGB8GL_SRGB GL_SRC_COLORGL_SRC_ALPHA_SATURATE GL_SRC_ALPHA GL_SRC1_ALPHAGL_SMOOTH_POINT_SIZE_RANGE GL_SMOOTH_POINT_SIZE_GRANULARITYGL_SMOOTH_LINE_WIDTH_RANGE GL_SMOOTH_LINE_WIDTH_GRANULARITYGL_SIGNED_NORMALIZED GL_SIGNALEDGL_SHORTGL_SHADING_LANGUAGE_VERSIONGL_SHADER_TYPEGL_SHADER_SOURCE_LENGTHGL_SETGL_SEPARATE_ATTRIBSGL_SCISSOR_TESTGL_SCISSOR_BOXGL_SAMPLE_POSITIONGL_SAMPLE_MASK_VALUEGL_SAMPLE_MASKGL_SAMPLE_COVERAGE_VALUEGL_SAMPLE_COVERAGE_INVERTGL_SAMPLE_COVERAGEGL_SAMPLE_BUFFERSGL_SAMPLE_ALPHA_TO_ONEGL_SAMPLE_ALPHA_TO_COVERAGEGL_SAMPLES_PASSED GL_SAMPLESGL_SAMPLER_CUBE_SHADOWGL_SAMPLER_CUBEGL_SAMPLER_BUFFER GL_SAMPLER_3DGL_SAMPLER_2D_SHADOWGL_SAMPLER_2D_RECT_SHADOWGL_SAMPLER_2D_RECTGL_SAMPLER_2D_MULTISAMPLE_ARRAYGL_SAMPLER_2D_MULTISAMPLEGL_SAMPLER_2D_ARRAY_SHADOWGL_SAMPLER_2D_ARRAY GL_SAMPLER_2DGL_SAMPLER_1D_SHADOWGL_SAMPLER_1D_ARRAY_SHADOWGL_SAMPLER_1D_ARRAY GL_SAMPLER_1DGL_RIGHT GL_RG_INTEGERGL_RGB_INTEGERGL_RGBA_INTEGERGL_RGBA8_SNORM GL_RGBA8UI GL_RGBA8IGL_RGBA8GL_RGBA4 GL_RGBA32UI GL_RGBA32I GL_RGBA32FGL_RGBA2GL_RGBA16_SNORM GL_RGBA16UI GL_RGBA16I GL_RGBA16F GL_RGBA16 GL_RGBA12GL_RGBA GL_RGB9_E5 GL_RGB8_SNORM GL_RGB8UIGL_RGB8IGL_RGB8 GL_RGB5_A1GL_RGB5GL_RGB4 GL_RGB32UI GL_RGB32I GL_RGB32FGL_RGB16_SNORM GL_RGB16UI GL_RGB16I GL_RGB16FGL_RGB16GL_RGB12 GL_RGB10_A2GL_RGB10GL_RGB GL_RG8_SNORMGL_RG8UIGL_RG8IGL_RG8 GL_RG32UIGL_RG32IGL_RG32F GL_RG16_SNORM GL_RG16UIGL_RG16IGL_RG16FGL_RG16GL_RG GL_REPLACE GL_REPEAT GL_RENDERERGL_RENDERBUFFER_WIDTHGL_RENDERBUFFER_STENCIL_SIZEGL_RENDERBUFFER_SAMPLESGL_RENDERBUFFER_RED_SIZEGL_RENDERBUFFER_INTERNAL_FORMATGL_RENDERBUFFER_HEIGHTGL_RENDERBUFFER_GREEN_SIZEGL_RENDERBUFFER_DEPTH_SIZEGL_RENDERBUFFER_BLUE_SIZEGL_RENDERBUFFER_BINDINGGL_RENDERBUFFER_ALPHA_SIZEGL_RENDERBUFFERGL_RED_INTEGERGL_RED GL_READ_WRITE GL_READ_ONLYGL_READ_FRAMEBUFFER_BINDINGGL_READ_FRAMEBUFFERGL_READ_BUFFERGL_RASTERIZER_DISCARD GL_R8_SNORMGL_R8UIGL_R8IGL_R8 GL_R3_G3_B2GL_R32UIGL_R32IGL_R32F GL_R16_SNORMGL_R16UIGL_R16IGL_R16FGL_R16GL_R11F_G11F_B10F GL_QUERY_WAITGL_QUERY_RESULT_AVAILABLEGL_QUERY_RESULTGL_QUERY_NO_WAITGL_QUERY_COUNTER_BITSGL_QUERY_BY_REGION_WAITGL_QUERY_BY_REGION_NO_WAIT+GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTIONGL_PROXY_TEXTURE_RECTANGLEGL_PROXY_TEXTURE_CUBE_MAPGL_PROXY_TEXTURE_3D%GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAYGL_PROXY_TEXTURE_2D_MULTISAMPLEGL_PROXY_TEXTURE_2D_ARRAYGL_PROXY_TEXTURE_2DGL_PROXY_TEXTURE_1D_ARRAYGL_PROXY_TEXTURE_1DGL_PROVOKING_VERTEXGL_PRIMITIVE_RESTART_INDEXGL_PRIMITIVE_RESTARTGL_PRIMITIVES_GENERATEDGL_POLYGON_SMOOTH_HINTGL_POLYGON_SMOOTHGL_POLYGON_OFFSET_UNITSGL_POLYGON_OFFSET_POINTGL_POLYGON_OFFSET_LINEGL_POLYGON_OFFSET_FILLGL_POLYGON_OFFSET_FACTORGL_POLYGON_MODEGL_POINT_SPRITE_COORD_ORIGINGL_POINT_SIZE_RANGEGL_POINT_SIZE_GRANULARITY GL_POINT_SIZEGL_POINT_FADE_THRESHOLD_SIZE GL_POINTSGL_POINTGL_PIXEL_UNPACK_BUFFER_BINDINGGL_PIXEL_UNPACK_BUFFERGL_PIXEL_PACK_BUFFER_BINDINGGL_PIXEL_PACK_BUFFERGL_PACK_SWAP_BYTESGL_PACK_SKIP_ROWSGL_PACK_SKIP_PIXELSGL_PACK_SKIP_IMAGESGL_PACK_ROW_LENGTHGL_PACK_LSB_FIRSTGL_PACK_IMAGE_HEIGHTGL_PACK_ALIGNMENTGL_OUT_OF_MEMORY GL_OR_REVERSEGL_OR_INVERTEDGL_ORGL_ONE_MINUS_SRC_COLORGL_ONE_MINUS_SRC_ALPHAGL_ONE_MINUS_DST_COLORGL_ONE_MINUS_DST_ALPHAGL_ONE_MINUS_CONSTANT_COLORGL_ONE_MINUS_CONSTANT_ALPHAGL_ONEGL_OBJECT_TYPEGL_NUM_EXTENSIONS!GL_NUM_COMPRESSED_TEXTURE_FORMATS GL_NO_ERROR GL_NOTEQUALGL_NORGL_NOOPGL_NONE GL_NICESTGL_NEVERGL_NEAREST_MIPMAP_NEARESTGL_NEAREST_MIPMAP_LINEAR GL_NEARESTGL_NANDGL_MULTISAMPLEGL_MIRRORED_REPEATGL_MIN_PROGRAM_TEXEL_OFFSETGL_MINOR_VERSIONGL_MINGL_MAX_VIEWPORT_DIMS GL_MAX_VERTEX_UNIFORM_COMPONENTSGL_MAX_VERTEX_UNIFORM_BLOCKS!GL_MAX_VERTEX_TEXTURE_IMAGE_UNITSGL_MAX_VERTEX_OUTPUT_COMPONENTSGL_MAX_VERTEX_ATTRIBSGL_MAX_VARYING_FLOATSGL_MAX_VARYING_COMPONENTSGL_MAX_UNIFORM_BUFFER_BINDINGSGL_MAX_UNIFORM_BLOCK_SIZE-GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS*GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS0GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTSGL_MAX_TEXTURE_SIZEGL_MAX_TEXTURE_LOD_BIASGL_MAX_TEXTURE_IMAGE_UNITSGL_MAX_TEXTURE_BUFFER_SIZEGL_MAX_SERVER_WAIT_TIMEOUTGL_MAX_SAMPLE_MASK_WORDSGL_MAX_SAMPLESGL_MAX_RENDERBUFFER_SIZEGL_MAX_RECTANGLE_TEXTURE_SIZEGL_MAX_PROGRAM_TEXEL_OFFSETGL_MAX_INTEGER_SAMPLESGL_MAX_GEOMETRY_UNIFORM_BLOCKS"GL_MAX_FRAGMENT_UNIFORM_COMPONENTSGL_MAX_FRAGMENT_UNIFORM_BLOCKS GL_MAX_FRAGMENT_INPUT_COMPONENTSGL_MAX_ELEMENTS_VERTICESGL_MAX_ELEMENTS_INDICESGL_MAX_DRAW_BUFFERSGL_MAX_DEPTH_TEXTURE_SAMPLESGL_MAX_CUBE_MAP_TEXTURE_SIZE)GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTSGL_MAX_COMBINED_UNIFORM_BLOCKS#GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS+GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS+GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTSGL_MAX_COLOR_TEXTURE_SAMPLESGL_MAX_COLOR_ATTACHMENTSGL_MAX_CLIP_DISTANCESGL_MAX_ARRAY_TEXTURE_LAYERSGL_MAX_3D_TEXTURE_SIZEGL_MAXGL_MAP_WRITE_BITGL_MAP_UNSYNCHRONIZED_BITGL_MAP_READ_BITGL_MAP_INVALIDATE_RANGE_BITGL_MAP_INVALIDATE_BUFFER_BITGL_MAP_FLUSH_EXPLICIT_BITGL_MAJOR_VERSION GL_LOWER_LEFTGL_LOGIC_OP_MODEGL_LINK_STATUSGL_LINE_WIDTH_RANGEGL_LINE_WIDTH_GRANULARITY GL_LINE_WIDTH GL_LINE_STRIPGL_LINE_SMOOTH_HINTGL_LINE_SMOOTH GL_LINE_LOOPGL_LINESGL_LINEAR_MIPMAP_NEARESTGL_LINEAR_MIPMAP_LINEAR GL_LINEARGL_LINEGL_LESS GL_LEQUALGL_LEFTGL_LAST_VERTEX_CONVENTIONGL_KEEP GL_INVERTGL_INVALID_VALUEGL_INVALID_OPERATIONGL_INVALID_INDEX GL_INVALID_FRAMEBUFFER_OPERATIONGL_INVALID_ENUM GL_INT_VEC4 GL_INT_VEC3 GL_INT_VEC2GL_INT_SAMPLER_CUBEGL_INT_SAMPLER_BUFFERGL_INT_SAMPLER_3DGL_INT_SAMPLER_2D_RECT#GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAYGL_INT_SAMPLER_2D_MULTISAMPLEGL_INT_SAMPLER_2D_ARRAYGL_INT_SAMPLER_2DGL_INT_SAMPLER_1D_ARRAYGL_INT_SAMPLER_1DGL_INTERLEAVED_ATTRIBSGL_INTGL_INFO_LOG_LENGTHGL_INDEX GL_INCR_WRAPGL_INCR GL_HALF_FLOATGL_GREEN_INTEGERGL_GREEN GL_GREATER GL_GEQUALGL_FUNC_SUBTRACTGL_FUNC_REVERSE_SUBTRACT GL_FUNC_ADDGL_FRONT_RIGHT GL_FRONT_LEFT GL_FRONT_FACEGL_FRONT_AND_BACKGL_FRONTGL_FRAMEBUFFER_UNSUPPORTEDGL_FRAMEBUFFER_UNDEFINEDGL_FRAMEBUFFER_SRGB%GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER%GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE,GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT%GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER$GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENTGL_FRAMEBUFFER_DEFAULTGL_FRAMEBUFFER_COMPLETEGL_FRAMEBUFFER_BINDING'GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL'GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER/GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE&GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE"GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE%GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE%GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME$GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE$GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE(GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE(GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING#GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE$GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZEGL_FRAMEBUFFER"GL_FRAGMENT_SHADER_DERIVATIVE_HINTGL_FRAGMENT_SHADER GL_FLOAT_VEC4 GL_FLOAT_VEC3 GL_FLOAT_VEC2GL_FLOAT_MAT4x3GL_FLOAT_MAT4x2 GL_FLOAT_MAT4GL_FLOAT_MAT3x4GL_FLOAT_MAT3x2 GL_FLOAT_MAT3GL_FLOAT_MAT2x4GL_FLOAT_MAT2x3 GL_FLOAT_MAT2!GL_FLOAT_32_UNSIGNED_INT_24_8_REVGL_FLOAT GL_FIXED_ONLYGL_FIRST_VERTEX_CONVENTIONGL_FILL GL_FASTESTGL_FALSE GL_EXTENSIONSGL_EQUIVGL_EQUALGL_ELEMENT_ARRAY_BUFFER_BINDINGGL_ELEMENT_ARRAY_BUFFERGL_DYNAMIC_READGL_DYNAMIC_DRAWGL_DYNAMIC_COPY GL_DST_COLOR GL_DST_ALPHAGL_DRAW_FRAMEBUFFER_BINDINGGL_DRAW_FRAMEBUFFERGL_DRAW_BUFFER9GL_DRAW_BUFFER8GL_DRAW_BUFFER7GL_DRAW_BUFFER6GL_DRAW_BUFFER5GL_DRAW_BUFFER4GL_DRAW_BUFFER3GL_DRAW_BUFFER2GL_DRAW_BUFFER15GL_DRAW_BUFFER14GL_DRAW_BUFFER13GL_DRAW_BUFFER12GL_DRAW_BUFFER11GL_DRAW_BUFFER10GL_DRAW_BUFFER1GL_DRAW_BUFFER0GL_DRAW_BUFFERGL_DOUBLEBUFFER GL_DOUBLE GL_DONT_CARE GL_DITHERGL_DEPTH_WRITEMASK GL_DEPTH_TESTGL_DEPTH_STENCIL_ATTACHMENTGL_DEPTH_STENCILGL_DEPTH_RANGE GL_DEPTH_FUNCGL_DEPTH_COMPONENT32FGL_DEPTH_COMPONENT32GL_DEPTH_COMPONENT24GL_DEPTH_COMPONENT16GL_DEPTH_COMPONENTGL_DEPTH_CLEAR_VALUEGL_DEPTH_CLAMPGL_DEPTH_BUFFER_BITGL_DEPTH_ATTACHMENTGL_DEPTH32F_STENCIL8GL_DEPTH24_STENCIL8GL_DEPTHGL_DELETE_STATUS GL_DECR_WRAPGL_DECRGL_CWGL_CURRENT_VERTEX_ATTRIBGL_CURRENT_QUERYGL_CURRENT_PROGRAMGL_CULL_FACE_MODE GL_CULL_FACEGL_COPY_WRITE_BUFFERGL_COPY_READ_BUFFERGL_COPY_INVERTEDGL_COPY&GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BITGL_CONTEXT_FLAGSGL_CONSTANT_COLORGL_CONSTANT_ALPHAGL_CONDITION_SATISFIEDGL_COMPRESSED_TEXTURE_FORMATSGL_COMPRESSED_SRGB_ALPHAGL_COMPRESSED_SRGBGL_COMPRESSED_SIGNED_RG_RGTC2GL_COMPRESSED_SIGNED_RED_RGTC1GL_COMPRESSED_RG_RGTC2GL_COMPRESSED_RGBAGL_COMPRESSED_RGBGL_COMPRESSED_RGGL_COMPRESSED_RED_RGTC1GL_COMPRESSED_REDGL_COMPILE_STATUSGL_COMPARE_REF_TO_TEXTUREGL_COLOR_WRITEMASKGL_COLOR_LOGIC_OPGL_COLOR_CLEAR_VALUEGL_COLOR_BUFFER_BITGL_COLOR_ATTACHMENT9GL_COLOR_ATTACHMENT8GL_COLOR_ATTACHMENT7GL_COLOR_ATTACHMENT6GL_COLOR_ATTACHMENT5GL_COLOR_ATTACHMENT4GL_COLOR_ATTACHMENT3GL_COLOR_ATTACHMENT2GL_COLOR_ATTACHMENT15GL_COLOR_ATTACHMENT14GL_COLOR_ATTACHMENT13GL_COLOR_ATTACHMENT12GL_COLOR_ATTACHMENT11GL_COLOR_ATTACHMENT10GL_COLOR_ATTACHMENT1GL_COLOR_ATTACHMENT0GL_COLORGL_CLIP_DISTANCE7GL_CLIP_DISTANCE6GL_CLIP_DISTANCE5GL_CLIP_DISTANCE4GL_CLIP_DISTANCE3GL_CLIP_DISTANCE2GL_CLIP_DISTANCE1GL_CLIP_DISTANCE0GL_CLEARGL_CLAMP_TO_EDGEGL_CLAMP_TO_BORDERGL_CLAMP_READ_COLORGL_CCWGL_BYTEGL_BUFFER_USAGEGL_BUFFER_SIZEGL_BUFFER_MAP_POINTERGL_BUFFER_MAP_OFFSETGL_BUFFER_MAP_LENGTHGL_BUFFER_MAPPEDGL_BUFFER_ACCESS_FLAGSGL_BUFFER_ACCESS GL_BOOL_VEC4 GL_BOOL_VEC3 GL_BOOL_VEC2GL_BOOLGL_BLUE_INTEGERGL_BLUEGL_BLEND_SRC_RGBGL_BLEND_SRC_ALPHA GL_BLEND_SRCGL_BLEND_EQUATION_RGBGL_BLEND_EQUATION_ALPHAGL_BLEND_DST_RGBGL_BLEND_DST_ALPHA GL_BLEND_DSTGL_BLEND_COLORGL_BLENDGL_BGR_INTEGERGL_BGRA_INTEGERGL_BGRAGL_BGR GL_BACK_RIGHT GL_BACK_LEFTGL_BACKGL_ATTACHED_SHADERSGL_ARRAY_BUFFER_BINDINGGL_ARRAY_BUFFERGL_AND_REVERSEGL_AND_INVERTEDGL_AND GL_ALWAYSGL_ALREADY_SIGNALEDGL_ALPHAGL_ALIASED_LINE_WIDTH_RANGEGL_ACTIVE_UNIFORM_MAX_LENGTH'GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTHGL_ACTIVE_UNIFORM_BLOCKSGL_ACTIVE_UNIFORMSGL_ACTIVE_TEXTUREGL_ACTIVE_ATTRIBUTE_MAX_LENGTHGL_ACTIVE_ATTRIBUTES glWaitSync glViewportglVertexAttribPointerglVertexAttribIPointerglVertexAttribI4usvglVertexAttribI4uivglVertexAttribI4uiglVertexAttribI4ubvglVertexAttribI4svglVertexAttribI4ivglVertexAttribI4iglVertexAttribI4bvglVertexAttribI3uivglVertexAttribI3uiglVertexAttribI3ivglVertexAttribI3iglVertexAttribI2uivglVertexAttribI2uiglVertexAttribI2ivglVertexAttribI2iglVertexAttribI1uivglVertexAttribI1uiglVertexAttribI1ivglVertexAttribI1iglVertexAttrib4usvglVertexAttrib4uivglVertexAttrib4ubvglVertexAttrib4svglVertexAttrib4sglVertexAttrib4ivglVertexAttrib4fvglVertexAttrib4fglVertexAttrib4dvglVertexAttrib4dglVertexAttrib4bvglVertexAttrib4NusvglVertexAttrib4NuivglVertexAttrib4NubvglVertexAttrib4NubglVertexAttrib4NsvglVertexAttrib4NivglVertexAttrib4NbvglVertexAttrib3svglVertexAttrib3sglVertexAttrib3fvglVertexAttrib3fglVertexAttrib3dvglVertexAttrib3dglVertexAttrib2svglVertexAttrib2sglVertexAttrib2fvglVertexAttrib2fglVertexAttrib2dvglVertexAttrib2dglVertexAttrib1svglVertexAttrib1sglVertexAttrib1fvglVertexAttrib1fglVertexAttrib1dvglVertexAttrib1dglValidateProgram glUseProgram glUnmapBufferglUniformMatrix4x3fvglUniformMatrix4x2fvglUniformMatrix4fvglUniformMatrix3x4fvglUniformMatrix3x2fvglUniformMatrix3fvglUniformMatrix2x4fvglUniformMatrix2x3fvglUniformMatrix2fvglUniformBlockBinding glUniform4uiv glUniform4ui glUniform4iv glUniform4i glUniform4fv glUniform4f glUniform3uiv glUniform3ui glUniform3iv glUniform3i glUniform3fv glUniform3f glUniform2uiv glUniform2ui glUniform2iv glUniform2i glUniform2fv glUniform2f glUniform1uiv glUniform1ui glUniform1iv glUniform1i glUniform1fv glUniform1fglTransformFeedbackVaryingsglTexSubImage3DglTexSubImage2DglTexSubImage1DglTexParameterivglTexParameteriglTexParameterfvglTexParameterfglTexParameterIuivglTexParameterIivglTexImage3DMultisample glTexImage3DglTexImage2DMultisample glTexImage2D glTexImage1D glTexBufferglStencilOpSeparate glStencilOpglStencilMaskSeparate glStencilMaskglStencilFuncSeparate glStencilFuncglShaderSource glScissor glSampleMaskiglSampleCoverage glRenderbufferStorageMultisampleglRenderbufferStorage glReadPixels glReadBufferglProvokingVertexglPrimitiveRestartIndexglPolygonOffset glPolygonMode glPointSizeglPointParameterivglPointParameteriglPointParameterfvglPointParameterf glPixelStorei glPixelStorefglMultiDrawElementsBaseVertexglMultiDrawElementsglMultiDrawArraysglMapBufferRange glMapBuffer glLogicOp glLinkProgram glLineWidthglIsVertexArray glIsTextureglIsSync glIsShaderglIsRenderbuffer glIsQuery glIsProgramglIsFramebuffer glIsEnabledi glIsEnabled glIsBufferglHintglGetVertexAttribivglGetVertexAttribfvglGetVertexAttribdvglGetVertexAttribPointervglGetVertexAttribIuivglGetVertexAttribIivglGetUniformuivglGetUniformivglGetUniformfvglGetUniformLocationglGetUniformIndicesglGetUniformBlockIndexglGetTransformFeedbackVaryingglGetTexParameterivglGetTexParameterfvglGetTexParameterIuivglGetTexParameterIivglGetTexLevelParameterivglGetTexLevelParameterfv glGetTexImage glGetSynciv glGetStringi glGetString glGetShaderivglGetShaderSourceglGetShaderInfoLogglGetRenderbufferParameteriv glGetQueryivglGetQueryObjectuivglGetQueryObjectivglGetProgramivglGetProgramInfoLogglGetMultisamplefvglGetIntegeri_vglGetInteger64vglGetInteger64i_v%glGetFramebufferAttachmentParameterivglGetFragDataLocation glGetFloatv glGetError glGetDoublevglGetCompressedTexImageglGetBufferSubDataglGetBufferPointervglGetBufferParameterivglGetBufferParameteri64v glGetBooleanvglGetBooleani_vglGetAttribLocationglGetAttachedShadersglGetActiveUniformsivglGetActiveUniformNameglGetActiveUniformBlockivglGetActiveUniformBlockNameglGetActiveUniformglGetActiveAttribglGenerateMipmapglGenVertexArrays glGenTexturesglGenRenderbuffers glGenQueriesglGenFramebuffers glGenBuffers glFrontFaceglFramebufferTextureLayerglFramebufferTexture3DglFramebufferTexture2DglFramebufferTexture1DglFramebufferRenderbufferglFlushMappedBufferRangeglFlushglFinish glFenceSyncglEndTransformFeedback glEndQueryglEndConditionalRender glEnableiglEnableVertexAttribArrayglEnableglDrawRangeElementsBaseVertexglDrawRangeElements!glDrawElementsInstancedBaseVertexglDrawElementsInstancedglDrawElementsBaseVertexglDrawElements glDrawBuffers glDrawBufferglDrawArraysInstanced glDrawArrays glDisableiglDisableVertexAttribArray glDisableglDetachShader glDepthRange glDepthMask glDepthFuncglDeleteVertexArraysglDeleteTextures glDeleteSyncglDeleteShaderglDeleteRenderbuffersglDeleteQueriesglDeleteProgramglDeleteFramebuffersglDeleteBuffers glCullFaceglCreateShaderglCreateProgramglCopyTexSubImage3DglCopyTexSubImage2DglCopyTexSubImage1DglCopyTexImage2DglCopyTexImage1DglCopyBufferSubDataglCompressedTexSubImage3DglCompressedTexSubImage2DglCompressedTexSubImage1DglCompressedTexImage3DglCompressedTexImage2DglCompressedTexImage1DglCompileShader glColorMaski glColorMaskglClientWaitSyncglClearStencil glClearDepth glClearColorglClearBufferuivglClearBufferivglClearBufferfvglClearBufferfiglClear glClampColorglCheckFramebufferStatusglBufferSubData glBufferDataglBlitFramebufferglBlendFuncSeparate glBlendFuncglBlendEquationSeparateglBlendEquation glBlendColorglBindVertexArray glBindTextureglBindRenderbufferglBindFramebufferglBindFragDataLocationglBindBufferRangeglBindBufferBase glBindBufferglBindAttribLocationglBeginTransformFeedback glBeginQueryglBeginConditionalRenderglAttachShaderglActiveTexture GL_ZOOM_Y GL_ZOOM_XGL_WEIGHT_ARRAY_BUFFER_BINDINGGL_VIEWPORT_BITGL_VERTEX_PROGRAM_TWO_SIDEGL_VERTEX_ARRAY_TYPEGL_VERTEX_ARRAY_STRIDEGL_VERTEX_ARRAY_SIZEGL_VERTEX_ARRAY_POINTERGL_VERTEX_ARRAY_BUFFER_BINDINGGL_VERTEX_ARRAYGL_V3FGL_V2FGL_TRANSPOSE_TEXTURE_MATRIXGL_TRANSPOSE_PROJECTION_MATRIXGL_TRANSPOSE_MODELVIEW_MATRIXGL_TRANSPOSE_COLOR_MATRIXGL_TRANSFORM_BITGL_TEXTURE_STACK_DEPTHGL_TEXTURE_RESIDENTGL_TEXTURE_PRIORITYGL_TEXTURE_MATRIXGL_TEXTURE_LUMINANCE_SIZEGL_TEXTURE_INTENSITY_SIZEGL_TEXTURE_GEN_TGL_TEXTURE_GEN_SGL_TEXTURE_GEN_RGL_TEXTURE_GEN_QGL_TEXTURE_GEN_MODEGL_TEXTURE_FILTER_CONTROLGL_TEXTURE_ENV_MODEGL_TEXTURE_ENV_COLORGL_TEXTURE_ENVGL_TEXTURE_COORD_ARRAY_TYPEGL_TEXTURE_COORD_ARRAY_STRIDEGL_TEXTURE_COORD_ARRAY_SIZEGL_TEXTURE_COORD_ARRAY_POINTER%GL_TEXTURE_COORD_ARRAY_BUFFER_BINDINGGL_TEXTURE_COORD_ARRAYGL_TEXTURE_COMPONENTSGL_TEXTURE_BORDERGL_TEXTURE_BIT GL_T4F_V4FGL_T4F_C4F_N3F_V4F GL_T2F_V3FGL_T2F_N3F_V3FGL_T2F_C4UB_V3FGL_T2F_C4F_N3F_V3FGL_T2F_C3F_V3FGL_T GL_SUBTRACTGL_STENCIL_BITSGL_STACK_UNDERFLOWGL_STACK_OVERFLOW GL_SRC2_RGB GL_SRC2_ALPHA GL_SRC1_RGB GL_SRC0_RGB GL_SRC0_ALPHAGL_SPOT_EXPONENTGL_SPOT_DIRECTIONGL_SPOT_CUTOFF GL_SPHERE_MAP GL_SPECULARGL_SOURCE2_RGBGL_SOURCE2_ALPHAGL_SOURCE1_RGBGL_SOURCE1_ALPHAGL_SOURCE0_RGBGL_SOURCE0_ALPHA GL_SMOOTHGL_SLUMINANCE_ALPHAGL_SLUMINANCE8_ALPHA8GL_SLUMINANCE8 GL_SLUMINANCEGL_SINGLE_COLOR GL_SHININESSGL_SHADE_MODELGL_SEPARATE_SPECULAR_COLORGL_SELECTION_BUFFER_SIZEGL_SELECTION_BUFFER_POINTER GL_SELECTGL_SECONDARY_COLOR_ARRAY_TYPEGL_SECONDARY_COLOR_ARRAY_STRIDEGL_SECONDARY_COLOR_ARRAY_SIZE GL_SECONDARY_COLOR_ARRAY_POINTER'GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDINGGL_SECONDARY_COLOR_ARRAYGL_SCISSOR_BITGL_S GL_RGB_SCALE GL_RGBA_MODE GL_RETURNGL_RESCALE_NORMALGL_RENDER_MODE GL_RENDERGL_REFLECTION_MAP GL_RED_SCALE GL_RED_BITS GL_RED_BIASGL_R GL_QUAD_STRIPGL_QUADSGL_QUADRATIC_ATTENUATIONGL_QGL_PROJECTION_STACK_DEPTHGL_PROJECTION_MATRIX GL_PROJECTIONGL_PRIMARY_COLOR GL_PREVIOUS GL_POSITIONGL_POLYGON_TOKENGL_POLYGON_STIPPLE_BITGL_POLYGON_STIPPLEGL_POLYGON_BIT GL_POLYGONGL_POINT_TOKENGL_POINT_SPRITEGL_POINT_SMOOTH_HINTGL_POINT_SMOOTHGL_POINT_SIZE_MINGL_POINT_SIZE_MAXGL_POINT_DISTANCE_ATTENUATION GL_POINT_BITGL_PIXEL_MODE_BITGL_PIXEL_MAP_S_TO_S_SIZEGL_PIXEL_MAP_S_TO_SGL_PIXEL_MAP_R_TO_R_SIZEGL_PIXEL_MAP_R_TO_RGL_PIXEL_MAP_I_TO_R_SIZEGL_PIXEL_MAP_I_TO_RGL_PIXEL_MAP_I_TO_I_SIZEGL_PIXEL_MAP_I_TO_IGL_PIXEL_MAP_I_TO_G_SIZEGL_PIXEL_MAP_I_TO_GGL_PIXEL_MAP_I_TO_B_SIZEGL_PIXEL_MAP_I_TO_BGL_PIXEL_MAP_I_TO_A_SIZEGL_PIXEL_MAP_I_TO_AGL_PIXEL_MAP_G_TO_G_SIZEGL_PIXEL_MAP_G_TO_GGL_PIXEL_MAP_B_TO_B_SIZEGL_PIXEL_MAP_B_TO_BGL_PIXEL_MAP_A_TO_A_SIZEGL_PIXEL_MAP_A_TO_AGL_PERSPECTIVE_CORRECTION_HINTGL_PASS_THROUGH_TOKENGL_ORDERGL_OPERAND2_RGBGL_OPERAND2_ALPHAGL_OPERAND1_RGBGL_OPERAND1_ALPHAGL_OPERAND0_RGBGL_OPERAND0_ALPHAGL_OBJECT_PLANEGL_OBJECT_LINEAR GL_NORMAL_MAPGL_NORMAL_ARRAY_TYPEGL_NORMAL_ARRAY_STRIDEGL_NORMAL_ARRAY_POINTERGL_NORMAL_ARRAY_BUFFER_BINDINGGL_NORMAL_ARRAY GL_NORMALIZEGL_NAME_STACK_DEPTH GL_N3F_V3FGL_MULTISAMPLE_BITGL_MULT GL_MODULATEGL_MODELVIEW_STACK_DEPTHGL_MODELVIEW_MATRIX GL_MODELVIEWGL_MAX_TEXTURE_UNITSGL_MAX_TEXTURE_STACK_DEPTHGL_MAX_TEXTURE_COORDSGL_MAX_PROJECTION_STACK_DEPTHGL_MAX_PIXEL_MAP_TABLEGL_MAX_NAME_STACK_DEPTHGL_MAX_MODELVIEW_STACK_DEPTHGL_MAX_LIST_NESTING GL_MAX_LIGHTSGL_MAX_EVAL_ORDERGL_MAX_CLIP_PLANES GL_MAX_CLIENT_ATTRIB_STACK_DEPTHGL_MAX_ATTRIB_STACK_DEPTHGL_MATRIX_MODEGL_MAP_STENCIL GL_MAP_COLORGL_MAP2_VERTEX_4GL_MAP2_VERTEX_3GL_MAP2_TEXTURE_COORD_4GL_MAP2_TEXTURE_COORD_3GL_MAP2_TEXTURE_COORD_2GL_MAP2_TEXTURE_COORD_1GL_MAP2_NORMAL GL_MAP2_INDEXGL_MAP2_GRID_SEGMENTSGL_MAP2_GRID_DOMAINGL_MAP2_COLOR_4GL_MAP1_VERTEX_4GL_MAP1_VERTEX_3GL_MAP1_TEXTURE_COORD_4GL_MAP1_TEXTURE_COORD_3GL_MAP1_TEXTURE_COORD_2GL_MAP1_TEXTURE_COORD_1GL_MAP1_NORMAL GL_MAP1_INDEXGL_MAP1_GRID_SEGMENTSGL_MAP1_GRID_DOMAINGL_MAP1_COLOR_4GL_LUMINANCE_ALPHAGL_LUMINANCE8_ALPHA8 GL_LUMINANCE8GL_LUMINANCE6_ALPHA2GL_LUMINANCE4_ALPHA4 GL_LUMINANCE4GL_LUMINANCE16_ALPHA16GL_LUMINANCE16GL_LUMINANCE12_ALPHA4GL_LUMINANCE12_ALPHA12GL_LUMINANCE12 GL_LUMINANCE GL_LOGIC_OPGL_LOAD GL_LIST_MODE GL_LIST_INDEX GL_LIST_BIT GL_LIST_BASE GL_LINE_TOKENGL_LINE_STIPPLE_REPEATGL_LINE_STIPPLE_PATTERNGL_LINE_STIPPLEGL_LINE_RESET_TOKEN GL_LINE_BITGL_LINEAR_ATTENUATIONGL_LIGHT_MODEL_TWO_SIDEGL_LIGHT_MODEL_LOCAL_VIEWERGL_LIGHT_MODEL_COLOR_CONTROLGL_LIGHT_MODEL_AMBIENTGL_LIGHTING_BIT GL_LIGHTING GL_LIGHT7 GL_LIGHT6 GL_LIGHT5 GL_LIGHT4 GL_LIGHT3 GL_LIGHT2 GL_LIGHT1 GL_LIGHT0GL_INTERPOLATE GL_INTENSITY8 GL_INTENSITY4GL_INTENSITY16GL_INTENSITY12 GL_INTENSITYGL_INDEX_WRITEMASKGL_INDEX_SHIFTGL_INDEX_OFFSET GL_INDEX_MODEGL_INDEX_LOGIC_OPGL_INDEX_CLEAR_VALUE GL_INDEX_BITSGL_INDEX_ARRAY_TYPEGL_INDEX_ARRAY_STRIDEGL_INDEX_ARRAY_POINTERGL_INDEX_ARRAY_BUFFER_BINDINGGL_INDEX_ARRAY GL_HINT_BITGL_GREEN_SCALE GL_GREEN_BITS GL_GREEN_BIASGL_GENERATE_MIPMAP_HINTGL_GENERATE_MIPMAPGL_FRAGMENT_DEPTH GL_FOG_START GL_FOG_MODE GL_FOG_INDEX GL_FOG_HINT GL_FOG_ENDGL_FOG_DENSITYGL_FOG_COORD_SRCGL_FOG_COORD_ARRAY_TYPEGL_FOG_COORD_ARRAY_STRIDEGL_FOG_COORD_ARRAY_POINTER!GL_FOG_COORD_ARRAY_BUFFER_BINDINGGL_FOG_COORD_ARRAYGL_FOG_COORDINATE_SOURCEGL_FOG_COORDINATE_ARRAY_TYPEGL_FOG_COORDINATE_ARRAY_STRIDEGL_FOG_COORDINATE_ARRAY_POINTER&GL_FOG_COORDINATE_ARRAY_BUFFER_BINDINGGL_FOG_COORDINATE_ARRAYGL_FOG_COORDINATE GL_FOG_COORD GL_FOG_COLOR GL_FOG_BITGL_FOGGL_FLATGL_FEEDBACK_BUFFER_TYPEGL_FEEDBACK_BUFFER_SIZEGL_FEEDBACK_BUFFER_POINTER GL_FEEDBACK GL_EYE_PLANE GL_EYE_LINEARGL_EXP2GL_EXP GL_EVAL_BIT GL_ENABLE_BIT GL_EMISSIONGL_EDGE_FLAG_ARRAY_STRIDEGL_EDGE_FLAG_ARRAY_POINTER!GL_EDGE_FLAG_ARRAY_BUFFER_BINDINGGL_EDGE_FLAG_ARRAY GL_EDGE_FLAGGL_DRAW_PIXEL_TOKEN GL_DOT3_RGBA GL_DOT3_RGB GL_DOMAIN GL_DIFFUSEGL_DEPTH_TEXTURE_MODEGL_DEPTH_SCALE GL_DEPTH_BITS GL_DEPTH_BIASGL_DECALGL_CURRENT_TEXTURE_COORDSGL_CURRENT_SECONDARY_COLOR GL_CURRENT_RASTER_TEXTURE_COORDS!GL_CURRENT_RASTER_SECONDARY_COLOR GL_CURRENT_RASTER_POSITION_VALIDGL_CURRENT_RASTER_POSITIONGL_CURRENT_RASTER_INDEXGL_CURRENT_RASTER_DISTANCEGL_CURRENT_RASTER_COLORGL_CURRENT_NORMALGL_CURRENT_INDEXGL_CURRENT_FOG_COORDINATEGL_CURRENT_FOG_COORDGL_CURRENT_COLORGL_CURRENT_BITGL_COPY_PIXEL_TOKENGL_COORD_REPLACEGL_CONSTANT_ATTENUATION GL_CONSTANTGL_COMPRESSED_SLUMINANCE_ALPHAGL_COMPRESSED_SLUMINANCEGL_COMPRESSED_LUMINANCE_ALPHAGL_COMPRESSED_LUMINANCEGL_COMPRESSED_INTENSITYGL_COMPRESSED_ALPHAGL_COMPILE_AND_EXECUTE GL_COMPILEGL_COMPARE_R_TO_TEXTUREGL_COMBINE_RGBGL_COMBINE_ALPHA GL_COMBINE GL_COLOR_SUMGL_COLOR_MATERIAL_PARAMETERGL_COLOR_MATERIAL_FACEGL_COLOR_MATERIALGL_COLOR_INDEXESGL_COLOR_INDEXGL_COLOR_ARRAY_TYPEGL_COLOR_ARRAY_STRIDEGL_COLOR_ARRAY_SIZEGL_COLOR_ARRAY_POINTERGL_COLOR_ARRAY_BUFFER_BINDINGGL_COLOR_ARRAYGL_COEFFGL_CLIP_PLANE5GL_CLIP_PLANE4GL_CLIP_PLANE3GL_CLIP_PLANE2GL_CLIP_PLANE1GL_CLIP_PLANE0GL_CLIENT_VERTEX_ARRAY_BITGL_CLIENT_PIXEL_STORE_BITGL_CLIENT_ATTRIB_STACK_DEPTHGL_CLIENT_ALL_ATTRIB_BITSGL_CLIENT_ACTIVE_TEXTUREGL_CLAMP GL_C4UB_V3F GL_C4UB_V2FGL_C4F_N3F_V3F GL_C3F_V3F GL_BLUE_SCALE GL_BLUE_BITS GL_BLUE_BIASGL_BITMAP_TOKEN GL_BITMAPGL_AUX_BUFFERSGL_AUX3GL_AUX2GL_AUX1GL_AUX0GL_AUTO_NORMALGL_ATTRIB_STACK_DEPTHGL_AMBIENT_AND_DIFFUSE GL_AMBIENTGL_ALPHA_TEST_REFGL_ALPHA_TEST_FUNC GL_ALPHA_TESTGL_ALPHA_SCALE GL_ALPHA_BITS GL_ALPHA_BIAS GL_ALPHA8 GL_ALPHA4 GL_ALPHA16 GL_ALPHA12GL_ALL_ATTRIB_BITSGL_ALIASED_POINT_SIZE_RANGE GL_ADD_SIGNEDGL_ADDGL_ACCUM_RED_BITSGL_ACCUM_GREEN_BITSGL_ACCUM_CLEAR_VALUEGL_ACCUM_BUFFER_BITGL_ACCUM_BLUE_BITSGL_ACCUM_ALPHA_BITSGL_ACCUM GL_4_BYTESGL_4D_COLOR_TEXTURE GL_3_BYTESGL_3D_COLOR_TEXTURE GL_3D_COLORGL_3D GL_2_BYTESGL_2DglWindowPos3sv glWindowPos3sglWindowPos3iv glWindowPos3iglWindowPos3fv glWindowPos3fglWindowPos3dv glWindowPos3dglWindowPos2sv glWindowPos2sglWindowPos2iv glWindowPos2iglWindowPos2fv glWindowPos2fglWindowPos2dv glWindowPos2dglVertexPointer glVertex4sv glVertex4s glVertex4iv glVertex4i glVertex4fv glVertex4f glVertex4dv glVertex4d glVertex3sv glVertex3s glVertex3iv glVertex3i glVertex3fv glVertex3f glVertex3dv glVertex3d glVertex2sv glVertex2s glVertex2iv glVertex2i glVertex2fv glVertex2f glVertex2dv glVertex2d glTranslatef glTranslated glTexGeniv glTexGeni glTexGenfv glTexGenf glTexGendv glTexGend glTexEnviv glTexEnvi glTexEnvfv glTexEnvfglTexCoordPointer glTexCoord4sv glTexCoord4s glTexCoord4iv glTexCoord4i glTexCoord4fv glTexCoord4f glTexCoord4dv glTexCoord4d glTexCoord3sv glTexCoord3s glTexCoord3iv glTexCoord3i glTexCoord3fv glTexCoord3f glTexCoord3dv glTexCoord3d glTexCoord2sv glTexCoord2s glTexCoord2iv glTexCoord2i glTexCoord2fv glTexCoord2f glTexCoord2dv glTexCoord2d glTexCoord1sv glTexCoord1s glTexCoord1iv glTexCoord1i glTexCoord1fv glTexCoord1f glTexCoord1dv glTexCoord1d glShadeModelglSelectBufferglSecondaryColorPointerglSecondaryColor3usvglSecondaryColor3usglSecondaryColor3uivglSecondaryColor3uiglSecondaryColor3ubvglSecondaryColor3ubglSecondaryColor3svglSecondaryColor3sglSecondaryColor3ivglSecondaryColor3iglSecondaryColor3fvglSecondaryColor3fglSecondaryColor3dvglSecondaryColor3dglSecondaryColor3bvglSecondaryColor3bglScalefglScaled glRotatef glRotated glRenderModeglRectsvglRectsglRectivglRectiglRectfvglRectfglRectdvglRectdglRasterPos4sv glRasterPos4sglRasterPos4iv glRasterPos4iglRasterPos4fv glRasterPos4fglRasterPos4dv glRasterPos4dglRasterPos3sv glRasterPos3sglRasterPos3iv glRasterPos3iglRasterPos3fv glRasterPos3fglRasterPos3dv glRasterPos3dglRasterPos2sv glRasterPos2sglRasterPos2iv glRasterPos2iglRasterPos2fv glRasterPos2fglRasterPos2dv glRasterPos2d glPushName glPushMatrixglPushClientAttrib glPushAttribglPrioritizeTextures glPopName glPopMatrixglPopClientAttrib glPopAttribglPolygonStipple glPixelZoomglPixelTransferiglPixelTransferf glPixelMapusv glPixelMapuiv glPixelMapfv glPassThroughglOrthoglNormalPointer glNormal3sv glNormal3s glNormal3iv glNormal3i glNormal3fv glNormal3f glNormal3dv glNormal3d glNormal3bv glNormal3b glNewListglMultiTexCoord4svglMultiTexCoord4sglMultiTexCoord4ivglMultiTexCoord4iglMultiTexCoord4fvglMultiTexCoord4fglMultiTexCoord4dvglMultiTexCoord4dglMultiTexCoord3svglMultiTexCoord3sglMultiTexCoord3ivglMultiTexCoord3iglMultiTexCoord3fvglMultiTexCoord3fglMultiTexCoord3dvglMultiTexCoord3dglMultiTexCoord2svglMultiTexCoord2sglMultiTexCoord2ivglMultiTexCoord2iglMultiTexCoord2fvglMultiTexCoord2fglMultiTexCoord2dvglMultiTexCoord2dglMultiTexCoord1svglMultiTexCoord1sglMultiTexCoord1ivglMultiTexCoord1iglMultiTexCoord1fvglMultiTexCoord1fglMultiTexCoord1dvglMultiTexCoord1dglMultTransposeMatrixfglMultTransposeMatrixd glMultMatrixf glMultMatrixd glMatrixMode glMaterialiv glMateriali glMaterialfv glMaterialf glMapGrid2f glMapGrid2d glMapGrid1f glMapGrid1dglMap2fglMap2dglMap1fglMap1dglLoadTransposeMatrixfglLoadTransposeMatrixd glLoadName glLoadMatrixf glLoadMatrixdglLoadIdentity glListBase glLineStipple glLightivglLighti glLightfvglLightfglLightModeliv glLightModeliglLightModelfv glLightModelfglIsListglInterleavedArrays glInitNames glIndexubv glIndexub glIndexsvglIndexs glIndexivglIndexi glIndexfvglIndexf glIndexdvglIndexdglIndexPointer glIndexMask glGetTexGeniv glGetTexGenfv glGetTexGendv glGetTexEnviv glGetTexEnvfvglGetPolygonStipple glGetPointervglGetPixelMapusvglGetPixelMapuivglGetPixelMapfvglGetMaterialivglGetMaterialfv glGetMapiv glGetMapfv glGetMapdv glGetLightiv glGetLightfvglGetClipPlane glGenLists glFrustumglFogivglFogiglFogfvglFogf glFogCoordfv glFogCoordf glFogCoorddv glFogCoorddglFogCoordPointerglFeedbackBuffer glEvalPoint2 glEvalPoint1 glEvalMesh2 glEvalMesh1glEvalCoord2fv glEvalCoord2fglEvalCoord2dv glEvalCoord2dglEvalCoord1fv glEvalCoord1fglEvalCoord1dv glEvalCoord1d glEndListglEndglEnableClientState glEdgeFlagvglEdgeFlagPointer glEdgeFlag glDrawPixelsglDisableClientState glDeleteLists glCopyPixelsglColorPointerglColorMaterial glColor4usv glColor4us glColor4uiv glColor4ui glColor4ubv glColor4ub glColor4sv glColor4s glColor4iv glColor4i glColor4fv glColor4f glColor4dv glColor4d glColor4bv glColor4b glColor3usv glColor3us glColor3uiv glColor3ui glColor3ubv glColor3ub glColor3sv glColor3s glColor3iv glColor3i glColor3fv glColor3f glColor3dv glColor3d glColor3bv glColor3b glClipPlaneglClientActiveTexture glClearIndex glClearAccum glCallLists glCallListglBitmapglBeginglArrayElementglAreTexturesResident glAlphaFuncglAccumGraphics.GL.Types mkGLDEBUGPROCmkGLDEBUGPROCAMDmkGLDEBUGPROCARBmkGLDEBUGPROCKHR GLDEBUGPROCGLDEBUGPROCAMDGLDEBUGPROCARBGLDEBUGPROCKHR GLbitfield GLbooleanGLbyteGLchar GLcharARBGLclampdGLclampfGLclampxGLdouble GLeglImageOESGLenumGLfixedGLfloatGLhalf GLhalfARBGLhalfNVGLintGLint64 GLint64EXTGLintptr GLintptrARBGLshortGLsizei GLsizeiptr GLsizeiptrARBGLsyncGLubyteGLuintGLuint64 GLuint64EXTGLushortGLvdpauSurfaceNV GLhandleARBDebugModeActivated showSeverityshowTypeshowSrcForeign.StorableStorable linear-1.16.1 Linear.V4V4toV4 scrapContextexceptions-0.6.1Control.Monad.Catchmask_GHC.MVarMVarpendingFinalizers$fExceptionTooOldOpenGL noInformation atiGetMem nvidiaGetMem rawResource nativeCid touchIORef $fEqResource&$fOpenGLResourceaWrappedOpenGLResource $fOrdFence$fOpenGLResourcePtrFenceillPairsnewQuery ActiveQueries fromInt64Query_ queryTypeisActive SomeQuerynumericQueryTypeToConstantbooleanQueryTypeToConstanteitherQueryTypeToConstant withQuerygetActiveQueries removeQuery prettyShowaddQueryactuallyGetResults$fQueryResultTypeBool$fQueryResultTypeInt64 $fOrdQuery $fEqQuery$fOpenGLResourceWord32Query canMapWith toConstant toConstantF toConstantMF$fExceptionBufferCorruption$fShowBufferCorruption cubeSidestypeFromInternalFormatformatFromInternalFormat Linear.V2V2 Linear.V3V3TexParamtpEnum tpToConstanttpFromConstantisMultisamplingTopology toConstantUF toConstantCSupload1Dupload2Dupload3D uploadCube isValidMipmap toConstantC toConstantW setTexParam getTexParam$fTexParamMagFilter$fTexParamMinFilter toConstantAcheckCompilationErrorscheckLinkingErrors CLNopPipeline unwrapCLNopUSetter4USetter3USetter2USetter1 setUniform_shaderExceptionToExceptionshaderExceptionFromExceptionnewShaderGenericggetsetUi1setUi2setUi3setUi4setI1setI2setI3setI4double2FloatMapdouble2FloatMapMapcfloatToFloatMapcfloatToFloatMapMapcdoubleToDoubleMapcdoubleToDoubleMapMap cdouble2Float$fUniformableV4$fUniformableV3$fUniformableV40$fUniformableV30$fUniformableV2$fUniformableV1$fUniformableV41$fUniformableV31$fUniformableV42$fUniformableV32$fUniformableV20$fUniformableV10$fUniformableV43$fUniformableV33$fUniformableV44$fUniformableV34$fUniformableV45$fUniformableV35$fUniformableV21$fUniformableV11$fUniformableV46$fUniformableV36$fUniformableV22$fUniformableV12$fUniformableQuaternion$fUniformableQuaternion0$fUniformableQuaternion1$fUniformableQuaternion2$fUniformable(,,,)$fUniformable(,,)$fUniformable(,)$fUniformableCDouble$fUniformable(,,,)0$fUniformable(,,)0$fUniformable(,)0$fUniformableDouble$fUniformable(,,,)1$fUniformable(,,)1$fUniformable(,)1$fUniformableCFloat$fUniformableColor$fUniformable(,,,)2$fUniformable(,,)2$fUniformable(,)2$fUniformableFloat$fUniformable(,,,)3$fUniformable(,,)3$fUniformable(,)3$fUniformableInteger$fUniformable(,,,)4$fUniformable(,,)4$fUniformable(,)4$fUniformableInt$fUniformable(,,,)5$fUniformable(,,)5$fUniformable(,)5$fUniformableInt64$fUniformable(,,,)6$fUniformable(,,)6$fUniformable(,)6$fUniformableInt32$fUniformable(,,,)7$fUniformable(,,)7$fUniformable(,)7$fUniformableInt16$fUniformable(,,,)8$fUniformable(,,)8$fUniformable(,)8$fUniformableInt8$fUniformable(,,,)9$fUniformable(,,)9$fUniformable(,)9$fUniformableCInt$fUniformable(,,,)10$fUniformable(,,)10$fUniformable(,)10$fUniformableCUInt$fUniformable(,,,)11$fUniformable(,,)11$fUniformable(,)11$fUniformableWord64$fUniformable(,,,)12$fUniformable(,,)12$fUniformable(,)12$fUniformableWord32$fUniformable(,,,)13$fUniformable(,,)13$fUniformable(,)13$fUniformableWord16$fUniformable(,,,)14$fUniformable(,,)14$fUniformable(,)14$fUniformableWord8$fExceptionShaderLinkingError!$fExceptionShaderCompilationError$fExceptionShaderBuildingError$fShowShaderBuildingError isIntegerType$fSourceableTypeDouble$fSourceableTypeFloat$fSourceableTypeInt32$fSourceableTypeInt16$fSourceableTypeInt8$fSourceableTypeWord32$fSourceableTypeWord16$fSourceableTypeWord8setActiveTexture$fMonadIODrawTtransformers-0.4.2.0Control.Monad.IO.ClassliftIOPrimitiveRestartFunsprIndex prRestartprPrimitiveRestartIndexprEnable prDisable DrawState boundPipelineboundEbo boundTexturesrestoreTextures boundBlendingboundFramebufferboundFragmentPassTestsboundPrimitiveRestart activeTexture toConstantIT withParamswithPrimitiveRestartFunswithPrimitiveRestartwithPolygonOffsetwithBoundTextures withPipeline$fMonadStatesDrawT$fMonadTransDrawT$fIndexTypeableCUChar$fIndexTypeableCUShort$fIndexTypeableCUInt$fIndexTypeableWord8$fIndexTypeableWord16$fIndexTypeableWord32