packages feed

fwgl-javascript (empty) → 0.1.0.2

raw patch · 9 files changed

+2381/−0 lines, 9 filesdep +Yampadep +basedep +fwglsetup-changed

Dependencies added: Yampa, base, fwgl, ghcjs-base, hashable, unordered-containers

Files

+ FWGL/Backend/JavaScript.hs view
@@ -0,0 +1,587 @@+{-# LANGUAGE NullaryTypeClasses, TypeFamilies, UndecidableInstances #-}++{-| The GHCJS/WebGL backend. This just exports the instances for 'BackendIO'+    and 'GLES'. -}+module FWGL.Backend.JavaScript () where++import Control.Applicative+import Control.Concurrent+import qualified Data.HashMap.Strict as H+import Data.IORef+import Data.Word+import FRP.Yampa+import FWGL.Backend+import FWGL.Backend.JavaScript.Event+import qualified FWGL.Backend.JavaScript.WebGL as JS+import FWGL.Graphics.Color+import FWGL.Input+import FWGL.Vector+import GHCJS.Foreign+import GHCJS.Types+import GHCJS.Marshal++foreign import javascript unsafe+        "var img = new Image();                        \+        \img.src = $1;                                 \+        \img.onload = function() { return $2(img); };  "+        loadImageRaw :: JSString -> JSFun (JSRef a -> IO ()) -> IO ()++foreign import javascript unsafe "document.querySelector($1)"+        query :: JSString -> IO (JSRef a)++foreign import javascript unsafe "$2.getAttribute($1)"+        getAttributeRaw :: JSString -> JSRef a -> IO JSString++getAttribute :: String -> JSRef a -> IO String+getAttribute attr e = fromJSString <$> getAttributeRaw (toJSString attr) e++foreign import javascript unsafe "window.requestAnimationFrame($1)"+        requestAnimationFrame :: JSFun (JSRef Double -> IO ()) -> IO ()++foreign import javascript unsafe "$1.focus()" focus :: JSRef a -> IO ()++instance BackendIO where+        loadImage url f = asyncCallback1 NeverRetain callback+                          >>= loadImageRaw (toJSString url) +                where callback img =+                        do (Just w) <- getProp "width" img >>= fromJSRef+                           (Just h) <- getProp "height" img >>= fromJSRef+                           f (img, w, h)++        setup initState draw sigf =+                do element <- query $ toJSString "canvas"+                   eventSrc <- source handledEvents element+                   ctx <- JS.getCtx element+                   (Just w) <- getProp "clientWidth" element >>= fromJSRef+                   (Just h) <- getProp "clientHeight" element >>= fromJSRef+                   focus element -- ... no+                   drawStateRef <- initState w h ctx >>= newIORef+                   reactStateRef <- reactInit (return $ initInput w h)+                                              (\ _ _ -> actuate ctx drawStateRef)+                                              sigf+                   onFrame $ frame reactStateRef eventSrc Nothing+                where frame rsf src last crf =+                        do events <- clear src+                           (Just cur) <- fromJSRef crf+                           let tm = case last of+                                         Just l -> cur - l+                                         Nothing -> 0+                           react rsf (tm, Just $ Input events)+                           onFrame $ frame rsf src (Just cur)+        +                      onFrame handler = asyncCallback1 NeverRetain handler+                                        >>= requestAnimationFrame++                      initInput w h = Input $ H.singleton Resize [+                                EventData {+                                        dataFramebufferSize = Just (w, h),+                                        dataPointer = Nothing,+                                        dataButton = Nothing,+                                        dataKey = Nothing+                                }]+                                     +                      actuate ctx ref out = readIORef ref >>=+                                            draw out ctx >>=+                                         -- execDraw (drawBegin >> drawScene s) >>=+                                            writeIORef ref >> return False+                      handledEvents = [ MouseUp+                                      , MouseDown+                                      , MouseMove+                                      , KeyUp+                                      , KeyDown+                                      , Resize ]++instance GLES where+        type Ctx = JS.Ctx+        type GLEnum = Word+        type GLUInt = Word+        type GLInt = Int+        type GLPtr = Word+        type GLPtrDiff = Word+        type GLSize = Int+        type GLString = JSString+        type GLBool = Bool+        type Buffer = JS.Buffer+        type UniformLocation = JS.UniformLocation+        type Texture = JS.Texture+        type Shader = JS.Shader+        type Program = JS.Program+        type FrameBuffer = JS.FrameBuffer+        type RenderBuffer = JS.RenderBuffer+        -- type ActiveInfo = JS.ActiveInfo+        -- type ShaderPrecisionFormat = JS.ShaderPrecisionFormat+        type Array = JS.ArrayBufferView+        type Float32Array = JS.Float32Array+        type Int32Array = JS.Int32Array+        type Image = JS.Image++        true = True+        false = False+        nullGLPtr = 0+        toGLString = toJSString+        noBuffer = JS.noBuffer+        noTexture = JS.noTexture+        noArray = JS.noArray++        encodeM2 (M2 (V2 a1 a2) (V2 b1 b2)) = JS.listToJSArray [ a1, a2, b1, b2]+                                              >>= JS.float32Array++        encodeM3 (M3 (V3 a1 a2 a3)+                     (V3 b1 b2 b3)+                     (V3 c1 c2 c3)) = JS.listToJSArray [ a1, a2, a3+                                                       , b1, b2, b3+                                                       , c1, c2, c3]+                                      >>= JS.float32Array+        encodeM4 (M4 (V4 a1 a2 a3 a4)+                     (V4 b1 b2 b3 b4)+                     (V4 c1 c2 c3 c4)+                     (V4 d1 d2 d3 d4) ) = JS.listToJSArray [ a1, a2, a3, a4+                                                           , b1, b2, b3, b4+                                                           , c1, c2, c3, c4+                                                           , d1, d2, d3, d4 ]+                                          >>= JS.float32Array+        encodeFloats v = JS.listToJSArray v >>= JS.float32View++        -- TODO: decent implementation+        encodeV2s v = JS.toJSArray next (False, v) >>= JS.float32View+                where next (False, xs@(V2 x _ : _)) = Just (x, (True, xs))+                      next (True, V2 _ y : xs) = Just (y, (False, xs))+                      next (_, []) = Nothing++        encodeV3s v = JS.toJSArray next (0, v) >>= JS.float32View+                where next (0, xs@(V3 x _ _ : _)) = Just (x, (1, xs))+                      next (1, xs@(V3 _ y _ : _)) = Just (y, (2, xs))+                      next (2, V3 _ _ z : xs) = Just (z, (0, xs))+                      next (_, []) = Nothing++        -- TODO+        encodeV4s = error "encodeV4s: TODO"++        encodeUShorts v = JS.listToJSArray v >>= JS.uint16View++        encodeColors v = JS.toJSArray next (0, v) >>= JS.uint8View+                where next (0, xs@(Color x _ _ _ : _)) = Just (x, (1, xs))+                      next (1, xs@(Color _ y _ _ : _)) = Just (y, (2, xs))+                      next (2, xs@(Color _ _ z _ : _)) = Just (z, (3, xs))+                      next (3, Color _ _ _ w : xs) = Just (w, (0, xs))+                      next (_, []) = Nothing++        glActiveTexture = JS.glActiveTexture+        glAttachShader = JS.glAttachShader+        glBindAttribLocation = JS.glBindAttribLocation+        glBindBuffer = JS.glBindBuffer+        glBindFramebuffer = JS.glBindFramebuffer+        glBindRenderbuffer = JS.glBindRenderbuffer+        glBindTexture = JS.glBindTexture+        glBlendColor = JS.glBlendColor+        glBlendEquation = JS.glBlendEquation+        glBlendEquationSeparate = JS.glBlendEquationSeparate+        glBlendFunc = JS.glBlendFunc+        glBlendFuncSeparate = JS.glBlendFuncSeparate+        glBufferData = JS.glBufferData+        glBufferSubData = JS.glBufferSubData+        glCheckFramebufferStatus = JS.glCheckFramebufferStatus+        glClear = JS.glClear+        glClearColor = JS.glClearColor+        glClearDepth = JS.glClearDepth+        glClearStencil = JS.glClearStencil+        glColorMask = JS.glColorMask+        glCompileShader = JS.glCompileShader+        glCompressedTexImage2D = JS.glCompressedTexImage2D+        glCompressedTexSubImage2D = JS.glCompressedTexSubImage2D+        glCopyTexImage2D = JS.glCopyTexImage2D+        glCopyTexSubImage2D = JS.glCopyTexSubImage2D+        glCreateBuffer = JS.glCreateBuffer+        glCreateFramebuffer = JS.glCreateFramebuffer+        glCreateProgram = JS.glCreateProgram+        glCreateRenderbuffer = JS.glCreateRenderbuffer+        glCreateShader = JS.glCreateShader+        glCreateTexture = JS.glCreateTexture+        glCullFace = JS.glCullFace+        glDeleteBuffer = JS.glDeleteBuffer+        glDeleteFramebuffer = JS.glDeleteFramebuffer+        glDeleteProgram = JS.glDeleteProgram+        glDeleteRenderbuffer = JS.glDeleteRenderbuffer+        glDeleteShader = JS.glDeleteShader+        glDeleteTexture = JS.glDeleteTexture+        glDepthFunc = JS.glDepthFunc+        glDepthMask = JS.glDepthMask+        glDepthRange = JS.glDepthRange+        glDetachShader = JS.glDetachShader+        glDisable = JS.glDisable+        glDisableVertexAttribArray = JS.glDisableVertexAttribArray+        glDrawArrays = JS.glDrawArrays+        glDrawElements = JS.glDrawElements+        glEnable = JS.glEnable+        glEnableVertexAttribArray = JS.glEnableVertexAttribArray+        glFinish = JS.glFinish+        glFlush = JS.glFlush+        glFramebufferRenderbuffer = JS.glFramebufferRenderbuffer+        glFramebufferTexture2D = JS.glFramebufferTexture2D+        glFrontFace = JS.glFrontFace+        glGenerateMipmap = JS.glGenerateMipmap+        -- glGetActiveAttrib = JS.glGetActiveAttrib+        -- glGetActiveUniform = JS.glGetActiveUniform+        glGetAttribLocation = JS.glGetAttribLocation+        -- glGetBufferParameter = JS.glGetBufferParameter+        -- glGetParameter = JS.glGetParameter+        glGetError = JS.glGetError+        -- glGetFramebufferAttachmentParameter = JS.glGetFramebufferAttachmentParameter+        glGetProgramInfoLog = JS.glGetProgramInfoLog+        -- glGetRenderbufferParameter = JS.glGetRenderbufferParameter+        -- glGetShaderParameter = JS.glGetShaderParameter+        -- glGetShaderPrecisionFormat = JS.glGetShaderPrecisionFormat+        glGetShaderInfoLog = JS.glGetShaderInfoLog+        glGetShaderSource = JS.glGetShaderSource+        -- glGetTexParameter = JS.glGetTexParameter+        -- glGetUniform = JS.glGetUniform+        glGetUniformLocation = JS.glGetUniformLocation+        -- glGetVertexAttrib = JS.glGetVertexAttrib+        -- glGetVertexAttribOffset = JS.glGetVertexAttribOffset+        glHint = JS.glHint+        glIsBuffer = JS.glIsBuffer+        glIsEnabled = JS.glIsEnabled+        glIsFramebuffer = JS.glIsFramebuffer+        glIsProgram = JS.glIsProgram+        glIsRenderbuffer = JS.glIsRenderbuffer+        glIsShader = JS.glIsShader+        glIsTexture = JS.glIsTexture+        glLineWidth = JS.glLineWidth+        glLinkProgram = JS.glLinkProgram+        glPixelStorei = JS.glPixelStorei+        glPolygonOffset = JS.glPolygonOffset+        glReadPixels = JS.glReadPixels+        glRenderbufferStorage = JS.glRenderbufferStorage+        glSampleCoverage = JS.glSampleCoverage+        glScissor = JS.glScissor+        glShaderSource = JS.glShaderSource+        glStencilFunc = JS.glStencilFunc+        glStencilFuncSeparate = JS.glStencilFuncSeparate+        glStencilMask = JS.glStencilMask+        glStencilMaskSeparate = JS.glStencilMaskSeparate+        glStencilOp = JS.glStencilOp+        glStencilOpSeparate = JS.glStencilOpSeparate+        glTexImage2DBuffer = JS.glTexImage2DBuffer+        glTexImage2DImage = JS.glTexImage2DElement+        glTexParameterf = JS.glTexParameterf+        glTexParameteri = JS.glTexParameteri+        glTexSubImage2D = JS.glTexSubImage2D+        glUniform1f = JS.glUniform1f+        glUniform1fv = JS.glUniform1fv+        glUniform1i = JS.glUniform1i+        glUniform1iv = JS.glUniform1iv+        glUniform2f = JS.glUniform2f+        glUniform2fv = JS.glUniform2fv+        glUniform2i = JS.glUniform2i+        glUniform2iv = JS.glUniform2iv+        glUniform3f = JS.glUniform3f+        glUniform3fv = JS.glUniform3fv+        glUniform3i = JS.glUniform3i+        glUniform3iv = JS.glUniform3iv+        glUniform4f = JS.glUniform4f+        glUniform4fv = JS.glUniform4fv+        glUniform4i = JS.glUniform4i+        glUniform4iv = JS.glUniform4iv+        glUniformMatrix2fv = JS.glUniformMatrix2fv+        glUniformMatrix3fv = JS.glUniformMatrix3fv+        glUniformMatrix4fv = JS.glUniformMatrix4fv+        glUseProgram = JS.glUseProgram+        glValidateProgram = JS.glValidateProgram+        glVertexAttrib1f = JS.glVertexAttrib1f+        glVertexAttrib1fv = JS.glVertexAttrib1fv+        glVertexAttrib2f = JS.glVertexAttrib2f+        glVertexAttrib2fv = JS.glVertexAttrib2fv+        glVertexAttrib3f = JS.glVertexAttrib3f+        glVertexAttrib3fv = JS.glVertexAttrib3fv+        glVertexAttrib4f = JS.glVertexAttrib4f+        glVertexAttrib4fv = JS.glVertexAttrib4fv+        glVertexAttribPointer = JS.glVertexAttribPointer+        glViewport = JS.glViewport++        gl_DEPTH_BUFFER_BIT = JS.gl_DEPTH_BUFFER_BIT+        gl_STENCIL_BUFFER_BIT = JS.gl_STENCIL_BUFFER_BIT+        gl_COLOR_BUFFER_BIT = JS.gl_COLOR_BUFFER_BIT+        gl_POINTS = JS.gl_POINTS+        gl_LINES = JS.gl_LINES+        gl_LINE_LOOP = JS.gl_LINE_LOOP+        gl_LINE_STRIP = JS.gl_LINE_STRIP+        gl_TRIANGLES = JS.gl_TRIANGLES+        gl_TRIANGLE_STRIP = JS.gl_TRIANGLE_STRIP+        gl_TRIANGLE_FAN = JS.gl_TRIANGLE_FAN+        gl_ZERO = JS.gl_ZERO+        gl_ONE = JS.gl_ONE+        gl_SRC_COLOR = JS.gl_SRC_COLOR+        gl_ONE_MINUS_SRC_COLOR = JS.gl_ONE_MINUS_SRC_COLOR+        gl_SRC_ALPHA = JS.gl_SRC_ALPHA+        gl_ONE_MINUS_SRC_ALPHA = JS.gl_ONE_MINUS_SRC_ALPHA+        gl_DST_ALPHA = JS.gl_DST_ALPHA+        gl_ONE_MINUS_DST_ALPHA = JS.gl_ONE_MINUS_DST_ALPHA+        gl_DST_COLOR = JS.gl_DST_COLOR+        gl_ONE_MINUS_DST_COLOR = JS.gl_ONE_MINUS_DST_COLOR+        gl_SRC_ALPHA_SATURATE = JS.gl_SRC_ALPHA_SATURATE+        gl_FUNC_ADD = JS.gl_FUNC_ADD+        gl_BLEND_EQUATION = JS.gl_BLEND_EQUATION+        gl_BLEND_EQUATION_RGB = JS.gl_BLEND_EQUATION_RGB+        gl_BLEND_EQUATION_ALPHA = JS.gl_BLEND_EQUATION_ALPHA+        gl_FUNC_SUBTRACT = JS.gl_FUNC_SUBTRACT+        gl_FUNC_REVERSE_SUBTRACT = JS.gl_FUNC_REVERSE_SUBTRACT+        gl_BLEND_DST_RGB = JS.gl_BLEND_DST_RGB+        gl_BLEND_SRC_RGB = JS.gl_BLEND_SRC_RGB+        gl_BLEND_DST_ALPHA = JS.gl_BLEND_DST_ALPHA+        gl_BLEND_SRC_ALPHA = JS.gl_BLEND_SRC_ALPHA+        gl_CONSTANT_COLOR = JS.gl_CONSTANT_COLOR+        gl_ONE_MINUS_CONSTANT_COLOR = JS.gl_ONE_MINUS_CONSTANT_COLOR+        gl_CONSTANT_ALPHA = JS.gl_CONSTANT_ALPHA+        gl_ONE_MINUS_CONSTANT_ALPHA = JS.gl_ONE_MINUS_CONSTANT_ALPHA+        gl_BLEND_COLOR = JS.gl_BLEND_COLOR+        gl_ARRAY_BUFFER = JS.gl_ARRAY_BUFFER+        gl_ELEMENT_ARRAY_BUFFER = JS.gl_ELEMENT_ARRAY_BUFFER+        gl_ARRAY_BUFFER_BINDING = JS.gl_ARRAY_BUFFER_BINDING+        gl_ELEMENT_ARRAY_BUFFER_BINDING = JS.gl_ELEMENT_ARRAY_BUFFER_BINDING+        gl_STREAM_DRAW = JS.gl_STREAM_DRAW+        gl_STATIC_DRAW = JS.gl_STATIC_DRAW+        gl_DYNAMIC_DRAW = JS.gl_DYNAMIC_DRAW+        gl_BUFFER_SIZE = JS.gl_BUFFER_SIZE+        gl_BUFFER_USAGE = JS.gl_BUFFER_USAGE+        gl_CURRENT_VERTEX_ATTRIB = JS.gl_CURRENT_VERTEX_ATTRIB+        gl_FRONT = JS.gl_FRONT+        gl_BACK = JS.gl_BACK+        gl_FRONT_AND_BACK = JS.gl_FRONT_AND_BACK+        gl_CULL_FACE = JS.gl_CULL_FACE+        gl_BLEND = JS.gl_BLEND+        gl_DITHER = JS.gl_DITHER+        gl_STENCIL_TEST = JS.gl_STENCIL_TEST+        gl_DEPTH_TEST = JS.gl_DEPTH_TEST+        gl_SCISSOR_TEST = JS.gl_SCISSOR_TEST+        gl_POLYGON_OFFSET_FILL = JS.gl_POLYGON_OFFSET_FILL+        gl_SAMPLE_ALPHA_TO_COVERAGE = JS.gl_SAMPLE_ALPHA_TO_COVERAGE+        gl_SAMPLE_COVERAGE = JS.gl_SAMPLE_COVERAGE+        gl_NO_ERROR = JS.gl_NO_ERROR+        gl_INVALID_ENUM = JS.gl_INVALID_ENUM+        gl_INVALID_VALUE = JS.gl_INVALID_VALUE+        gl_INVALID_OPERATION = JS.gl_INVALID_OPERATION+        gl_OUT_OF_MEMORY = JS.gl_OUT_OF_MEMORY+        gl_CW = JS.gl_CW+        gl_CCW = JS.gl_CCW+        gl_LINE_WIDTH = JS.gl_LINE_WIDTH+        gl_ALIASED_POINT_SIZE_RANGE = JS.gl_ALIASED_POINT_SIZE_RANGE+        gl_ALIASED_LINE_WIDTH_RANGE = JS.gl_ALIASED_LINE_WIDTH_RANGE+        gl_CULL_FACE_MODE = JS.gl_CULL_FACE_MODE+        gl_FRONT_FACE = JS.gl_FRONT_FACE+        gl_DEPTH_RANGE = JS.gl_DEPTH_RANGE+        gl_DEPTH_WRITEMASK = JS.gl_DEPTH_WRITEMASK+        gl_DEPTH_CLEAR_VALUE = JS.gl_DEPTH_CLEAR_VALUE+        gl_DEPTH_FUNC = JS.gl_DEPTH_FUNC+        gl_STENCIL_CLEAR_VALUE = JS.gl_STENCIL_CLEAR_VALUE+        gl_STENCIL_FUNC = JS.gl_STENCIL_FUNC+        gl_STENCIL_FAIL = JS.gl_STENCIL_FAIL+        gl_STENCIL_PASS_DEPTH_FAIL = JS.gl_STENCIL_PASS_DEPTH_FAIL+        gl_STENCIL_PASS_DEPTH_PASS = JS.gl_STENCIL_PASS_DEPTH_PASS+        gl_STENCIL_REF = JS.gl_STENCIL_REF+        gl_STENCIL_VALUE_MASK = JS.gl_STENCIL_VALUE_MASK+        gl_STENCIL_WRITEMASK = JS.gl_STENCIL_WRITEMASK+        gl_STENCIL_BACK_FUNC = JS.gl_STENCIL_BACK_FUNC+        gl_STENCIL_BACK_FAIL = JS.gl_STENCIL_BACK_FAIL+        gl_STENCIL_BACK_PASS_DEPTH_FAIL = JS.gl_STENCIL_BACK_PASS_DEPTH_FAIL+        gl_STENCIL_BACK_PASS_DEPTH_PASS = JS.gl_STENCIL_BACK_PASS_DEPTH_PASS+        gl_STENCIL_BACK_REF = JS.gl_STENCIL_BACK_REF+        gl_STENCIL_BACK_VALUE_MASK = JS.gl_STENCIL_BACK_VALUE_MASK+        gl_STENCIL_BACK_WRITEMASK = JS.gl_STENCIL_BACK_WRITEMASK+        gl_VIEWPORT = JS.gl_VIEWPORT+        gl_SCISSOR_BOX = JS.gl_SCISSOR_BOX+        gl_COLOR_CLEAR_VALUE = JS.gl_COLOR_CLEAR_VALUE+        gl_COLOR_WRITEMASK = JS.gl_COLOR_WRITEMASK+        gl_UNPACK_ALIGNMENT = JS.gl_UNPACK_ALIGNMENT+        gl_PACK_ALIGNMENT = JS.gl_PACK_ALIGNMENT+        gl_MAX_TEXTURE_SIZE = JS.gl_MAX_TEXTURE_SIZE+        gl_MAX_VIEWPORT_DIMS = JS.gl_MAX_VIEWPORT_DIMS+        gl_SUBPIXEL_BITS = JS.gl_SUBPIXEL_BITS+        gl_RED_BITS = JS.gl_RED_BITS+        gl_GREEN_BITS = JS.gl_GREEN_BITS+        gl_BLUE_BITS = JS.gl_BLUE_BITS+        gl_ALPHA_BITS = JS.gl_ALPHA_BITS+        gl_DEPTH_BITS = JS.gl_DEPTH_BITS+        gl_STENCIL_BITS = JS.gl_STENCIL_BITS+        gl_POLYGON_OFFSET_UNITS = JS.gl_POLYGON_OFFSET_UNITS+        gl_POLYGON_OFFSET_FACTOR = JS.gl_POLYGON_OFFSET_FACTOR+        gl_TEXTURE_BINDING_2D = JS.gl_TEXTURE_BINDING_2D+        gl_SAMPLE_BUFFERS = JS.gl_SAMPLE_BUFFERS+        gl_SAMPLES = JS.gl_SAMPLES+        gl_SAMPLE_COVERAGE_VALUE = JS.gl_SAMPLE_COVERAGE_VALUE+        gl_SAMPLE_COVERAGE_INVERT = JS.gl_SAMPLE_COVERAGE_INVERT+        gl_COMPRESSED_TEXTURE_FORMATS = JS.gl_COMPRESSED_TEXTURE_FORMATS+        gl_DONT_CARE = JS.gl_DONT_CARE+        gl_FASTEST = JS.gl_FASTEST+        gl_NICEST = JS.gl_NICEST+        gl_GENERATE_MIPMAP_HINT = JS.gl_GENERATE_MIPMAP_HINT+        gl_BYTE = JS.gl_BYTE+        gl_UNSIGNED_BYTE = JS.gl_UNSIGNED_BYTE+        gl_SHORT = JS.gl_SHORT+        gl_UNSIGNED_SHORT = JS.gl_UNSIGNED_SHORT+        gl_INT = JS.gl_INT+        gl_UNSIGNED_INT = JS.gl_UNSIGNED_INT+        gl_FLOAT = JS.gl_FLOAT+        gl_DEPTH_COMPONENT = JS.gl_DEPTH_COMPONENT+        gl_ALPHA = JS.gl_ALPHA+        gl_RGB = JS.gl_RGB+        gl_RGBA = JS.gl_RGBA+        gl_LUMINANCE = JS.gl_LUMINANCE+        gl_LUMINANCE_ALPHA = JS.gl_LUMINANCE_ALPHA+        gl_UNSIGNED_SHORT_4_4_4_4 = JS.gl_UNSIGNED_SHORT_4_4_4_4+        gl_UNSIGNED_SHORT_5_5_5_1 = JS.gl_UNSIGNED_SHORT_5_5_5_1+        gl_UNSIGNED_SHORT_5_6_5 = JS.gl_UNSIGNED_SHORT_5_6_5+        gl_FRAGMENT_SHADER = JS.gl_FRAGMENT_SHADER+        gl_VERTEX_SHADER = JS.gl_VERTEX_SHADER+        gl_MAX_VERTEX_ATTRIBS = JS.gl_MAX_VERTEX_ATTRIBS+        gl_MAX_VERTEX_UNIFORM_VECTORS = JS.gl_MAX_VERTEX_UNIFORM_VECTORS+        gl_MAX_VARYING_VECTORS = JS.gl_MAX_VARYING_VECTORS+        gl_MAX_COMBINED_TEXTURE_IMAGE_UNITS = JS.gl_MAX_COMBINED_TEXTURE_IMAGE_UNITS+        gl_MAX_VERTEX_TEXTURE_IMAGE_UNITS = JS.gl_MAX_VERTEX_TEXTURE_IMAGE_UNITS+        gl_MAX_TEXTURE_IMAGE_UNITS = JS.gl_MAX_TEXTURE_IMAGE_UNITS+        gl_MAX_FRAGMENT_UNIFORM_VECTORS = JS.gl_MAX_FRAGMENT_UNIFORM_VECTORS+        gl_SHADER_TYPE = JS.gl_SHADER_TYPE+        gl_DELETE_STATUS = JS.gl_DELETE_STATUS+        gl_LINK_STATUS = JS.gl_LINK_STATUS+        gl_VALIDATE_STATUS = JS.gl_VALIDATE_STATUS+        gl_ATTACHED_SHADERS = JS.gl_ATTACHED_SHADERS+        gl_ACTIVE_UNIFORMS = JS.gl_ACTIVE_UNIFORMS+        gl_ACTIVE_ATTRIBUTES = JS.gl_ACTIVE_ATTRIBUTES+        gl_SHADING_LANGUAGE_VERSION = JS.gl_SHADING_LANGUAGE_VERSION+        gl_CURRENT_PROGRAM = JS.gl_CURRENT_PROGRAM+        gl_NEVER = JS.gl_NEVER+        gl_LESS = JS.gl_LESS+        gl_EQUAL = JS.gl_EQUAL+        gl_LEQUAL = JS.gl_LEQUAL+        gl_GREATER = JS.gl_GREATER+        gl_NOTEQUAL = JS.gl_NOTEQUAL+        gl_GEQUAL = JS.gl_GEQUAL+        gl_ALWAYS = JS.gl_ALWAYS+        gl_KEEP = JS.gl_KEEP+        gl_REPLACE = JS.gl_REPLACE+        gl_INCR = JS.gl_INCR+        gl_DECR = JS.gl_DECR+        gl_INVERT = JS.gl_INVERT+        gl_INCR_WRAP = JS.gl_INCR_WRAP+        gl_DECR_WRAP = JS.gl_DECR_WRAP+        gl_VENDOR = JS.gl_VENDOR+        gl_RENDERER = JS.gl_RENDERER+        gl_VERSION = JS.gl_VERSION+        gl_NEAREST = JS.gl_NEAREST+        gl_LINEAR = JS.gl_LINEAR+        gl_NEAREST_MIPMAP_NEAREST = JS.gl_NEAREST_MIPMAP_NEAREST+        gl_LINEAR_MIPMAP_NEAREST = JS.gl_LINEAR_MIPMAP_NEAREST+        gl_NEAREST_MIPMAP_LINEAR = JS.gl_NEAREST_MIPMAP_LINEAR+        gl_LINEAR_MIPMAP_LINEAR = JS.gl_LINEAR_MIPMAP_LINEAR+        gl_TEXTURE_MAG_FILTER = JS.gl_TEXTURE_MAG_FILTER+        gl_TEXTURE_MIN_FILTER = JS.gl_TEXTURE_MIN_FILTER+        gl_TEXTURE_WRAP_S = JS.gl_TEXTURE_WRAP_S+        gl_TEXTURE_WRAP_T = JS.gl_TEXTURE_WRAP_T+        gl_TEXTURE_2D = JS.gl_TEXTURE_2D+        gl_TEXTURE = JS.gl_TEXTURE+        gl_TEXTURE_CUBE_MAP = JS.gl_TEXTURE_CUBE_MAP+        gl_TEXTURE_BINDING_CUBE_MAP = JS.gl_TEXTURE_BINDING_CUBE_MAP+        gl_TEXTURE_CUBE_MAP_POSITIVE_X = JS.gl_TEXTURE_CUBE_MAP_POSITIVE_X+        gl_TEXTURE_CUBE_MAP_NEGATIVE_X = JS.gl_TEXTURE_CUBE_MAP_NEGATIVE_X+        gl_TEXTURE_CUBE_MAP_POSITIVE_Y = JS.gl_TEXTURE_CUBE_MAP_POSITIVE_Y+        gl_TEXTURE_CUBE_MAP_NEGATIVE_Y = JS.gl_TEXTURE_CUBE_MAP_NEGATIVE_Y+        gl_TEXTURE_CUBE_MAP_POSITIVE_Z = JS.gl_TEXTURE_CUBE_MAP_POSITIVE_Z+        gl_TEXTURE_CUBE_MAP_NEGATIVE_Z = JS.gl_TEXTURE_CUBE_MAP_NEGATIVE_Z+        gl_MAX_CUBE_MAP_TEXTURE_SIZE = JS.gl_MAX_CUBE_MAP_TEXTURE_SIZE+        gl_TEXTURE0 = JS.gl_TEXTURE0+        gl_TEXTURE1 = JS.gl_TEXTURE1+        gl_TEXTURE2 = JS.gl_TEXTURE2+        gl_TEXTURE3 = JS.gl_TEXTURE3+        gl_TEXTURE4 = JS.gl_TEXTURE4+        gl_TEXTURE5 = JS.gl_TEXTURE5+        gl_TEXTURE6 = JS.gl_TEXTURE6+        gl_TEXTURE7 = JS.gl_TEXTURE7+        gl_TEXTURE8 = JS.gl_TEXTURE8+        gl_TEXTURE9 = JS.gl_TEXTURE9+        gl_TEXTURE10 = JS.gl_TEXTURE10+        gl_TEXTURE11 = JS.gl_TEXTURE11+        gl_TEXTURE12 = JS.gl_TEXTURE12+        gl_TEXTURE13 = JS.gl_TEXTURE13+        gl_TEXTURE14 = JS.gl_TEXTURE14+        gl_TEXTURE15 = JS.gl_TEXTURE15+        gl_TEXTURE16 = JS.gl_TEXTURE16+        gl_TEXTURE17 = JS.gl_TEXTURE17+        gl_TEXTURE18 = JS.gl_TEXTURE18+        gl_TEXTURE19 = JS.gl_TEXTURE19+        gl_TEXTURE20 = JS.gl_TEXTURE20+        gl_TEXTURE21 = JS.gl_TEXTURE21+        gl_TEXTURE22 = JS.gl_TEXTURE22+        gl_TEXTURE23 = JS.gl_TEXTURE23+        gl_TEXTURE24 = JS.gl_TEXTURE24+        gl_TEXTURE25 = JS.gl_TEXTURE25+        gl_TEXTURE26 = JS.gl_TEXTURE26+        gl_TEXTURE27 = JS.gl_TEXTURE27+        gl_TEXTURE28 = JS.gl_TEXTURE28+        gl_TEXTURE29 = JS.gl_TEXTURE29+        gl_TEXTURE30 = JS.gl_TEXTURE30+        gl_TEXTURE31 = JS.gl_TEXTURE31+        gl_ACTIVE_TEXTURE = JS.gl_ACTIVE_TEXTURE+        gl_REPEAT = JS.gl_REPEAT+        gl_CLAMP_TO_EDGE = JS.gl_CLAMP_TO_EDGE+        gl_MIRRORED_REPEAT = JS.gl_MIRRORED_REPEAT+        gl_FLOAT_VEC2 = JS.gl_FLOAT_VEC2+        gl_FLOAT_VEC3 = JS.gl_FLOAT_VEC3+        gl_FLOAT_VEC4 = JS.gl_FLOAT_VEC4+        gl_INT_VEC2 = JS.gl_INT_VEC2+        gl_INT_VEC3 = JS.gl_INT_VEC3+        gl_INT_VEC4 = JS.gl_INT_VEC4+        gl_BOOL = JS.gl_BOOL+        gl_BOOL_VEC2 = JS.gl_BOOL_VEC2+        gl_BOOL_VEC3 = JS.gl_BOOL_VEC3+        gl_BOOL_VEC4 = JS.gl_BOOL_VEC4+        gl_FLOAT_MAT2 = JS.gl_FLOAT_MAT2+        gl_FLOAT_MAT3 = JS.gl_FLOAT_MAT3+        gl_FLOAT_MAT4 = JS.gl_FLOAT_MAT4+        gl_SAMPLER_2D = JS.gl_SAMPLER_2D+        gl_SAMPLER_CUBE = JS.gl_SAMPLER_CUBE+        gl_VERTEX_ATTRIB_ARRAY_ENABLED = JS.gl_VERTEX_ATTRIB_ARRAY_ENABLED+        gl_VERTEX_ATTRIB_ARRAY_SIZE = JS.gl_VERTEX_ATTRIB_ARRAY_SIZE+        gl_VERTEX_ATTRIB_ARRAY_STRIDE = JS.gl_VERTEX_ATTRIB_ARRAY_STRIDE+        gl_VERTEX_ATTRIB_ARRAY_TYPE = JS.gl_VERTEX_ATTRIB_ARRAY_TYPE+        gl_VERTEX_ATTRIB_ARRAY_NORMALIZED = JS.gl_VERTEX_ATTRIB_ARRAY_NORMALIZED+        gl_VERTEX_ATTRIB_ARRAY_POINTER = JS.gl_VERTEX_ATTRIB_ARRAY_POINTER+        gl_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING = JS.gl_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING+        gl_COMPILE_STATUS = JS.gl_COMPILE_STATUS+        gl_LOW_FLOAT = JS.gl_LOW_FLOAT+        gl_MEDIUM_FLOAT = JS.gl_MEDIUM_FLOAT+        gl_HIGH_FLOAT = JS.gl_HIGH_FLOAT+        gl_LOW_INT = JS.gl_LOW_INT+        gl_MEDIUM_INT = JS.gl_MEDIUM_INT+        gl_HIGH_INT = JS.gl_HIGH_INT+        gl_FRAMEBUFFER = JS.gl_FRAMEBUFFER+        gl_RENDERBUFFER = JS.gl_RENDERBUFFER+        gl_RGBA4 = JS.gl_RGBA4+        gl_RGB5_A1 = JS.gl_RGB5_A1+        gl_RGB565 = JS.gl_RGB565+        gl_DEPTH_COMPONENT16 = JS.gl_DEPTH_COMPONENT16+        gl_STENCIL_INDEX8 = JS.gl_STENCIL_INDEX8+        gl_RENDERBUFFER_WIDTH = JS.gl_RENDERBUFFER_WIDTH+        gl_RENDERBUFFER_HEIGHT = JS.gl_RENDERBUFFER_HEIGHT+        gl_RENDERBUFFER_INTERNAL_FORMAT = JS.gl_RENDERBUFFER_INTERNAL_FORMAT+        gl_RENDERBUFFER_RED_SIZE = JS.gl_RENDERBUFFER_RED_SIZE+        gl_RENDERBUFFER_GREEN_SIZE = JS.gl_RENDERBUFFER_GREEN_SIZE+        gl_RENDERBUFFER_BLUE_SIZE = JS.gl_RENDERBUFFER_BLUE_SIZE+        gl_RENDERBUFFER_ALPHA_SIZE = JS.gl_RENDERBUFFER_ALPHA_SIZE+        gl_RENDERBUFFER_DEPTH_SIZE = JS.gl_RENDERBUFFER_DEPTH_SIZE+        gl_RENDERBUFFER_STENCIL_SIZE = JS.gl_RENDERBUFFER_STENCIL_SIZE+        gl_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE = JS.gl_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE+        gl_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME = JS.gl_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME+        gl_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL = JS.gl_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL+        gl_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE = JS.gl_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE+        gl_COLOR_ATTACHMENT0 = JS.gl_COLOR_ATTACHMENT0+        gl_DEPTH_ATTACHMENT = JS.gl_DEPTH_ATTACHMENT+        gl_STENCIL_ATTACHMENT = JS.gl_STENCIL_ATTACHMENT+        gl_NONE = JS.gl_NONE+        gl_FRAMEBUFFER_COMPLETE = JS.gl_FRAMEBUFFER_COMPLETE+        gl_FRAMEBUFFER_INCOMPLETE_ATTACHMENT = JS.gl_FRAMEBUFFER_INCOMPLETE_ATTACHMENT+        gl_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT = JS.gl_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT+        gl_FRAMEBUFFER_INCOMPLETE_DIMENSIONS = JS.gl_FRAMEBUFFER_INCOMPLETE_DIMENSIONS+        gl_FRAMEBUFFER_UNSUPPORTED = JS.gl_FRAMEBUFFER_UNSUPPORTED+        gl_FRAMEBUFFER_BINDING = JS.gl_FRAMEBUFFER_BINDING+        gl_RENDERBUFFER_BINDING = JS.gl_RENDERBUFFER_BINDING+        gl_MAX_RENDERBUFFER_SIZE = JS.gl_MAX_RENDERBUFFER_SIZE+        gl_INVALID_FRAMEBUFFER_OPERATION = JS.gl_INVALID_FRAMEBUFFER_OPERATION
+ FWGL/Backend/JavaScript/Event.hs view
@@ -0,0 +1,200 @@+-- TODO: rewrite everything++module FWGL.Backend.JavaScript.Event (+        InputEvent(..),+        Source,+        source,+        addEvent,+        addEvents,+        events,+        clear+) where++import Control.Applicative+import Data.Char (toLower, toUpper)+import qualified Data.Hashable as H+import qualified Data.HashMap.Strict as H+import Data.IORef++import GHCJS.Foreign+import GHCJS.Marshal+import GHCJS.Types++import FWGL.Input++type Event = InputEvent++data Source = Source {+        element :: JSRef (),+        eventMap :: IORef (H.HashMap Event [EventData])+}++source :: [Event] -> JSRef a -> IO Source+source es j = do+        s <- Source (castRef j) <$> newIORef H.empty+        addEvents es s+        return s++events :: Source -> IO (H.HashMap Event [EventData])+events (Source _ c) = readIORef c++clear :: Source -> IO (H.HashMap Event [EventData])+clear (Source _ c) = atomicModifyIORef' c $ \m -> (H.empty, m)++addEvents :: [Event] -> Source -> IO ()+addEvents es s = mapM_ (flip addEvent s) es++addEvent :: Event -> Source -> IO ()+addEvent e (Source j c) = asyncCallback1 NeverRetain handler >>=+                          addHandler j (toJSString $ eventName e)+        where +                prop p d =  getProp p d >>= fromJSRef+                handler d = do+                        eventData <- EventData+                                        <$> (do w <- prop "clientWidth" j+                                                h <- prop "clientHeight" j+                                                return $ (,) <$> w <*> h)+                                        <*> (do x <- prop "clientX" d+                                                y <- prop "clientY" d+                                                return $ (,) <$> x <*> y)+                                        <*> ((getButton <$>) <$> prop "button" d)+                                        <*> ((getKey <$>) <$> prop "keyCode" d)+                        modifyIORef c $ H.insertWith (flip (++)) e [ eventData ]++eventName :: Event -> String+-- eventName (Other s) = s+-- eventName DoubleClick = "dblclick"+eventName s = map toLower . show $ s++getButton :: Int -> MouseButton+getButton 0 = MouseLeft+getButton 1 = MouseMiddle+getButton 2 = MouseRight++foreign import javascript unsafe "$1.addEventListener($2, $3)"+        addHandler :: JSRef a -> JSString -> JSFun (JSRef b -> IO ()) -> IO ()++getKey :: Int -> Key+getKey 65 = KeyA+getKey 66 = KeyB+getKey 67 = KeyC+getKey 68 = KeyD+getKey 69 = KeyE+getKey 70 = KeyF+getKey 71 = KeyG+getKey 72 = KeyH+getKey 73 = KeyI+getKey 74 = KeyJ+getKey 75 = KeyK+getKey 76 = KeyL+getKey 77 = KeyM+getKey 78 = KeyN+getKey 79 = KeyO+getKey 80 = KeyP+getKey 81 = KeyQ+getKey 82 = KeyR+getKey 83 = KeyS+getKey 84 = KeyT+getKey 85 = KeyU+getKey 86 = KeyV+getKey 87 = KeyW+getKey 88 = KeyX+getKey 89 = KeyY+getKey 90 = KeyZ+getKey 97 = KeyA+getKey 98 = KeyB+getKey 99 = KeyC+getKey 100 = KeyD+getKey 101 = KeyE+getKey 102 = KeyF+getKey 103 = KeyG+getKey 104 = KeyH+getKey 105 = KeyI+getKey 106 = KeyJ+getKey 107 = KeyK+getKey 108 = KeyL+getKey 109 = KeyM+getKey 110 = KeyN+getKey 111 = KeyO+getKey 112 = KeyP+getKey 113 = KeyQ+getKey 114 = KeyR+getKey 115 = KeyS+getKey 116 = KeyT+getKey 117 = KeyU+getKey 118 = KeyV+getKey 119 = KeyW+getKey 120 = KeyX+getKey 121 = KeyY+getKey 122 = KeyZ+getKey 48 = Key0+getKey 49 = Key1+getKey 50 = Key2+getKey 51 = Key3+getKey 52 = Key4+getKey 53 = Key5+getKey 54 = Key6+getKey 55 = Key7+getKey 56 = Key8+getKey 57 = Key9+getKey 32 = KeySpace+getKey 13 = KeyEnter+getKey 9 = KeyTab+getKey 27 = KeyEsc+getKey 8 = KeyBackspace+getKey 16 = KeyShift+getKey 17 = KeyControl+getKey 18 = KeyAlt+getKey 20 = KeyCapsLock+getKey 144 = KeyNumLock+getKey 37 = KeyArrowLeft+getKey 38 = KeyArrowUp+getKey 39 = KeyArrowRight+getKey 40 = KeyArrowDown+getKey 45 = KeyIns+getKey 46 = KeyDel+getKey 36 = KeyHome+getKey 35 = KeyEnd+getKey 33 = KeyPgUp+getKey 34 = KeyPgDown+getKey 112 = KeyF1+getKey 113 = KeyF2+getKey 114 = KeyF3+getKey 115 = KeyF4+getKey 116 = KeyF5+getKey 117 = KeyF6+getKey 118 = KeyF7+getKey 119 = KeyF8+getKey 120 = KeyF9+getKey 121 = KeyF10+getKey 122 = KeyF11+getKey 123 = KeyF12+getKey 46 = KeyPadDel+getKey 45 = KeyPadIns+getKey 35 = KeyPadEnd+getKey 40 = KeyPadDown+getKey 34 = KeyPadPgDown+getKey 37 = KeyPadLeft+getKey 39 = KeyPadRight+getKey 36 = KeyPadHome+getKey 38 = KeyPadUp+getKey 33 = KeyPadPgUp+getKey 107 = KeyPadAdd+getKey 109 = KeyPadSub+getKey 106 = KeyPadMul+getKey 111 = KeyPadDiv+getKey 13 = KeyPadEnter+getKey 46 = KeyPadDot+getKey 48 = KeyPad0+getKey 49 = KeyPad1+getKey 50 = KeyPad2+getKey 51 = KeyPad3+getKey 52 = KeyPad4+getKey 53 = KeyPad5+getKey 54 = KeyPad6+getKey 55 = KeyPad7+getKey 56 = KeyPad8+getKey 57 = KeyPad9+getKey _ = KeyUnknown+-- TODO: letters, numbers+-- TODO: fix overlapping patterns
+ FWGL/Backend/JavaScript/WebGL.hs view
@@ -0,0 +1,5 @@+module FWGL.Backend.JavaScript.WebGL (module W) where++import FWGL.Backend.JavaScript.WebGL.Const as W+import FWGL.Backend.JavaScript.WebGL.Raw as W+import FWGL.Backend.JavaScript.WebGL.Types as W
+ FWGL/Backend/JavaScript/WebGL/Const.hs view
@@ -0,0 +1,886 @@+module FWGL.Backend.JavaScript.WebGL.Const where++gl_DEPTH_BUFFER_BIT :: Num a => a+gl_DEPTH_BUFFER_BIT = 0x00000100++gl_STENCIL_BUFFER_BIT :: Num a => a+gl_STENCIL_BUFFER_BIT = 0x00000400++gl_COLOR_BUFFER_BIT :: Num a => a+gl_COLOR_BUFFER_BIT = 0x00004000++gl_POINTS :: Num a => a+gl_POINTS = 0x0000++gl_LINES :: Num a => a+gl_LINES = 0x0001++gl_LINE_LOOP :: Num a => a+gl_LINE_LOOP = 0x0002++gl_LINE_STRIP :: Num a => a+gl_LINE_STRIP = 0x0003++gl_TRIANGLES :: Num a => a+gl_TRIANGLES = 0x0004++gl_TRIANGLE_STRIP :: Num a => a+gl_TRIANGLE_STRIP = 0x0005++gl_TRIANGLE_FAN :: Num a => a+gl_TRIANGLE_FAN = 0x0006++gl_ZERO :: Num a => a+gl_ZERO = 0++gl_ONE :: Num a => a+gl_ONE = 1++gl_SRC_COLOR :: Num a => a+gl_SRC_COLOR = 0x0300++gl_ONE_MINUS_SRC_COLOR :: Num a => a+gl_ONE_MINUS_SRC_COLOR = 0x0301++gl_SRC_ALPHA :: Num a => a+gl_SRC_ALPHA = 0x0302++gl_ONE_MINUS_SRC_ALPHA :: Num a => a+gl_ONE_MINUS_SRC_ALPHA = 0x0303++gl_DST_ALPHA :: Num a => a+gl_DST_ALPHA = 0x0304++gl_ONE_MINUS_DST_ALPHA :: Num a => a+gl_ONE_MINUS_DST_ALPHA = 0x0305++gl_DST_COLOR :: Num a => a+gl_DST_COLOR = 0x0306++gl_ONE_MINUS_DST_COLOR :: Num a => a+gl_ONE_MINUS_DST_COLOR = 0x0307++gl_SRC_ALPHA_SATURATE :: Num a => a+gl_SRC_ALPHA_SATURATE = 0x0308++gl_FUNC_ADD :: Num a => a+gl_FUNC_ADD = 0x8006++gl_BLEND_EQUATION :: Num a => a+gl_BLEND_EQUATION = 0x8009++gl_BLEND_EQUATION_RGB :: Num a => a+gl_BLEND_EQUATION_RGB = 0x8009   ++gl_BLEND_EQUATION_ALPHA :: Num a => a+gl_BLEND_EQUATION_ALPHA = 0x883D++gl_FUNC_SUBTRACT :: Num a => a+gl_FUNC_SUBTRACT = 0x800A++gl_FUNC_REVERSE_SUBTRACT :: Num a => a+gl_FUNC_REVERSE_SUBTRACT = 0x800B++gl_BLEND_DST_RGB :: Num a => a+gl_BLEND_DST_RGB = 0x80C8++gl_BLEND_SRC_RGB :: Num a => a+gl_BLEND_SRC_RGB = 0x80C9++gl_BLEND_DST_ALPHA :: Num a => a+gl_BLEND_DST_ALPHA = 0x80CA++gl_BLEND_SRC_ALPHA :: Num a => a+gl_BLEND_SRC_ALPHA = 0x80CB++gl_CONSTANT_COLOR :: Num a => a+gl_CONSTANT_COLOR = 0x8001++gl_ONE_MINUS_CONSTANT_COLOR :: Num a => a+gl_ONE_MINUS_CONSTANT_COLOR = 0x8002++gl_CONSTANT_ALPHA :: Num a => a+gl_CONSTANT_ALPHA = 0x8003++gl_ONE_MINUS_CONSTANT_ALPHA :: Num a => a+gl_ONE_MINUS_CONSTANT_ALPHA = 0x8004++gl_BLEND_COLOR :: Num a => a+gl_BLEND_COLOR = 0x8005++gl_ARRAY_BUFFER :: Num a => a+gl_ARRAY_BUFFER = 0x8892++gl_ELEMENT_ARRAY_BUFFER :: Num a => a+gl_ELEMENT_ARRAY_BUFFER = 0x8893++gl_ARRAY_BUFFER_BINDING :: Num a => a+gl_ARRAY_BUFFER_BINDING = 0x8894++gl_ELEMENT_ARRAY_BUFFER_BINDING :: Num a => a+gl_ELEMENT_ARRAY_BUFFER_BINDING = 0x8895++gl_STREAM_DRAW :: Num a => a+gl_STREAM_DRAW = 0x88E0++gl_STATIC_DRAW :: Num a => a+gl_STATIC_DRAW = 0x88E4++gl_DYNAMIC_DRAW :: Num a => a+gl_DYNAMIC_DRAW = 0x88E8++gl_BUFFER_SIZE :: Num a => a+gl_BUFFER_SIZE = 0x8764++gl_BUFFER_USAGE :: Num a => a+gl_BUFFER_USAGE = 0x8765++gl_CURRENT_VERTEX_ATTRIB :: Num a => a+gl_CURRENT_VERTEX_ATTRIB = 0x8626++gl_FRONT :: Num a => a+gl_FRONT = 0x0404++gl_BACK :: Num a => a+gl_BACK = 0x0405++gl_FRONT_AND_BACK :: Num a => a+gl_FRONT_AND_BACK = 0x0408++gl_CULL_FACE :: Num a => a+gl_CULL_FACE = 0x0B44++gl_BLEND :: Num a => a+gl_BLEND = 0x0BE2++gl_DITHER :: Num a => a+gl_DITHER = 0x0BD0++gl_STENCIL_TEST :: Num a => a+gl_STENCIL_TEST = 0x0B90++gl_DEPTH_TEST :: Num a => a+gl_DEPTH_TEST = 0x0B71++gl_SCISSOR_TEST :: Num a => a+gl_SCISSOR_TEST = 0x0C11++gl_POLYGON_OFFSET_FILL :: Num a => a+gl_POLYGON_OFFSET_FILL = 0x8037++gl_SAMPLE_ALPHA_TO_COVERAGE :: Num a => a+gl_SAMPLE_ALPHA_TO_COVERAGE = 0x809E++gl_SAMPLE_COVERAGE :: Num a => a+gl_SAMPLE_COVERAGE = 0x80A0++gl_NO_ERROR :: Num a => a+gl_NO_ERROR = 0++gl_INVALID_ENUM :: Num a => a+gl_INVALID_ENUM = 0x0500++gl_INVALID_VALUE :: Num a => a+gl_INVALID_VALUE = 0x0501++gl_INVALID_OPERATION :: Num a => a+gl_INVALID_OPERATION = 0x0502++gl_OUT_OF_MEMORY :: Num a => a+gl_OUT_OF_MEMORY = 0x0505++gl_CW :: Num a => a+gl_CW = 0x0900++gl_CCW :: Num a => a+gl_CCW = 0x0901++gl_LINE_WIDTH :: Num a => a+gl_LINE_WIDTH = 0x0B21++gl_ALIASED_POINT_SIZE_RANGE :: Num a => a+gl_ALIASED_POINT_SIZE_RANGE = 0x846D++gl_ALIASED_LINE_WIDTH_RANGE :: Num a => a+gl_ALIASED_LINE_WIDTH_RANGE = 0x846E++gl_CULL_FACE_MODE :: Num a => a+gl_CULL_FACE_MODE = 0x0B45++gl_FRONT_FACE :: Num a => a+gl_FRONT_FACE = 0x0B46++gl_DEPTH_RANGE :: Num a => a+gl_DEPTH_RANGE = 0x0B70++gl_DEPTH_WRITEMASK :: Num a => a+gl_DEPTH_WRITEMASK = 0x0B72++gl_DEPTH_CLEAR_VALUE :: Num a => a+gl_DEPTH_CLEAR_VALUE = 0x0B73++gl_DEPTH_FUNC :: Num a => a+gl_DEPTH_FUNC = 0x0B74++gl_STENCIL_CLEAR_VALUE :: Num a => a+gl_STENCIL_CLEAR_VALUE = 0x0B91++gl_STENCIL_FUNC :: Num a => a+gl_STENCIL_FUNC = 0x0B92++gl_STENCIL_FAIL :: Num a => a+gl_STENCIL_FAIL = 0x0B94++gl_STENCIL_PASS_DEPTH_FAIL :: Num a => a+gl_STENCIL_PASS_DEPTH_FAIL = 0x0B95++gl_STENCIL_PASS_DEPTH_PASS :: Num a => a+gl_STENCIL_PASS_DEPTH_PASS = 0x0B96++gl_STENCIL_REF :: Num a => a+gl_STENCIL_REF = 0x0B97++gl_STENCIL_VALUE_MASK :: Num a => a+gl_STENCIL_VALUE_MASK = 0x0B93++gl_STENCIL_WRITEMASK :: Num a => a+gl_STENCIL_WRITEMASK = 0x0B98++gl_STENCIL_BACK_FUNC :: Num a => a+gl_STENCIL_BACK_FUNC = 0x8800++gl_STENCIL_BACK_FAIL :: Num a => a+gl_STENCIL_BACK_FAIL = 0x8801++gl_STENCIL_BACK_PASS_DEPTH_FAIL :: Num a => a+gl_STENCIL_BACK_PASS_DEPTH_FAIL = 0x8802++gl_STENCIL_BACK_PASS_DEPTH_PASS :: Num a => a+gl_STENCIL_BACK_PASS_DEPTH_PASS = 0x8803++gl_STENCIL_BACK_REF :: Num a => a+gl_STENCIL_BACK_REF = 0x8CA3++gl_STENCIL_BACK_VALUE_MASK :: Num a => a+gl_STENCIL_BACK_VALUE_MASK = 0x8CA4++gl_STENCIL_BACK_WRITEMASK :: Num a => a+gl_STENCIL_BACK_WRITEMASK = 0x8CA5++gl_VIEWPORT :: Num a => a+gl_VIEWPORT = 0x0BA2++gl_SCISSOR_BOX :: Num a => a+gl_SCISSOR_BOX = 0x0C10++gl_COLOR_CLEAR_VALUE :: Num a => a+gl_COLOR_CLEAR_VALUE = 0x0C22++gl_COLOR_WRITEMASK :: Num a => a+gl_COLOR_WRITEMASK = 0x0C23++gl_UNPACK_ALIGNMENT :: Num a => a+gl_UNPACK_ALIGNMENT = 0x0CF5++gl_PACK_ALIGNMENT :: Num a => a+gl_PACK_ALIGNMENT = 0x0D05++gl_MAX_TEXTURE_SIZE :: Num a => a+gl_MAX_TEXTURE_SIZE = 0x0D33++gl_MAX_VIEWPORT_DIMS :: Num a => a+gl_MAX_VIEWPORT_DIMS = 0x0D3A++gl_SUBPIXEL_BITS :: Num a => a+gl_SUBPIXEL_BITS = 0x0D50++gl_RED_BITS :: Num a => a+gl_RED_BITS = 0x0D52++gl_GREEN_BITS :: Num a => a+gl_GREEN_BITS = 0x0D53++gl_BLUE_BITS :: Num a => a+gl_BLUE_BITS = 0x0D54++gl_ALPHA_BITS :: Num a => a+gl_ALPHA_BITS = 0x0D55++gl_DEPTH_BITS :: Num a => a+gl_DEPTH_BITS = 0x0D56++gl_STENCIL_BITS :: Num a => a+gl_STENCIL_BITS = 0x0D57++gl_POLYGON_OFFSET_UNITS :: Num a => a+gl_POLYGON_OFFSET_UNITS = 0x2A00++gl_POLYGON_OFFSET_FACTOR :: Num a => a+gl_POLYGON_OFFSET_FACTOR = 0x8038++gl_TEXTURE_BINDING_2D :: Num a => a+gl_TEXTURE_BINDING_2D = 0x8069++gl_SAMPLE_BUFFERS :: Num a => a+gl_SAMPLE_BUFFERS = 0x80A8++gl_SAMPLES :: Num a => a+gl_SAMPLES = 0x80A9++gl_SAMPLE_COVERAGE_VALUE :: Num a => a+gl_SAMPLE_COVERAGE_VALUE = 0x80AA++gl_SAMPLE_COVERAGE_INVERT :: Num a => a+gl_SAMPLE_COVERAGE_INVERT = 0x80AB++gl_COMPRESSED_TEXTURE_FORMATS :: Num a => a+gl_COMPRESSED_TEXTURE_FORMATS = 0x86A3++gl_DONT_CARE :: Num a => a+gl_DONT_CARE = 0x1100++gl_FASTEST :: Num a => a+gl_FASTEST = 0x1101++gl_NICEST :: Num a => a+gl_NICEST = 0x1102++gl_GENERATE_MIPMAP_HINT :: Num a => a+gl_GENERATE_MIPMAP_HINT = 0x8192++gl_BYTE :: Num a => a+gl_BYTE = 0x1400++gl_UNSIGNED_BYTE :: Num a => a+gl_UNSIGNED_BYTE = 0x1401++gl_SHORT :: Num a => a+gl_SHORT = 0x1402++gl_UNSIGNED_SHORT :: Num a => a+gl_UNSIGNED_SHORT = 0x1403++gl_INT :: Num a => a+gl_INT = 0x1404++gl_UNSIGNED_INT :: Num a => a+gl_UNSIGNED_INT = 0x1405++gl_FLOAT :: Num a => a+gl_FLOAT = 0x1406++gl_DEPTH_COMPONENT :: Num a => a+gl_DEPTH_COMPONENT = 0x1902++gl_ALPHA :: Num a => a+gl_ALPHA = 0x1906++gl_RGB :: Num a => a+gl_RGB = 0x1907++gl_RGBA :: Num a => a+gl_RGBA = 0x1908++gl_LUMINANCE :: Num a => a+gl_LUMINANCE = 0x1909++gl_LUMINANCE_ALPHA :: Num a => a+gl_LUMINANCE_ALPHA = 0x190A++gl_UNSIGNED_SHORT_4_4_4_4 :: Num a => a+gl_UNSIGNED_SHORT_4_4_4_4 = 0x8033++gl_UNSIGNED_SHORT_5_5_5_1 :: Num a => a+gl_UNSIGNED_SHORT_5_5_5_1 = 0x8034++gl_UNSIGNED_SHORT_5_6_5 :: Num a => a+gl_UNSIGNED_SHORT_5_6_5 = 0x8363++gl_FRAGMENT_SHADER :: Num a => a+gl_FRAGMENT_SHADER = 0x8B30++gl_VERTEX_SHADER :: Num a => a+gl_VERTEX_SHADER = 0x8B31++gl_MAX_VERTEX_ATTRIBS :: Num a => a+gl_MAX_VERTEX_ATTRIBS = 0x8869++gl_MAX_VERTEX_UNIFORM_VECTORS :: Num a => a+gl_MAX_VERTEX_UNIFORM_VECTORS = 0x8DFB++gl_MAX_VARYING_VECTORS :: Num a => a+gl_MAX_VARYING_VECTORS = 0x8DFC++gl_MAX_COMBINED_TEXTURE_IMAGE_UNITS :: Num a => a+gl_MAX_COMBINED_TEXTURE_IMAGE_UNITS = 0x8B4D++gl_MAX_VERTEX_TEXTURE_IMAGE_UNITS :: Num a => a+gl_MAX_VERTEX_TEXTURE_IMAGE_UNITS = 0x8B4C++gl_MAX_TEXTURE_IMAGE_UNITS :: Num a => a+gl_MAX_TEXTURE_IMAGE_UNITS = 0x8872++gl_MAX_FRAGMENT_UNIFORM_VECTORS :: Num a => a+gl_MAX_FRAGMENT_UNIFORM_VECTORS = 0x8DFD++gl_SHADER_TYPE :: Num a => a+gl_SHADER_TYPE = 0x8B4F++gl_DELETE_STATUS :: Num a => a+gl_DELETE_STATUS = 0x8B80++gl_LINK_STATUS :: Num a => a+gl_LINK_STATUS = 0x8B82++gl_VALIDATE_STATUS :: Num a => a+gl_VALIDATE_STATUS = 0x8B83++gl_ATTACHED_SHADERS :: Num a => a+gl_ATTACHED_SHADERS = 0x8B85++gl_ACTIVE_UNIFORMS :: Num a => a+gl_ACTIVE_UNIFORMS = 0x8B86++gl_ACTIVE_ATTRIBUTES :: Num a => a+gl_ACTIVE_ATTRIBUTES = 0x8B89++gl_SHADING_LANGUAGE_VERSION :: Num a => a+gl_SHADING_LANGUAGE_VERSION = 0x8B8C++gl_CURRENT_PROGRAM :: Num a => a+gl_CURRENT_PROGRAM = 0x8B8D++gl_NEVER :: Num a => a+gl_NEVER = 0x0200++gl_LESS :: Num a => a+gl_LESS = 0x0201++gl_EQUAL :: Num a => a+gl_EQUAL = 0x0202++gl_LEQUAL :: Num a => a+gl_LEQUAL = 0x0203++gl_GREATER :: Num a => a+gl_GREATER = 0x0204++gl_NOTEQUAL :: Num a => a+gl_NOTEQUAL = 0x0205++gl_GEQUAL :: Num a => a+gl_GEQUAL = 0x0206++gl_ALWAYS :: Num a => a+gl_ALWAYS = 0x0207++gl_KEEP :: Num a => a+gl_KEEP = 0x1E00++gl_REPLACE :: Num a => a+gl_REPLACE = 0x1E01++gl_INCR :: Num a => a+gl_INCR = 0x1E02++gl_DECR :: Num a => a+gl_DECR = 0x1E03++gl_INVERT :: Num a => a+gl_INVERT = 0x150A++gl_INCR_WRAP :: Num a => a+gl_INCR_WRAP = 0x8507++gl_DECR_WRAP :: Num a => a+gl_DECR_WRAP = 0x8508++gl_VENDOR :: Num a => a+gl_VENDOR = 0x1F00++gl_RENDERER :: Num a => a+gl_RENDERER = 0x1F01++gl_VERSION :: Num a => a+gl_VERSION = 0x1F02++gl_NEAREST :: Num a => a+gl_NEAREST = 0x2600++gl_LINEAR :: Num a => a+gl_LINEAR = 0x2601++gl_NEAREST_MIPMAP_NEAREST :: Num a => a+gl_NEAREST_MIPMAP_NEAREST = 0x2700++gl_LINEAR_MIPMAP_NEAREST :: Num a => a+gl_LINEAR_MIPMAP_NEAREST = 0x2701++gl_NEAREST_MIPMAP_LINEAR :: Num a => a+gl_NEAREST_MIPMAP_LINEAR = 0x2702++gl_LINEAR_MIPMAP_LINEAR :: Num a => a+gl_LINEAR_MIPMAP_LINEAR = 0x2703++gl_TEXTURE_MAG_FILTER :: Num a => a+gl_TEXTURE_MAG_FILTER = 0x2800++gl_TEXTURE_MIN_FILTER :: Num a => a+gl_TEXTURE_MIN_FILTER = 0x2801++gl_TEXTURE_WRAP_S :: Num a => a+gl_TEXTURE_WRAP_S = 0x2802++gl_TEXTURE_WRAP_T :: Num a => a+gl_TEXTURE_WRAP_T = 0x2803++gl_TEXTURE_2D :: Num a => a+gl_TEXTURE_2D = 0x0DE1++gl_TEXTURE :: Num a => a+gl_TEXTURE = 0x1702++gl_TEXTURE_CUBE_MAP :: Num a => a+gl_TEXTURE_CUBE_MAP = 0x8513++gl_TEXTURE_BINDING_CUBE_MAP :: Num a => a+gl_TEXTURE_BINDING_CUBE_MAP = 0x8514++gl_TEXTURE_CUBE_MAP_POSITIVE_X :: Num a => a+gl_TEXTURE_CUBE_MAP_POSITIVE_X = 0x8515++gl_TEXTURE_CUBE_MAP_NEGATIVE_X :: Num a => a+gl_TEXTURE_CUBE_MAP_NEGATIVE_X = 0x8516++gl_TEXTURE_CUBE_MAP_POSITIVE_Y :: Num a => a+gl_TEXTURE_CUBE_MAP_POSITIVE_Y = 0x8517++gl_TEXTURE_CUBE_MAP_NEGATIVE_Y :: Num a => a+gl_TEXTURE_CUBE_MAP_NEGATIVE_Y = 0x8518++gl_TEXTURE_CUBE_MAP_POSITIVE_Z :: Num a => a+gl_TEXTURE_CUBE_MAP_POSITIVE_Z = 0x8519++gl_TEXTURE_CUBE_MAP_NEGATIVE_Z :: Num a => a+gl_TEXTURE_CUBE_MAP_NEGATIVE_Z = 0x851A++gl_MAX_CUBE_MAP_TEXTURE_SIZE :: Num a => a+gl_MAX_CUBE_MAP_TEXTURE_SIZE = 0x851C++gl_TEXTURE0 :: Num a => a+gl_TEXTURE0 = 0x84C0++gl_TEXTURE1 :: Num a => a+gl_TEXTURE1 = 0x84C1++gl_TEXTURE2 :: Num a => a+gl_TEXTURE2 = 0x84C2++gl_TEXTURE3 :: Num a => a+gl_TEXTURE3 = 0x84C3++gl_TEXTURE4 :: Num a => a+gl_TEXTURE4 = 0x84C4++gl_TEXTURE5 :: Num a => a+gl_TEXTURE5 = 0x84C5++gl_TEXTURE6 :: Num a => a+gl_TEXTURE6 = 0x84C6++gl_TEXTURE7 :: Num a => a+gl_TEXTURE7 = 0x84C7++gl_TEXTURE8 :: Num a => a+gl_TEXTURE8 = 0x84C8++gl_TEXTURE9 :: Num a => a+gl_TEXTURE9 = 0x84C9++gl_TEXTURE10 :: Num a => a+gl_TEXTURE10 = 0x84CA++gl_TEXTURE11 :: Num a => a+gl_TEXTURE11 = 0x84CB++gl_TEXTURE12 :: Num a => a+gl_TEXTURE12 = 0x84CC++gl_TEXTURE13 :: Num a => a+gl_TEXTURE13 = 0x84CD++gl_TEXTURE14 :: Num a => a+gl_TEXTURE14 = 0x84CE++gl_TEXTURE15 :: Num a => a+gl_TEXTURE15 = 0x84CF++gl_TEXTURE16 :: Num a => a+gl_TEXTURE16 = 0x84D0++gl_TEXTURE17 :: Num a => a+gl_TEXTURE17 = 0x84D1++gl_TEXTURE18 :: Num a => a+gl_TEXTURE18 = 0x84D2++gl_TEXTURE19 :: Num a => a+gl_TEXTURE19 = 0x84D3++gl_TEXTURE20 :: Num a => a+gl_TEXTURE20 = 0x84D4++gl_TEXTURE21 :: Num a => a+gl_TEXTURE21 = 0x84D5++gl_TEXTURE22 :: Num a => a+gl_TEXTURE22 = 0x84D6++gl_TEXTURE23 :: Num a => a+gl_TEXTURE23 = 0x84D7++gl_TEXTURE24 :: Num a => a+gl_TEXTURE24 = 0x84D8++gl_TEXTURE25 :: Num a => a+gl_TEXTURE25 = 0x84D9++gl_TEXTURE26 :: Num a => a+gl_TEXTURE26 = 0x84DA++gl_TEXTURE27 :: Num a => a+gl_TEXTURE27 = 0x84DB++gl_TEXTURE28 :: Num a => a+gl_TEXTURE28 = 0x84DC++gl_TEXTURE29 :: Num a => a+gl_TEXTURE29 = 0x84DD++gl_TEXTURE30 :: Num a => a+gl_TEXTURE30 = 0x84DE++gl_TEXTURE31 :: Num a => a+gl_TEXTURE31 = 0x84DF++gl_ACTIVE_TEXTURE :: Num a => a+gl_ACTIVE_TEXTURE = 0x84E0++gl_REPEAT :: Num a => a+gl_REPEAT = 0x2901++gl_CLAMP_TO_EDGE :: Num a => a+gl_CLAMP_TO_EDGE = 0x812F++gl_MIRRORED_REPEAT :: Num a => a+gl_MIRRORED_REPEAT = 0x8370++gl_FLOAT_VEC2 :: Num a => a+gl_FLOAT_VEC2 = 0x8B50++gl_FLOAT_VEC3 :: Num a => a+gl_FLOAT_VEC3 = 0x8B51++gl_FLOAT_VEC4 :: Num a => a+gl_FLOAT_VEC4 = 0x8B52++gl_INT_VEC2 :: Num a => a+gl_INT_VEC2 = 0x8B53++gl_INT_VEC3 :: Num a => a+gl_INT_VEC3 = 0x8B54++gl_INT_VEC4 :: Num a => a+gl_INT_VEC4 = 0x8B55++gl_BOOL :: Num a => a+gl_BOOL = 0x8B56++gl_BOOL_VEC2 :: Num a => a+gl_BOOL_VEC2 = 0x8B57++gl_BOOL_VEC3 :: Num a => a+gl_BOOL_VEC3 = 0x8B58++gl_BOOL_VEC4 :: Num a => a+gl_BOOL_VEC4 = 0x8B59++gl_FLOAT_MAT2 :: Num a => a+gl_FLOAT_MAT2 = 0x8B5A++gl_FLOAT_MAT3 :: Num a => a+gl_FLOAT_MAT3 = 0x8B5B++gl_FLOAT_MAT4 :: Num a => a+gl_FLOAT_MAT4 = 0x8B5C++gl_SAMPLER_2D :: Num a => a+gl_SAMPLER_2D = 0x8B5E++gl_SAMPLER_CUBE :: Num a => a+gl_SAMPLER_CUBE = 0x8B60++gl_VERTEX_ATTRIB_ARRAY_ENABLED :: Num a => a+gl_VERTEX_ATTRIB_ARRAY_ENABLED = 0x8622++gl_VERTEX_ATTRIB_ARRAY_SIZE :: Num a => a+gl_VERTEX_ATTRIB_ARRAY_SIZE = 0x8623++gl_VERTEX_ATTRIB_ARRAY_STRIDE :: Num a => a+gl_VERTEX_ATTRIB_ARRAY_STRIDE = 0x8624++gl_VERTEX_ATTRIB_ARRAY_TYPE :: Num a => a+gl_VERTEX_ATTRIB_ARRAY_TYPE = 0x8625++gl_VERTEX_ATTRIB_ARRAY_NORMALIZED :: Num a => a+gl_VERTEX_ATTRIB_ARRAY_NORMALIZED = 0x886A++gl_VERTEX_ATTRIB_ARRAY_POINTER :: Num a => a+gl_VERTEX_ATTRIB_ARRAY_POINTER = 0x8645++gl_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING :: Num a => a+gl_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING = 0x889F++gl_COMPILE_STATUS :: Num a => a+gl_COMPILE_STATUS = 0x8B81++gl_LOW_FLOAT :: Num a => a+gl_LOW_FLOAT = 0x8DF0++gl_MEDIUM_FLOAT :: Num a => a+gl_MEDIUM_FLOAT = 0x8DF1++gl_HIGH_FLOAT :: Num a => a+gl_HIGH_FLOAT = 0x8DF2++gl_LOW_INT :: Num a => a+gl_LOW_INT = 0x8DF3++gl_MEDIUM_INT :: Num a => a+gl_MEDIUM_INT = 0x8DF4++gl_HIGH_INT :: Num a => a+gl_HIGH_INT = 0x8DF5++gl_FRAMEBUFFER :: Num a => a+gl_FRAMEBUFFER = 0x8D40++gl_RENDERBUFFER :: Num a => a+gl_RENDERBUFFER = 0x8D41++gl_RGBA4 :: Num a => a+gl_RGBA4 = 0x8056++gl_RGB5_A1 :: Num a => a+gl_RGB5_A1 = 0x8057++gl_RGB565 :: Num a => a+gl_RGB565 = 0x8D62++gl_DEPTH_COMPONENT16 :: Num a => a+gl_DEPTH_COMPONENT16 = 0x81A5++gl_STENCIL_INDEX :: Num a => a+gl_STENCIL_INDEX = 0x1901++gl_STENCIL_INDEX8 :: Num a => a+gl_STENCIL_INDEX8 = 0x8D48++gl_DEPTH_STENCIL :: Num a => a+gl_DEPTH_STENCIL = 0x84F9++gl_RENDERBUFFER_WIDTH :: Num a => a+gl_RENDERBUFFER_WIDTH = 0x8D42++gl_RENDERBUFFER_HEIGHT :: Num a => a+gl_RENDERBUFFER_HEIGHT = 0x8D43++gl_RENDERBUFFER_INTERNAL_FORMAT :: Num a => a+gl_RENDERBUFFER_INTERNAL_FORMAT = 0x8D44++gl_RENDERBUFFER_RED_SIZE :: Num a => a+gl_RENDERBUFFER_RED_SIZE = 0x8D50++gl_RENDERBUFFER_GREEN_SIZE :: Num a => a+gl_RENDERBUFFER_GREEN_SIZE = 0x8D51++gl_RENDERBUFFER_BLUE_SIZE :: Num a => a+gl_RENDERBUFFER_BLUE_SIZE = 0x8D52++gl_RENDERBUFFER_ALPHA_SIZE :: Num a => a+gl_RENDERBUFFER_ALPHA_SIZE = 0x8D53++gl_RENDERBUFFER_DEPTH_SIZE :: Num a => a+gl_RENDERBUFFER_DEPTH_SIZE = 0x8D54++gl_RENDERBUFFER_STENCIL_SIZE :: Num a => a+gl_RENDERBUFFER_STENCIL_SIZE = 0x8D55++gl_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE :: Num a => a+gl_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE = 0x8CD0++gl_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME :: Num a => a+gl_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME = 0x8CD1++gl_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL :: Num a => a+gl_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL = 0x8CD2++gl_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE :: Num a => a+gl_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE = 0x8CD3++gl_COLOR_ATTACHMENT0 :: Num a => a+gl_COLOR_ATTACHMENT0 = 0x8CE0++gl_DEPTH_ATTACHMENT :: Num a => a+gl_DEPTH_ATTACHMENT = 0x8D00++gl_STENCIL_ATTACHMENT :: Num a => a+gl_STENCIL_ATTACHMENT = 0x8D20++gl_DEPTH_STENCIL_ATTACHMENT :: Num a => a+gl_DEPTH_STENCIL_ATTACHMENT = 0x821A++gl_NONE :: Num a => a+gl_NONE = 0++gl_FRAMEBUFFER_COMPLETE :: Num a => a+gl_FRAMEBUFFER_COMPLETE = 0x8CD5++gl_FRAMEBUFFER_INCOMPLETE_ATTACHMENT :: Num a => a+gl_FRAMEBUFFER_INCOMPLETE_ATTACHMENT = 0x8CD6++gl_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT :: Num a => a+gl_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT = 0x8CD7++gl_FRAMEBUFFER_INCOMPLETE_DIMENSIONS :: Num a => a+gl_FRAMEBUFFER_INCOMPLETE_DIMENSIONS = 0x8CD9++gl_FRAMEBUFFER_UNSUPPORTED :: Num a => a+gl_FRAMEBUFFER_UNSUPPORTED = 0x8CDD++gl_FRAMEBUFFER_BINDING :: Num a => a+gl_FRAMEBUFFER_BINDING = 0x8CA6++gl_RENDERBUFFER_BINDING :: Num a => a+gl_RENDERBUFFER_BINDING = 0x8CA7++gl_MAX_RENDERBUFFER_SIZE :: Num a => a+gl_MAX_RENDERBUFFER_SIZE = 0x84E8++gl_INVALID_FRAMEBUFFER_OPERATION :: Num a => a+gl_INVALID_FRAMEBUFFER_OPERATION = 0x0506++gl_UNPACK_FLIP_Y_WEBGL :: Num a => a+gl_UNPACK_FLIP_Y_WEBGL = 0x9240++gl_UNPACK_PREMULTIPLY_ALPHA_WEBGL :: Num a => a+gl_UNPACK_PREMULTIPLY_ALPHA_WEBGL = 0x9241++gl_CONTEXT_LOST_WEBGL :: Num a => a+gl_CONTEXT_LOST_WEBGL = 0x9242++gl_UNPACK_COLORSPACE_CONVERSION_WEBGL :: Num a => a+gl_UNPACK_COLORSPACE_CONVERSION_WEBGL = 0x9243++gl_BROWSER_DEFAULT_WEBGL :: Num a => a+gl_BROWSER_DEFAULT_WEBGL = 0x9244
+ FWGL/Backend/JavaScript/WebGL/Raw.hs view
@@ -0,0 +1,514 @@+module FWGL.Backend.JavaScript.WebGL.Raw where++import Data.Int+import Data.Word++import GHCJS.Types++import FWGL.Backend.JavaScript.WebGL.Types++foreign import javascript unsafe "$1.activeTexture($2)"+        glActiveTexture :: Ctx -> Word -> IO ()++foreign import javascript unsafe "$1.attachShader($2, $3)"+        glAttachShader :: Ctx -> Program -> Shader -> IO ()++foreign import javascript unsafe "$1.bindAttribLocation($2, $3, $4)"+        glBindAttribLocation :: Ctx -> Program -> Word -> JSString -> IO ()++foreign import javascript unsafe "$1.bindBuffer($2, $3)"+        glBindBuffer :: Ctx -> Word -> Buffer -> IO ()++foreign import javascript unsafe "$1.bindFramebuffer($2, $3)"+        glBindFramebuffer :: Ctx -> Word -> FrameBuffer -> IO ()++foreign import javascript unsafe "$1.bindRenderbuffer($2, $3)"+        glBindRenderbuffer :: Ctx -> Word -> RenderBuffer -> IO ()++foreign import javascript unsafe "$1.bindTexture($2, $3)"+        glBindTexture :: Ctx -> Word -> Texture -> IO ()++foreign import javascript unsafe "$1.blendColor($2, $3, $4, $5)"+        glBlendColor :: Ctx -> Float -> Float -> Float -> Float -> IO ()++foreign import javascript unsafe "$1.blendEquation($2)"+        glBlendEquation :: Ctx -> Word -> IO ()++foreign import javascript unsafe "$1.blendEquationSeparate($2, $3)"+        glBlendEquationSeparate :: Ctx -> Word -> Word -> IO ()++foreign import javascript unsafe "$1.blendFunc($2, $3)"+        glBlendFunc :: Ctx -> Word -> Word -> IO ()++foreign import javascript unsafe "$1.blendFuncSeparate($2, $3, $4, $5)"+        glBlendFuncSeparate :: Ctx -> Word -> Word -> Word -> Word -> IO ()++{-+foreign import javascript unsafe "$1.bufferData($2, $3, $4)"+        glBufferData :: Ctx -> Word -> Word -> Word -> IO ()+-}++foreign import javascript unsafe "$1.bufferData($2, $3, $4)"+        glBufferData :: Ctx -> Word -> ArrayBufferView -> Word -> IO ()++{-+foreign import javascript unsafe "$1.bufferData($2, $3, $4)"+        glBufferData :: Ctx -> Word -> ArrayBuffer -> Word -> IO ()+-}++foreign import javascript unsafe "$1.bufferSubData($2, $3, $4)"+        glBufferSubData :: Ctx -> Word -> Word -> ArrayBufferView -> IO ()++{-+foreign import javascript unsafe "$1.bufferSubData($2, $3, $4)"+        glBufferSubData :: Ctx -> Word -> Word -> ArrayBuffer -> IO ()+-}++foreign import javascript unsafe "$1.checkFramebufferStatus($2)"+        glCheckFramebufferStatus :: Ctx -> Word -> IO Word++foreign import javascript unsafe "$1.clear($2)"+        glClear :: Ctx -> Word -> IO ()++foreign import javascript unsafe "$1.clearColor($2, $3, $4, $5)"+        glClearColor :: Ctx -> Float -> Float -> Float -> Float -> IO ()++foreign import javascript unsafe "$1.clearDepth($2)"+        glClearDepth :: Ctx -> Float -> IO ()++foreign import javascript unsafe "$1.clearStencil($2)"+        glClearStencil :: Ctx -> Int -> IO ()++foreign import javascript unsafe "$1.colorMask($2, $3, $4, $5)"+        glColorMask :: Ctx -> Bool -> Bool -> Bool -> Bool -> IO ()++foreign import javascript unsafe "$1.compileShader($2)"+        glCompileShader :: Ctx -> Shader -> IO ()++foreign import javascript unsafe "$1.compressedTexImage2D($2, $3, $4, $5, $6, $7, $8)"+        glCompressedTexImage2D :: Ctx -> Word -> Int -> Word -> Int -> Int -> Int -> ArrayBufferView -> IO ()++foreign import javascript unsafe "$1.compressedTexSubImage2D($2, $3, $4, $5, $6, $7, $8, $9)"+        glCompressedTexSubImage2D :: Ctx -> Word -> Int -> Int -> Int -> Int -> Int -> Word -> ArrayBufferView -> IO ()++foreign import javascript unsafe "$1.copyTexImage2D($2, $3, $4, $5, $6, $7, $8, $9)"+        glCopyTexImage2D :: Ctx -> Word -> Int -> Word -> Int -> Int -> Int -> Int -> Int -> IO ()++foreign import javascript unsafe "$1.copyTexSubImage2D($2, $3, $4, $5, $6, $7, $8, $9)"+        glCopyTexSubImage2D :: Ctx -> Word -> Int -> Int -> Int -> Int -> Int -> Int -> Int -> IO ()++foreign import javascript unsafe "$1.createBuffer()"+        glCreateBuffer :: Ctx -> IO Buffer++foreign import javascript unsafe "$1.createFramebuffer()"+        glCreateFramebuffer :: Ctx -> IO FrameBuffer++foreign import javascript unsafe "$1.createProgram()"+        glCreateProgram :: Ctx -> IO Program++foreign import javascript unsafe "$1.createRenderbuffer()"+        glCreateRenderbuffer :: Ctx -> IO RenderBuffer++foreign import javascript unsafe "$1.createShader($2)"+        glCreateShader :: Ctx -> Word -> IO Shader++foreign import javascript unsafe "$1.createTexture()"+        glCreateTexture :: Ctx -> IO Texture++foreign import javascript unsafe "$1.cullFace($2)"+        glCullFace :: Ctx -> Word -> IO ()++foreign import javascript unsafe "$1.deleteBuffer($2)"+        glDeleteBuffer :: Ctx -> Buffer -> IO ()++foreign import javascript unsafe "$1.deleteFramebuffer($2)"+        glDeleteFramebuffer :: Ctx -> FrameBuffer -> IO ()++foreign import javascript unsafe "$1.deleteProgram($2)"+        glDeleteProgram :: Ctx -> Program -> IO ()++foreign import javascript unsafe "$1.deleteRenderbuffer($2)"+        glDeleteRenderbuffer :: Ctx -> RenderBuffer -> IO ()++foreign import javascript unsafe "$1.deleteShader($2)"+        glDeleteShader :: Ctx -> Shader -> IO ()++foreign import javascript unsafe "$1.deleteTexture($2)"+        glDeleteTexture :: Ctx -> Texture -> IO ()++foreign import javascript unsafe "$1.depthFunc($2)"+        glDepthFunc :: Ctx -> Word -> IO ()++foreign import javascript unsafe "$1.depthMask($2)"+        glDepthMask :: Ctx -> Bool -> IO ()++foreign import javascript unsafe "$1.depthRange($2, $3)"+        glDepthRange :: Ctx -> Float -> Float -> IO ()++foreign import javascript unsafe "$1.detachShader($2, $3)"+        glDetachShader :: Ctx -> Program -> Shader -> IO ()++foreign import javascript unsafe "$1.disable($2)"+        glDisable :: Ctx -> Word -> IO ()++foreign import javascript unsafe "$1.disableVertexAttribArray($2)"+        glDisableVertexAttribArray :: Ctx -> Word -> IO ()++foreign import javascript unsafe "$1.drawArrays($2, $3, $4)"+        glDrawArrays :: Ctx -> Word -> Int -> Int -> IO ()++foreign import javascript unsafe "$1.drawElements($2, $3, $4, $5)"+        glDrawElements :: Ctx -> Word -> Int -> Word -> Word -> IO ()++foreign import javascript unsafe "$1.enable($2)"+        glEnable :: Ctx -> Word -> IO ()++foreign import javascript unsafe "$1.enableVertexAttribArray($2)"+        glEnableVertexAttribArray :: Ctx -> Word -> IO ()++foreign import javascript unsafe "$1.finish()"+        glFinish :: Ctx -> IO ()++foreign import javascript unsafe "$1.flush()"+        glFlush :: Ctx -> IO ()++foreign import javascript unsafe "$1.framebufferRenderbuffer($2, $3, $4, $5)"+        glFramebufferRenderbuffer :: Ctx -> Word -> Word -> Word -> RenderBuffer -> IO ()++foreign import javascript unsafe "$1.framebufferTexture2D($2, $3, $4, $5, $6)"+        glFramebufferTexture2D :: Ctx -> Word -> Word -> Word -> Texture -> Int -> IO ()++foreign import javascript unsafe "$1.frontFace($2)"+        glFrontFace :: Ctx -> Word -> IO ()++foreign import javascript unsafe "$1.generateMipmap($2)"+        glGenerateMipmap :: Ctx -> Word -> IO ()++foreign import javascript unsafe "$1.getActiveAttrib($2, $3)"+        glGetActiveAttrib :: Ctx -> Program -> Word -> IO ActiveInfo++foreign import javascript unsafe "$1.getActiveUniform($2, $3)"+        glGetActiveUniform :: Ctx -> Program -> Word -> IO ActiveInfo++{-+foreign import javascript unsafe "$1.getAttachedShaders($2)"+        glGetAttachedShaders :: Ctx -> Program -> IO (Sequence Shader)+-}++foreign import javascript unsafe "$1.getAttribLocation($2, $3)"+        glGetAttribLocation :: Ctx -> Program -> JSString -> IO Int++foreign import javascript unsafe "$1.getBufferParameter($2, $3)"+        glGetBufferParameter :: Ctx -> Word -> Word -> IO (JSRef a)++foreign import javascript unsafe "$1.getParameter($2)"+        glGetParameter :: Ctx -> Word -> IO (JSRef a)++foreign import javascript unsafe "$1.getError()"+        glGetError :: Ctx -> IO Word++foreign import javascript unsafe "$1.getFramebufferAttachmentParameter($2, $3)"+        glGetFramebufferAttachmentParameter :: Ctx -> Word -> Word -> IO Word++foreign import javascript unsafe "$1.getProgramInfoLog($2)"+        glGetProgramInfoLog :: Ctx -> Program -> IO JSString++foreign import javascript unsafe "$1.getRenderbufferParameter($2, $3)"+        glGetRenderbufferParameter :: Ctx -> Word -> Word -> IO (JSRef a)++foreign import javascript unsafe "$1.getShaderParameter($2, $3)"+        glGetShaderParameter :: Ctx -> Shader -> Word -> IO (JSRef a)++foreign import javascript unsafe "$1.getShaderPrecisionFormat($2, $3)"+        glGetShaderPrecisionFormat :: Ctx -> Word -> Word -> IO ShaderPrecisionFormat++foreign import javascript unsafe "$1.getShaderInfoLog($2)"+        glGetShaderInfoLog :: Ctx -> Shader -> IO JSString++foreign import javascript unsafe "$1.getShaderSource($2)"+        glGetShaderSource :: Ctx -> Shader -> IO JSString++foreign import javascript unsafe "$1.getTexParameter($2, $3)"+        glGetTexParameter :: Ctx -> Word -> Word -> IO (JSRef a)++foreign import javascript unsafe "$1.getUniform($2, $3)"+        glGetUniform :: Ctx -> Program -> UniformLocation -> IO (JSRef a)++foreign import javascript unsafe "$1.getUniformLocation($2, $3)"+        glGetUniformLocation :: Ctx -> Program -> JSString -> IO UniformLocation++foreign import javascript unsafe "$1.getVertexAttrib($2, $3)"+        glGetVertexAttrib :: Ctx -> Word -> Word -> IO (JSRef a)++foreign import javascript unsafe "$1.getVertexAttribOffset($2, $3)"+        glGetVertexAttribOffset :: Ctx -> Word -> Word -> IO Word++foreign import javascript unsafe "$1.hint($2, $3)"+        glHint :: Ctx -> Word -> Word -> IO ()++foreign import javascript unsafe "$1.isBuffer($2)"+        glIsBuffer :: Ctx -> Buffer -> IO Bool++foreign import javascript unsafe "$1.isEnabled($2)"+        glIsEnabled :: Ctx -> Word -> IO Bool++foreign import javascript unsafe "$1.isFramebuffer($2)"+        glIsFramebuffer :: Ctx -> FrameBuffer -> IO Bool++foreign import javascript unsafe "$1.isProgram($2)"+        glIsProgram :: Ctx -> Program -> IO Bool++foreign import javascript unsafe "$1.isRenderbuffer($2)"+        glIsRenderbuffer :: Ctx -> RenderBuffer -> IO Bool++foreign import javascript unsafe "$1.isShader($2)"+        glIsShader :: Ctx -> Shader -> IO Bool++foreign import javascript unsafe "$1.isTexture($2)"+        glIsTexture :: Ctx -> Texture -> IO Bool++foreign import javascript unsafe "$1.lineWidth($2)"+        glLineWidth :: Ctx -> Float -> IO ()++foreign import javascript unsafe "$1.linkProgram($2)"+        glLinkProgram :: Ctx -> Program -> IO ()++foreign import javascript unsafe "$1.pixelStorei($2, $3)"+        glPixelStorei :: Ctx -> Word -> Int -> IO ()++foreign import javascript unsafe "$1.polygonOffset($2, $3)"+        glPolygonOffset :: Ctx -> Float -> Float -> IO ()++foreign import javascript unsafe "$1.readPixels($2, $3, $4, $5, $6, $7, $8)"+        glReadPixels :: Ctx -> Int -> Int -> Int -> Int -> Word -> Word -> ArrayBufferView -> IO ()++foreign import javascript unsafe "$1.renderbufferStorage($2, $3, $4, $5)"+        glRenderbufferStorage :: Ctx -> Word -> Word -> Int -> Int -> IO ()++foreign import javascript unsafe "$1.sampleCoverage($2, $3)"+        glSampleCoverage :: Ctx -> Float -> Bool -> IO ()++foreign import javascript unsafe "$1.scissor($2, $3, $4, $5)"+        glScissor :: Ctx -> Int -> Int -> Int -> Int -> IO ()++foreign import javascript unsafe "$1.shaderSource($2, $3)"+        glShaderSource :: Ctx -> Shader -> JSString -> IO ()++foreign import javascript unsafe "$1.stencilFunc($2, $3, $4)"+        glStencilFunc :: Ctx -> Word -> Int -> Word -> IO ()++foreign import javascript unsafe "$1.stencilFuncSeparate($2, $3, $4, $5)"+        glStencilFuncSeparate :: Ctx -> Word -> Word -> Int -> Word -> IO ()++foreign import javascript unsafe "$1.stencilMask($2)"+        glStencilMask :: Ctx -> Word -> IO ()++foreign import javascript unsafe "$1.stencilMaskSeparate($2, $3)"+        glStencilMaskSeparate :: Ctx -> Word -> Word -> IO ()++foreign import javascript unsafe "$1.stencilOp($2, $3, $4)"+        glStencilOp :: Ctx -> Word -> Word -> Word -> IO ()++foreign import javascript unsafe "$1.stencilOpSeparate($2, $3, $4, $5)"+        glStencilOpSeparate :: Ctx -> Word -> Word -> Word -> Word -> IO ()++foreign import javascript unsafe "$1.texImage2D($2, $3, $4, $5, $6, $7, $8, $9, $10)"+        glTexImage2DBuffer :: Ctx -> Word -> Int -> Int -> Int -> Int -> Int -> Word -> Word -> ArrayBufferView -> IO ()++foreign import javascript unsafe "$1.texImage2D($2, $3, $4, $5, $6, $7)"+        glTexImage2DElement :: Ctx -> Word -> Int -> Int -> Word -> Word -> Image -> IO ()++{-+foreign import javascript unsafe "$1.texImage2D()"+        glTexImage2D :: Ctx -> Word -> Int -> Word -> Word -> Word -> CanvasElement -> Void ++foreign import javascript unsafe "$1.texImage2D()"+        glTexImage2D :: Ctx -> Word -> Int -> Word -> Word -> Word -> VideoElement -> Void +-}++foreign import javascript unsafe "$1.texParameterf($2, $3, $4)"+        glTexParameterf :: Ctx -> Word -> Word -> Float -> IO ()++foreign import javascript unsafe "$1.texParameteri($2, $3, $4)"+        glTexParameteri :: Ctx -> Word -> Word -> Int -> IO ()++foreign import javascript unsafe "$1.texSubImage2D($2, $3, $4, $5, $6, $7, $8, $9, $10)"+        glTexSubImage2D :: Ctx -> Word -> Int -> Int -> Int -> Int -> Int -> Word -> Word -> ArrayBufferView -> IO ()++{-++foreign import javascript unsafe "$1.texSubImage2D()"+        glTexSubImage2D :: Ctx -> Word -> Int -> Int -> Int -> Word -> Word -> CanvasElement -> Void ++foreign import javascript unsafe "$1.texSubImage2D()"+        glTexSubImage2D :: Ctx -> Word -> Int -> Int -> Int -> Word -> Word -> VideoElement -> Void ++-}++foreign import javascript unsafe "$1.uniform1f($2, $3)"+        glUniform1f :: Ctx -> UniformLocation -> Float -> IO ()++foreign import javascript unsafe "$1.uniform1fv($2, $3)"+        glUniform1fv :: Ctx -> UniformLocation -> Float32Array -> IO ()++{-+foreign import javascript unsafe "$1.uniform1fv($2 Sequence Float ->)"+        glUniform1fv :: Ctx -> UniformLocation -> Sequence Float -> IO ()+-}++foreign import javascript unsafe "$1.uniform1i($2, $3)"+        glUniform1i :: Ctx -> UniformLocation -> Int -> IO ()++foreign import javascript unsafe "$1.uniform1iv($2, $3)"+        glUniform1iv :: Ctx -> UniformLocation -> Int32Array -> IO ()++{-+foreign import javascript unsafe "$1.uniform1iv($2 Sequence Int ->)"+        glUniform1iv :: Ctx -> UniformLocation -> Sequence Int -> IO ()+-}++foreign import javascript unsafe "$1.uniform2f($2, $3, $4)"+        glUniform2f :: Ctx -> UniformLocation -> Float -> Float -> IO ()++foreign import javascript unsafe "$1.uniform2fv($2, $3)"+        glUniform2fv :: Ctx -> UniformLocation -> Float32Array -> IO ()++{-+foreign import javascript unsafe "$1.uniform2fv($2 Sequence Float ->)"+        glUniform2fv :: Ctx -> UniformLocation -> Sequence Float -> IO ()+-}++foreign import javascript unsafe "$1.uniform2i($2, $3, $4)"+        glUniform2i :: Ctx -> UniformLocation -> Int -> Int -> IO ()++foreign import javascript unsafe "$1.uniform2iv($2, $3)"+        glUniform2iv :: Ctx -> UniformLocation -> Int32Array -> IO ()++{-+foreign import javascript unsafe "$1.uniform2iv($2 Sequence Int ->)"+        glUniform2iv :: Ctx -> UniformLocation -> Sequence Int -> IO ()+-}++foreign import javascript unsafe "$1.uniform3f($2, $3, $4, $5)"+        glUniform3f :: Ctx -> UniformLocation -> Float -> Float -> Float -> IO ()++foreign import javascript unsafe "$1.uniform3fv($2, $3)"+        glUniform3fv :: Ctx -> UniformLocation -> Float32Array -> IO ()++{-+foreign import javascript unsafe "$1.uniform3fv($2 Sequence Float ->)"+        glUniform3fv :: Ctx -> UniformLocation -> Sequence Float -> IO ()+-}++foreign import javascript unsafe "$1.uniform3i($2, $3, $4, $5)"+        glUniform3i :: Ctx -> UniformLocation -> Int -> Int -> Int -> IO ()++foreign import javascript unsafe "$1.uniform3iv($2, $3)"+        glUniform3iv :: Ctx -> UniformLocation -> Int32Array -> IO ()++{-+foreign import javascript unsafe "$1.uniform3iv($2 Sequence Int ->)"+        glUniform3iv :: Ctx -> UniformLocation -> Sequence Int -> IO ()+-}++foreign import javascript unsafe "$1.uniform4f($2, $3, $4, $5, $6)"+        glUniform4f :: Ctx -> UniformLocation -> Float -> Float -> Float -> Float -> IO ()++foreign import javascript unsafe "$1.uniform4fv($2, $3)"+        glUniform4fv :: Ctx -> UniformLocation -> Float32Array -> IO ()++{-+foreign import javascript unsafe "$1.uniform4fv($2 Sequence Float ->)"+        glUniform4fv :: Ctx -> UniformLocation -> Sequence Float -> IO ()+-}++foreign import javascript unsafe "$1.uniform4i($2, $3, $4, $5, $6)"+        glUniform4i :: Ctx -> UniformLocation -> Int -> Int -> Int -> Int -> IO ()++foreign import javascript unsafe "$1.uniform4iv($2, $3)"+        glUniform4iv :: Ctx -> UniformLocation -> Int32Array -> IO ()++{-+foreign import javascript unsafe "$1.uniform4iv($2 Sequence Int ->)"+        glUniform4iv :: Ctx -> UniformLocation -> Sequence Int -> IO ()+-}++foreign import javascript unsafe "$1.uniformMatrix2fv($2, $3, $4)"+        glUniformMatrix2fv :: Ctx -> UniformLocation -> Bool -> Float32Array -> IO ()++{-+foreign import javascript unsafe "$1.uniformMatrix2fv($2, $3 Sequence Float ->)"+        glUniformMatrix2fv :: Ctx -> UniformLocation -> Bool -> Sequence Float -> IO ()+-}++foreign import javascript unsafe "$1.uniformMatrix3fv($2, $3, $4)"+        glUniformMatrix3fv :: Ctx -> UniformLocation -> Bool -> Float32Array -> IO ()++{-+foreign import javascript unsafe "$1.uniformMatrix3fv($2, $3 Sequence Float ->)"+        glUniformMatrix3fv :: Ctx -> UniformLocation -> Bool -> Sequence Float -> IO ()+-}++foreign import javascript unsafe "$1.uniformMatrix4fv($2, $3, $4)"+        glUniformMatrix4fv :: Ctx -> UniformLocation -> Bool -> Float32Array -> IO ()++{-+foreign import javascript unsafe "$1.uniformMatrix4fv($2, $3 Sequence Float ->)"+        glUniformMatrix4fv :: Ctx -> UniformLocation -> Bool -> Sequence Float -> IO ()+-}++foreign import javascript unsafe "$1.useProgram($2)"+        glUseProgram :: Ctx -> Program -> IO ()++foreign import javascript unsafe "$1.validateProgram($2)"+        glValidateProgram :: Ctx -> Program -> IO ()++foreign import javascript unsafe "$1.vertexAttrib1f($2, $3)"+        glVertexAttrib1f :: Ctx -> Word -> Float -> IO ()++foreign import javascript unsafe "$1.vertexAttrib1fv($2, $3)"+        glVertexAttrib1fv :: Ctx -> Word -> Float32Array -> IO ()++{-+foreign import javascript unsafe "$1.vertexAttrib1fv($2 Sequence Float ->)"+        glVertexAttrib1fv :: Ctx -> Word -> Sequence Float -> IO ()+-}++foreign import javascript unsafe "$1.vertexAttrib2f($2, $3, $4)"+        glVertexAttrib2f :: Ctx -> Word -> Float -> Float -> IO ()++foreign import javascript unsafe "$1.vertexAttrib2fv($2, $3)"+        glVertexAttrib2fv :: Ctx -> Word -> Float32Array -> IO ()++{-+foreign import javascript unsafe "$1.vertexAttrib2fv($2 Sequence Float ->)"+        glVertexAttrib2fv :: Ctx -> Word -> Sequence Float -> IO ()+-}++foreign import javascript unsafe "$1.vertexAttrib3f($2, $3, $4, $5)"+        glVertexAttrib3f :: Ctx -> Word -> Float -> Float -> Float -> IO ()++foreign import javascript unsafe "$1.vertexAttrib3fv($2, $3)"+        glVertexAttrib3fv :: Ctx -> Word -> Float32Array -> IO ()++{-+foreign import javascript unsafe "$1.vertexAttrib3fv($2 Sequence Float ->)"+        glVertexAttrib3fv :: Ctx -> Word -> Sequence Float -> IO ()+-}++foreign import javascript unsafe "$1.vertexAttrib4f($2, $3, $4, $5, $6)"+        glVertexAttrib4f :: Ctx -> Word -> Float -> Float -> Float -> Float -> IO ()++foreign import javascript unsafe "$1.vertexAttrib4fv($2, $3)"+        glVertexAttrib4fv :: Ctx -> Word -> Float32Array -> IO ()++{-+foreign import javascript unsafe "$1.vertexAttrib4fv($2 Sequence Float ->)"+        vertexAttrib4fv :: Ctx -> Word -> Sequence Float -> IO ()+-}++foreign import javascript unsafe "$1.vertexAttribPointer($2, $3, $4, $5, $6, $7)"+        glVertexAttribPointer :: Ctx -> Word -> Int -> Word -> Bool -> Int -> Word -> IO ()++foreign import javascript unsafe "$1.viewport($2, $3, $4, $5)"+        glViewport :: Ctx -> Int -> Int -> Int -> Int -> IO ()
+ FWGL/Backend/JavaScript/WebGL/Types.hs view
@@ -0,0 +1,136 @@+{-# LANGUAGE FlexibleInstances, MultiParamTypeClasses, TypeSynonymInstances #-}++module FWGL.Backend.JavaScript.WebGL.Types (+        Ctx,+        Image,+        Float32Array,+        Int32Array,+        Uint16Array,+        Program,+        Shader,+        Buffer,+        FrameBuffer,+        RenderBuffer,+        Texture,+        UniformLocation,+        ActiveInfo,+        ShaderPrecisionFormat,+        ArrayBufferView,+        getCtx,+        float32Array,+        int32Array,+        uint16Array,+        uint8Array,+        float32View,+        int32View,+        uint16View,+        uint8View,+        toJSArray,+        listToJSArray,+        noBuffer,+        noTexture,+        noArray+) where++import Data.Int (Int32)+import Data.Word (Word8, Word16)+import GHCJS.Marshal+import GHCJS.Foreign+import GHCJS.Types++data Ctx_+type Ctx = JSRef Ctx_++data Image_+type Image = JSRef Image_++data Float32Array_+type Float32Array = JSRef Float32Array_++data Int32Array_+type Int32Array = JSRef Int32Array_++data Uint16Array_+type Uint16Array = JSRef Uint16Array_++data Uint8Array_+type Uint8Array = JSRef Uint8Array_++data Program_+type Program = JSRef Program_++data Shader_+type Shader = JSRef Shader_++data Buffer_+type Buffer = JSRef Buffer_++data FrameBuffer_+type FrameBuffer = JSRef FrameBuffer_++data RenderBuffer_+type RenderBuffer = JSRef RenderBuffer_++data Texture_+type Texture = JSRef Texture_++data UniformLocation_+type UniformLocation = JSRef UniformLocation_++data ActiveInfo_+type ActiveInfo = JSRef ActiveInfo_++data ShaderPrecisionFormat_+type ShaderPrecisionFormat = JSRef ShaderPrecisionFormat_++data ArrayBufferView_+type ArrayBufferView = JSRef ArrayBufferView_++noBuffer :: Buffer+noBuffer = jsNull++noTexture :: Texture+noTexture = jsNull++noArray :: IO ArrayBufferView+noArray = return jsNull++float32View :: JSArray Float -> IO ArrayBufferView+float32View = fmap castRef . float32Array++int32View :: JSArray Int32 -> IO ArrayBufferView+int32View = fmap castRef . int32Array++uint16View :: JSArray Word16 -> IO ArrayBufferView+uint16View = fmap castRef . uint16Array++uint8View :: JSArray Word8 -> IO ArrayBufferView+uint8View = fmap castRef . uint8Array++toJSArray :: ToJSRef a => (v -> Maybe (a, v)) -> v -> IO (JSArray a)+toJSArray next iv = newArray >>= iterPush iv+        where iterPush v arr = case next v of+                                        Just (x, v') -> do xRef <- toJSRef x+                                                           pushArray xRef arr+                                                           iterPush v' arr+                                        Nothing -> return arr++listToJSArray :: ToJSRef a => [a] -> IO (JSArray a)+listToJSArray = toJSArray deconstr+        where deconstr (x : xs) = Just (x, xs)+              deconstr [] = Nothing++foreign import javascript unsafe "$r = new Float32Array($1);"+        float32Array :: JSArray Float -> IO Float32Array++foreign import javascript unsafe "$r = new Int32Array($1);"+        int32Array :: JSArray Int32 -> IO Int32Array++foreign import javascript unsafe "$r = new Uint16Array($1);"+        uint16Array :: JSArray Word16 -> IO Uint16Array++foreign import javascript unsafe "$r = new Uint8Array($1);"+        uint8Array :: JSArray Word8 -> IO Uint8Array++foreign import javascript unsafe "$r = $1.getContext(\"webgl\");"+        getCtx :: JSRef a -> IO Ctx
+ LICENSE view
@@ -0,0 +1,30 @@+Copyright (c) 2014-2015, Luca Prezzavento++All rights reserved.++Redistribution and use in source and binary forms, with or without+modification, are permitted provided that the following conditions are met:++    * Redistributions of source code must retain the above copyright+      notice, this list of conditions and the following disclaimer.++    * Redistributions in binary form must reproduce the above+      copyright notice, this list of conditions and the following+      disclaimer in the documentation and/or other materials provided+      with the distribution.++    * Neither the name of Luca "ZioCrocifisso" Prezzavento nor the names of other+      contributors may be used to endorse or promote products derived+      from this software without specific prior written permission.++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ Setup.hs view
@@ -0,0 +1,2 @@+import Distribution.Simple+main = defaultMain
+ fwgl-javascript.cabal view
@@ -0,0 +1,21 @@+name:                fwgl-javascript+version:             0.1.0.2+synopsis:            FWGL GHCJS backend+description:         FWGL GHCJS backend+homepage:            https://github.com/ZioCrocifisso/FWGL+stability:           experimental+license:             BSD3+license-file:        LICENSE+author:              Luca "ZioCrocifisso" Prezzavento+maintainer:          ziocroc@gmail.com+category:            Game, Game Engine, Javascript+build-type:          Simple+cabal-version:       >=1.10++library+  exposed-modules:     FWGL.Backend.JavaScript+  other-modules:       FWGL.Backend.JavaScript.WebGL, FWGL.Backend.JavaScript.Event, FWGL.Backend.JavaScript.WebGL.Const, FWGL.Backend.JavaScript.WebGL.Types, FWGL.Backend.JavaScript.WebGL.Raw+  other-extensions:    FlexibleInstances, MultiParamTypeClasses, TypeSynonymInstances+  build-depends:       fwgl >= 0.1 && < 0.2, Yampa, base >=4.7 && <4.8, hashable >=1.2 && <1.3, unordered-containers >=0.2 && <0.3, ghcjs-base+  hs-source-dirs:      .+  default-language:    Haskell2010