packages feed

fwgl-glfw (empty) → 0.1.0.2

raw patch · 6 files changed

+797/−0 lines, 6 filesdep +GLFW-bdep +JuicyPixelsdep +Yampasetup-changed

Dependencies added: GLFW-b, JuicyPixels, Yampa, base, fwgl, gl, hashable, transformers, unordered-containers, vector

Files

+ FWGL/Backend/GLFW/Common.hs view
@@ -0,0 +1,232 @@+module FWGL.Backend.GLFW.Common (+        loadImage,+        setup,+        ClientAPI(..)+) where++import Codec.Picture+import Codec.Picture.Types (promoteImage)+import Control.Concurrent+import qualified Data.HashMap.Strict as H+import Data.IORef+import Data.Vector.Storable (unsafeWith)+import Foreign.Ptr+import FRP.Yampa+import FWGL.Backend.GLES hiding (Image)+import FWGL.Input as Input+import Graphics.UI.GLFW as GLFW++loadImage :: (Num sz, Num sz') => String+          -> (((sz', sz', Ptr ()), sz, sz) -> IO a) -> IO a+loadImage path c = do eimg <- readImage path+                      case eimg of+                            Left err -> error err+                            Right img ->+                                    case convert img of+                                        Image w h v -> unsafeWith v $+                                                \p -> c ( ( fromIntegral w+                                                          , fromIntegral h+                                                          , castPtr p)+                                                        , fromIntegral w+                                                        , fromIntegral h)+        where convert :: DynamicImage -> Image PixelRGBA8+              convert (ImageRGBA8 img) = img+              convert (ImageRGB8 img) = promoteImage img+              convert (ImageYA8 img) = promoteImage img+              convert (ImageY8 img) = promoteImage img+              convert _ = error "Unsupported image format."++setup :: ClientAPI -> Int -> Int+      -> (Int -> Int -> () -> IO state)+      -> (out -> () -> state -> IO state)+      -> SF Input out+      -> IO ()+setup clientAPI maj min initState draw sigf =+        do GLFW.init -- TODO: checks+           windowHint $ WindowHint'ClientAPI clientAPI+           windowHint $ WindowHint'ContextVersionMajor maj+           windowHint $ WindowHint'ContextVersionMinor min+           Just win <- createWindow 640 480 "" Nothing Nothing -- TODO: custom size, title+           makeContextCurrent $ Just win+           (w, h) <- getFramebufferSize win++           eventsRef <- newMVar H.empty+           drawStateRef <- initState w h () >>= newIORef+           reactStateRef <- reactInit (return $ initInput w h)+                                      (\_ _ -> actuate win drawStateRef)+                                      sigf+           setTime 0++           setKeyCallback win $ Just . const $ addKeyEvent eventsRef+           setMouseButtonCallback win . Just $ addMouseEvent eventsRef+           setCursorPosCallback win $ Just . const $ addCursorPos eventsRef++           setFramebufferSizeCallback win $ Just . const $+                   addFramebufferResize eventsRef+           setWindowRefreshCallback win $ Just . const $+                   refresh eventsRef reactStateRef++           let loop = do pollEvents+                         refresh eventsRef reactStateRef+                         close <- windowShouldClose win+                         if close+                                then do destroyWindow win+                                        terminate+                                else threadDelay 16000 >> loop+           loop+        where refresh er rsf = do (Just tm) <- getTime+                                  modifyMVar_ er $ \inp -> do+                                        react rsf (tm * 1000, Just $ Input inp)+                                        return H.empty+                                  setTime 0++              actuate win stateRef out = do newState <- readIORef stateRef+                                                        >>= draw out ()+                                            swapBuffers win+                                            writeIORef stateRef newState+                                            return False++              addKeyEvent events key _ keyState _ = modifyEvents events $+                      case keyState of+                              KeyState'Pressed -> insertEvent KeyDown keyData+                              KeyState'Released -> insertEvent KeyUp keyData+                              _ -> id+                where keyData = emptyEventData {+                                        dataKey = Just $ toKey key+                                }++              addMouseEvent events win mb mbState _ = do+                      pos <- fmap convertCursorPos $ getCursorPos win+                      modifyEvents events $+                        case mbState of+                                MouseButtonState'Pressed ->+                                        insertEvent MouseDown $ keyData pos+                                MouseButtonState'Released ->+                                        insertEvent MouseUp $ keyData pos+                where keyData p = emptyEventData {+                                        dataButton = Just $ toMouseButton mb,+                                        dataPointer = Just p+                                }++              addCursorPos events x y = modifyEvents events $+                      insertEvent MouseMove $ emptyEventData {+                                dataPointer = Just $ convertCursorPos (x, y)+                        }++              addFramebufferResize events x y = modifyEvents events $+                      insertEvent Resize $ emptyEventData {+                                dataFramebufferSize = Just $ (x, y)+                        }+                      -- TODO: viewport++              convertCursorPos (x, y) = (floor x, floor y)++              initInput w h = Input $ H.singleton Resize [+                        emptyEventData {+                                dataFramebufferSize = Just (w, h)+                        }]++              insertEvent e = H.insertWith (flip (++)) e . return++              modifyEvents m f = modifyMVar_ m $ return . f++              emptyEventData = EventData {+                                dataFramebufferSize = Nothing,+                                dataPointer = Nothing,+                                dataButton = Nothing,+                                dataKey = Nothing }++toMouseButton :: GLFW.MouseButton -> Input.MouseButton+toMouseButton MouseButton'1 = MouseLeft+toMouseButton MouseButton'3 = MouseMiddle+toMouseButton MouseButton'2 = MouseRight++toKey :: GLFW.Key -> Input.Key+toKey Key'A = KeyA+toKey Key'B = KeyB+toKey Key'C = KeyC+toKey Key'D = KeyD+toKey Key'E = KeyE+toKey Key'F = KeyF+toKey Key'G = KeyG+toKey Key'H = KeyH+toKey Key'I = KeyI+toKey Key'J = KeyJ+toKey Key'K = KeyK+toKey Key'L = KeyL+toKey Key'M = KeyM+toKey Key'N = KeyN+toKey Key'O = KeyO+toKey Key'P = KeyP+toKey Key'Q = KeyQ+toKey Key'R = KeyR+toKey Key'S = KeyS+toKey Key'T = KeyT+toKey Key'U = KeyU+toKey Key'V = KeyV+toKey Key'W = KeyW+toKey Key'X = KeyX+toKey Key'Y = KeyY+toKey Key'Z = KeyZ+toKey Key'0 = Key0+toKey Key'1 = Key1+toKey Key'2 = Key2+toKey Key'3 = Key3+toKey Key'4 = Key4+toKey Key'5 = Key5+toKey Key'6 = Key6+toKey Key'7 = Key7+toKey Key'8 = Key8+toKey Key'9 = Key9+toKey Key'Space = KeySpace+toKey Key'Enter = KeyEnter+toKey Key'Tab = KeyTab+toKey Key'Escape = KeyEsc+toKey Key'Backspace = KeyBackspace+toKey Key'LeftShift = KeyShift -- TODO: different shifts+toKey Key'RightShift = KeyShift+toKey Key'LeftControl = KeyControl -- TODO: //+toKey Key'RightControl = KeyControl+toKey Key'LeftAlt = KeyAlt -- TODO: //+toKey Key'RightAlt = KeyAlt+toKey Key'CapsLock = KeyCapsLock+toKey Key'NumLock = KeyNumLock+toKey Key'Left = KeyArrowLeft+toKey Key'Up = KeyArrowUp+toKey Key'Right = KeyArrowRight+toKey Key'Down = KeyArrowDown+toKey Key'Insert = KeyIns+toKey Key'Delete = KeyDel+toKey Key'Home = KeyHome+toKey Key'End = KeyEnd+toKey Key'PageUp = KeyPgUp+toKey Key'PageDown = KeyPgDown+toKey Key'F1 = KeyF1+toKey Key'F2 = KeyF2+toKey Key'F3 = KeyF3+toKey Key'F4 = KeyF4+toKey Key'F5 = KeyF5+toKey Key'F6 = KeyF6+toKey Key'F7 = KeyF7+toKey Key'F8 = KeyF8+toKey Key'F9 = KeyF9+toKey Key'F10 = KeyF10+toKey Key'F11 = KeyF11+toKey Key'F12 = KeyF12+toKey Key'PadAdd = KeyPadAdd+toKey Key'PadSubtract = KeyPadSub+toKey Key'PadMultiply = KeyPadMul+toKey Key'PadDivide = KeyPadDiv+toKey Key'PadEnter = KeyPadEnter+toKey Key'PadDecimal = KeyPadDot+toKey Key'Pad0 = KeyPad0+toKey Key'Pad1 = KeyPad1+toKey Key'Pad2 = KeyPad2+toKey Key'Pad3 = KeyPad3+toKey Key'Pad4 = KeyPad4+toKey Key'Pad5 = KeyPad5+toKey Key'Pad6 = KeyPad6+toKey Key'Pad7 = KeyPad7+toKey Key'Pad8 = KeyPad8+toKey Key'Pad9 = KeyPad9+toKey Key'Unknown = KeyUnknown
+ FWGL/Backend/GLFW/GL20.hs view
@@ -0,0 +1,11 @@+{-# LANGUAGE NullaryTypeClasses, TypeFamilies #-}++module FWGL.Backend.GLFW.GL20 () where++import FWGL.Backend.IO+import FWGL.Backend.OpenGL.GL20+import qualified FWGL.Backend.GLFW.Common as C++instance BackendIO where+        loadImage = C.loadImage+        setup = C.setup C.ClientAPI'OpenGL 2 0 -- TODO: enable extensions
+ FWGL/Backend/OpenGL/Common.hs view
@@ -0,0 +1,44 @@+module FWGL.Backend.OpenGL.Common where++import Foreign+import Foreign.C.String+import Graphics.GL.Types++genToCreate :: Storable a => (GLsizei -> Ptr a -> IO ()) -> ctx -> IO a+genToCreate gen _ = do ptr <- malloc+                       gen 1 ptr+                       value <- peek ptr+                       free ptr+                       return value++deleteToDelete :: Storable a => (GLsizei -> Ptr a -> IO ()) -> ctx -> a -> IO ()+deleteToDelete del _ = flip with $ del 1++getString :: (a -> GLsizei -> Ptr GLsizei -> Ptr GLchar -> IO ())+          -> ctx -> a -> IO String+getString f _ x = do cstr <- mallocArray len+                     f x (fromIntegral len) nullPtr cstr+                     str <- peekCString cstr+                     free cstr+                     return str+        where len = 4096++uniform :: (a -> GLsizei -> Ptr b -> IO ())+        -> ctx -> a -> (GLsizei, ForeignPtr b) -> IO ()+uniform f _ a (len, fp) = withForeignPtr fp $ f a (quot len 4)++uniformMatrix :: (a -> GLsizei -> GLboolean -> Ptr b -> IO ()) -> GLsizei+              -> ctx -> a -> GLboolean -> (GLsizei, ForeignPtr b) -> IO ()+uniformMatrix f dv _ a b (len, fp) =+        withForeignPtr fp $ f a 1 {- (quot len dv) -} b++vertexAttrib :: (a -> Ptr b -> IO ())+             -> ctx -> a -> (GLsizei, ForeignPtr b) -> IO ()+vertexAttrib f _ a (_, fp) = withForeignPtr fp $ f a++mkArray :: Storable a => [a] -> IO (GLsizei, ForeignPtr b)+mkArray xs = do arr <- mallocForeignPtrArray len+                withForeignPtr arr $ flip pokeArray xs+                return (fromIntegral size, castForeignPtr arr)+        where len = length xs+              size = len * sizeOf (head xs)
+ FWGL/Backend/OpenGL/GL20.hs view
@@ -0,0 +1,488 @@+{-# LANGUAGE NullaryTypeClasses, TypeFamilies, MultiParamTypeClasses #-}++module FWGL.Backend.OpenGL.GL20 () where+        +import Data.Word+import Foreign+import Foreign.C.String+import FWGL.Backend.OpenGL.Common+import FWGL.Backend.GLES+import FWGL.Vector+import qualified Graphics.GL.Standard20 as GL+import qualified Graphics.GL.Ext.ARB.FramebufferObject as GL+import qualified Graphics.GL.Ext.EXT.BlendColor as GL+import Graphics.GL.Types as GL++instance GLES where+        type Ctx = ()+        type GLEnum = GLenum+        type GLUInt = GLuint+        type GLInt = GLint+        type GLPtr = Ptr ()+        type GLPtrDiff = GLintptr+        type GLSize = GLsizei+        type GLString = String -- XXX: Foreign CChar?+        type GLBool = GLboolean+        type Buffer = GLuint+        type UniformLocation = GLint+        type Texture = GLuint+        type Shader = GLuint+        type Program = GLuint+        type FrameBuffer = GLuint+        type RenderBuffer = GLuint+        -- type ShaderPrecisionFormat = GLint+        type Array = (GLsizei, ForeignPtr ())+        type Float32Array = (GLsizei, ForeignPtr GLfloat)+        type Int32Array = (GLsizei, ForeignPtr GLint)+        type Image = (GLsizei, GLsizei, Ptr ())++        true = 1+        false = 0+        nullGLPtr = nullPtr+        toGLString = id+        noBuffer = 0+        noTexture = 0+        noArray = fmap ((,) 0) $ newForeignPtr_ nullPtr++        -- TODO: move to FWGL.Backend.OpenGL.Common+        encodeM2 (M2 (V2 a1 a2) (V2 b1 b2)) = mkArray [ a1, a2, b1, b2 ]++        encodeM3 (M3 (V3 a1 a2 a3)+                     (V3 b1 b2 b3)+                     (V3 c1 c2 c3)) = mkArray [ a1, a2, a3+                                              , b1, b2, b3+                                              , c1, c2, c3 ]+        encodeM4 (M4 (V4 a1 a2 a3 a4)+                     (V4 b1 b2 b3 b4)+                     (V4 c1 c2 c3 c4)+                     (V4 d1 d2 d3 d4) ) = mkArray [ a1, a2, a3, a4+                                                  , b1, b2, b3, b4+                                                  , c1, c2, c3, c4+                                                  , d1, d2, d3, d4 ]++        encodeFloats = mkArray+        encodeV2s = mkArray+        encodeV3s = mkArray+        encodeV4s = mkArray+        encodeUShorts = mkArray+        encodeColors = mkArray++        glActiveTexture = const GL.glActiveTexture+        glAttachShader = const GL.glAttachShader+        glBindAttribLocation _ a b c = withCString c $ GL.glBindAttribLocation a b+        glBindBuffer = const GL.glBindBuffer+        glBindFramebuffer = const GL.glBindFramebuffer+        glBindRenderbuffer = const GL.glBindRenderbuffer+        glBindTexture = const GL.glBindTexture+        glBlendColor = const GL.glBlendColor+        glBlendEquation = const GL.glBlendEquation+        glBlendEquationSeparate = const GL.glBlendEquationSeparate+        glBlendFunc = const GL.glBlendFunc+        glBlendFuncSeparate = const GL.glBlendFuncSeparate+        glBufferData _ a (l, fp) b = withForeignPtr fp $ \p ->+                GL.glBufferData a (fromIntegral l) p b+        glBufferSubData _ a b (l, fp) = withForeignPtr fp $ \p ->+                GL.glBufferSubData a b (fromIntegral l) p+        glCheckFramebufferStatus = const GL.glCheckFramebufferStatus+        glClear = const GL.glClear+        glClearColor = const GL.glClearColor+        glClearDepth _ = GL.glClearDepth . realToFrac+        glClearStencil = const GL.glClearStencil+        glColorMask = const GL.glColorMask+        glCompileShader = const GL.glCompileShader+        glCompressedTexImage2D _ a b c d e f (l, fp) = withForeignPtr fp $+                \p -> GL.glCompressedTexImage2D a b c d e f l p+        glCompressedTexSubImage2D _ a b c d e f g (l, fp) = withForeignPtr fp $+                \p -> GL.glCompressedTexSubImage2D a b c d e f g l p+        glCopyTexImage2D = const GL.glCopyTexImage2D+        glCopyTexSubImage2D = const GL.glCopyTexSubImage2D+        glCreateBuffer = genToCreate GL.glGenBuffers+        glCreateFramebuffer = genToCreate GL.glGenFramebuffers+        glCreateProgram = const GL.glCreateProgram+        glCreateRenderbuffer = genToCreate GL.glGenRenderbuffers+        glCreateShader = const GL.glCreateShader+        glCreateTexture = genToCreate GL.glGenTextures+        glCullFace = const GL.glCullFace+        glDeleteBuffer = deleteToDelete GL.glDeleteBuffers+        glDeleteFramebuffer = deleteToDelete GL.glDeleteFramebuffers+        glDeleteProgram = const GL.glDeleteProgram+        glDeleteRenderbuffer = deleteToDelete GL.glDeleteRenderbuffers+        glDeleteShader = const GL.glDeleteShader+        glDeleteTexture = deleteToDelete GL.glDeleteTextures+        glDepthFunc = const GL.glDepthFunc+        glDepthMask = const GL.glDepthMask+        glDepthRange _ a b = GL.glDepthRange (realToFrac a) (realToFrac b)+        glDetachShader = const GL.glDetachShader+        glDisable = const GL.glDisable+        glDisableVertexAttribArray = const GL.glDisableVertexAttribArray+        glDrawArrays = const GL.glDrawArrays+        glDrawElements = const GL.glDrawElements+        glEnable = const GL.glEnable+        glEnableVertexAttribArray = const GL.glEnableVertexAttribArray+        glFinish = const GL.glFinish+        glFlush = const GL.glFlush+        glFramebufferRenderbuffer = const GL.glFramebufferRenderbuffer+        glFramebufferTexture2D = const GL.glFramebufferTexture2D+        glFrontFace = const GL.glFrontFace+        glGenerateMipmap = const GL.glGenerateMipmap+        glGetAttribLocation _ a b = withCString b $ GL.glGetAttribLocation a+        glGetError = const GL.glGetError+        glGetProgramInfoLog = getString GL.glGetProgramInfoLog+        glGetShaderInfoLog = getString GL.glGetShaderInfoLog+        glGetShaderSource = getString GL.glGetShaderSource+        glGetUniformLocation _ a b = withCString b $ GL.glGetUniformLocation a+        glHint = const GL.glHint+        glIsBuffer = const GL.glIsBuffer+        glIsEnabled = const GL.glIsEnabled+        glIsFramebuffer = const GL.glIsFramebuffer+        glIsProgram = const GL.glIsProgram+        glIsRenderbuffer = const GL.glIsRenderbuffer+        glIsShader = const GL.glIsShader+        glIsTexture = const GL.glIsTexture+        glLineWidth = const GL.glLineWidth+        glLinkProgram = const GL.glLinkProgram+        glPixelStorei = const GL.glPixelStorei+        glPolygonOffset = const GL.glPolygonOffset+        glReadPixels _ a b c d e f (_, fp)  = withForeignPtr fp $+                GL.glReadPixels a b c d e f+        glRenderbufferStorage = const GL.glRenderbufferStorage+        glSampleCoverage = const GL.glSampleCoverage+        glScissor = const GL.glScissor+        glShaderSource _ shader src =+                withCString src $ \csrc ->+                        with (fromIntegral $ length src) $ \lenptr ->+                               with csrc $ \csrcptr ->+                                      GL.glShaderSource shader 1 csrcptr lenptr+        glStencilFunc = const GL.glStencilFunc+        glStencilFuncSeparate = const GL.glStencilFuncSeparate+        glStencilMask = const GL.glStencilMask+        glStencilMaskSeparate = const GL.glStencilMaskSeparate+        glStencilOp = const GL.glStencilOp+        glStencilOpSeparate = const GL.glStencilOpSeparate+        glTexImage2DBuffer _ a b c d e f g h (_, fp) = withForeignPtr fp $+                GL.glTexImage2D a b c d e f g h+        glTexImage2DImage _ target lvl iform form ty (w, h, p) =+                GL.glTexImage2D target lvl iform w h 0 form ty p+        glTexParameterf = const GL.glTexParameterf+        glTexParameteri = const GL.glTexParameteri+        glTexSubImage2D _ a b c d e f g h (_, fp) = withForeignPtr fp $+                GL.glTexSubImage2D a b c d e f g h+        glUniform1f = const GL.glUniform1f+        glUniform1fv = uniform GL.glUniform1fv+        glUniform1i = const GL.glUniform1i+        glUniform1iv = uniform GL.glUniform1iv+        glUniform2f = const GL.glUniform2f+        glUniform2fv = uniform GL.glUniform2fv+        glUniform2i = const GL.glUniform2i+        glUniform2iv = uniform GL.glUniform2iv+        glUniform3f = const GL.glUniform3f+        glUniform3fv = uniform GL.glUniform3fv+        glUniform3i = const GL.glUniform3i+        glUniform3iv = uniform GL.glUniform3iv+        glUniform4f = const GL.glUniform4f+        glUniform4fv = uniform GL.glUniform4fv+        glUniform4i = const GL.glUniform4i+        glUniform4iv = uniform GL.glUniform4iv+        glUniformMatrix2fv = uniformMatrix GL.glUniformMatrix2fv 4+        glUniformMatrix3fv = uniformMatrix GL.glUniformMatrix3fv 9+        glUniformMatrix4fv = uniformMatrix GL.glUniformMatrix4fv 16+        glUseProgram = const GL.glUseProgram+        glValidateProgram = const GL.glValidateProgram+        glVertexAttrib1f = const GL.glVertexAttrib1f+        glVertexAttrib1fv = vertexAttrib GL.glVertexAttrib1fv+        glVertexAttrib2f = const GL.glVertexAttrib2f+        glVertexAttrib2fv = vertexAttrib GL.glVertexAttrib2fv+        glVertexAttrib3f = const GL.glVertexAttrib3f+        glVertexAttrib3fv = vertexAttrib GL.glVertexAttrib3fv+        glVertexAttrib4f = const GL.glVertexAttrib4f+        glVertexAttrib4fv = vertexAttrib GL.glVertexAttrib4fv+        glVertexAttribPointer = const GL.glVertexAttribPointer+        glViewport = const GL.glViewport++        gl_DEPTH_BUFFER_BIT = GL.GL_DEPTH_BUFFER_BIT+        gl_STENCIL_BUFFER_BIT = GL.GL_STENCIL_BUFFER_BIT+        gl_COLOR_BUFFER_BIT = GL.GL_COLOR_BUFFER_BIT+        gl_POINTS = GL.GL_POINTS+        gl_LINES = GL.GL_LINES+        gl_LINE_LOOP = GL.GL_LINE_LOOP+        gl_LINE_STRIP = GL.GL_LINE_STRIP+        gl_TRIANGLES = GL.GL_TRIANGLES+        gl_TRIANGLE_STRIP = GL.GL_TRIANGLE_STRIP+        gl_TRIANGLE_FAN = GL.GL_TRIANGLE_FAN+        gl_ZERO = GL.GL_ZERO+        gl_ONE = GL.GL_ONE+        gl_SRC_COLOR = GL.GL_SRC_COLOR+        gl_ONE_MINUS_SRC_COLOR = GL.GL_ONE_MINUS_SRC_COLOR+        gl_SRC_ALPHA = GL.GL_SRC_ALPHA+        gl_ONE_MINUS_SRC_ALPHA = GL.GL_ONE_MINUS_SRC_ALPHA+        gl_DST_ALPHA = GL.GL_DST_ALPHA+        gl_ONE_MINUS_DST_ALPHA = GL.GL_ONE_MINUS_DST_ALPHA+        gl_DST_COLOR = GL.GL_DST_COLOR+        gl_ONE_MINUS_DST_COLOR = GL.GL_ONE_MINUS_DST_COLOR+        gl_SRC_ALPHA_SATURATE = GL.GL_SRC_ALPHA_SATURATE+        gl_FUNC_ADD = GL.GL_FUNC_ADD+        gl_BLEND_EQUATION = error "GL_BLEND_EQUATION: not present in OpenGL 3.2"+        gl_BLEND_EQUATION_RGB = GL.GL_BLEND_EQUATION_RGB+        gl_BLEND_EQUATION_ALPHA = GL.GL_BLEND_EQUATION_ALPHA+        gl_FUNC_SUBTRACT = GL.GL_FUNC_SUBTRACT+        gl_FUNC_REVERSE_SUBTRACT = GL.GL_FUNC_REVERSE_SUBTRACT+        gl_BLEND_DST_RGB = GL.GL_BLEND_DST_RGB+        gl_BLEND_SRC_RGB = GL.GL_BLEND_SRC_RGB+        gl_BLEND_DST_ALPHA = GL.GL_BLEND_DST_ALPHA+        gl_BLEND_SRC_ALPHA = GL.GL_BLEND_SRC_ALPHA+        gl_CONSTANT_COLOR = GL.GL_CONSTANT_COLOR+        gl_ONE_MINUS_CONSTANT_COLOR = GL.GL_ONE_MINUS_CONSTANT_COLOR+        gl_CONSTANT_ALPHA = GL.GL_CONSTANT_ALPHA+        gl_ONE_MINUS_CONSTANT_ALPHA = GL.GL_ONE_MINUS_CONSTANT_ALPHA+        gl_BLEND_COLOR = GL.GL_BLEND_COLOR_EXT+        gl_ARRAY_BUFFER = GL.GL_ARRAY_BUFFER+        gl_ELEMENT_ARRAY_BUFFER = GL.GL_ELEMENT_ARRAY_BUFFER+        gl_ARRAY_BUFFER_BINDING = GL.GL_ARRAY_BUFFER_BINDING+        gl_ELEMENT_ARRAY_BUFFER_BINDING = GL.GL_ELEMENT_ARRAY_BUFFER_BINDING+        gl_STREAM_DRAW = GL.GL_STREAM_DRAW+        gl_STATIC_DRAW = GL.GL_STATIC_DRAW+        gl_DYNAMIC_DRAW = GL.GL_DYNAMIC_DRAW+        gl_BUFFER_SIZE = GL.GL_BUFFER_SIZE+        gl_BUFFER_USAGE = GL.GL_BUFFER_USAGE+        gl_CURRENT_VERTEX_ATTRIB = GL.GL_CURRENT_VERTEX_ATTRIB+        gl_FRONT = GL.GL_FRONT+        gl_BACK = GL.GL_BACK+        gl_FRONT_AND_BACK = GL.GL_FRONT_AND_BACK+        gl_CULL_FACE = GL.GL_CULL_FACE+        gl_BLEND = GL.GL_BLEND+        gl_DITHER = GL.GL_DITHER+        gl_STENCIL_TEST = GL.GL_STENCIL_TEST+        gl_DEPTH_TEST = GL.GL_DEPTH_TEST+        gl_SCISSOR_TEST = GL.GL_SCISSOR_TEST+        gl_POLYGON_OFFSET_FILL = GL.GL_POLYGON_OFFSET_FILL+        gl_SAMPLE_ALPHA_TO_COVERAGE = GL.GL_SAMPLE_ALPHA_TO_COVERAGE+        gl_SAMPLE_COVERAGE = GL.GL_SAMPLE_COVERAGE+        gl_NO_ERROR = GL.GL_NO_ERROR+        gl_INVALID_ENUM = GL.GL_INVALID_ENUM+        gl_INVALID_VALUE = GL.GL_INVALID_VALUE+        gl_INVALID_OPERATION = GL.GL_INVALID_OPERATION+        gl_OUT_OF_MEMORY = GL.GL_OUT_OF_MEMORY+        gl_CW = GL.GL_CW+        gl_CCW = GL.GL_CCW+        gl_LINE_WIDTH = GL.GL_LINE_WIDTH+        gl_ALIASED_POINT_SIZE_RANGE = error "GL_ALIASED_POINT_SIZE_RANGE: not present in OpenGL 3.2"+        gl_ALIASED_LINE_WIDTH_RANGE = GL.GL_ALIASED_LINE_WIDTH_RANGE+        gl_CULL_FACE_MODE = GL.GL_CULL_FACE_MODE+        gl_FRONT_FACE = GL.GL_FRONT_FACE+        gl_DEPTH_RANGE = GL.GL_DEPTH_RANGE+        gl_DEPTH_WRITEMASK = GL.GL_DEPTH_WRITEMASK+        gl_DEPTH_CLEAR_VALUE = GL.GL_DEPTH_CLEAR_VALUE+        gl_DEPTH_FUNC = GL.GL_DEPTH_FUNC+        gl_STENCIL_CLEAR_VALUE = GL.GL_STENCIL_CLEAR_VALUE+        gl_STENCIL_FUNC = GL.GL_STENCIL_FUNC+        gl_STENCIL_FAIL = GL.GL_STENCIL_FAIL+        gl_STENCIL_PASS_DEPTH_FAIL = GL.GL_STENCIL_PASS_DEPTH_FAIL+        gl_STENCIL_PASS_DEPTH_PASS = GL.GL_STENCIL_PASS_DEPTH_PASS+        gl_STENCIL_REF = GL.GL_STENCIL_REF+        gl_STENCIL_VALUE_MASK = GL.GL_STENCIL_VALUE_MASK+        gl_STENCIL_WRITEMASK = GL.GL_STENCIL_WRITEMASK+        gl_STENCIL_BACK_FUNC = GL.GL_STENCIL_BACK_FUNC+        gl_STENCIL_BACK_FAIL = GL.GL_STENCIL_BACK_FAIL+        gl_STENCIL_BACK_PASS_DEPTH_FAIL = GL.GL_STENCIL_BACK_PASS_DEPTH_FAIL+        gl_STENCIL_BACK_PASS_DEPTH_PASS = GL.GL_STENCIL_BACK_PASS_DEPTH_PASS+        gl_STENCIL_BACK_REF = GL.GL_STENCIL_BACK_REF+        gl_STENCIL_BACK_VALUE_MASK = GL.GL_STENCIL_BACK_VALUE_MASK+        gl_STENCIL_BACK_WRITEMASK = GL.GL_STENCIL_BACK_WRITEMASK+        gl_VIEWPORT = GL.GL_VIEWPORT+        gl_SCISSOR_BOX = GL.GL_SCISSOR_BOX+        gl_COLOR_CLEAR_VALUE = GL.GL_COLOR_CLEAR_VALUE+        gl_COLOR_WRITEMASK = GL.GL_COLOR_WRITEMASK+        gl_UNPACK_ALIGNMENT = GL.GL_UNPACK_ALIGNMENT+        gl_PACK_ALIGNMENT = GL.GL_PACK_ALIGNMENT+        gl_MAX_TEXTURE_SIZE = GL.GL_MAX_TEXTURE_SIZE+        gl_MAX_VIEWPORT_DIMS = GL.GL_MAX_VIEWPORT_DIMS+        gl_SUBPIXEL_BITS = GL.GL_SUBPIXEL_BITS+        gl_RED_BITS = error "GL_RED_BITS: not present in OpenGL 3.2"+        gl_GREEN_BITS = error "GL_GREEN_BITS: not present in OpenGL 3.2"+        gl_BLUE_BITS = error "GL_BLUE_BITS: not present in OpenGL 3.2"+        gl_ALPHA_BITS = error "GL_ALPHA_BITS: not present in OpenGL 3.2"+        gl_DEPTH_BITS = error "GL_DEPTH_BITS: not present in OpenGL 3.2"+        gl_STENCIL_BITS = error "GL_STENCIL_BITS: not present in OpenGL 3.2"+        gl_POLYGON_OFFSET_UNITS = GL.GL_POLYGON_OFFSET_UNITS+        gl_POLYGON_OFFSET_FACTOR = GL.GL_POLYGON_OFFSET_FACTOR+        gl_TEXTURE_BINDING_2D = GL.GL_TEXTURE_BINDING_2D+        gl_SAMPLE_BUFFERS = GL.GL_SAMPLE_BUFFERS+        gl_SAMPLES = GL.GL_SAMPLES+        gl_SAMPLE_COVERAGE_VALUE = GL.GL_SAMPLE_COVERAGE_VALUE+        gl_SAMPLE_COVERAGE_INVERT = GL.GL_SAMPLE_COVERAGE_INVERT+        gl_COMPRESSED_TEXTURE_FORMATS = GL.GL_COMPRESSED_TEXTURE_FORMATS+        gl_DONT_CARE = GL.GL_DONT_CARE+        gl_FASTEST = GL.GL_FASTEST+        gl_NICEST = GL.GL_NICEST+        gl_GENERATE_MIPMAP_HINT = error "GL_GENERATE_MIPMAP_HINT: not present in OpenGL 3.2"+        gl_BYTE = GL.GL_BYTE+        gl_UNSIGNED_BYTE = GL.GL_UNSIGNED_BYTE+        gl_SHORT = GL.GL_SHORT+        gl_UNSIGNED_SHORT = GL.GL_UNSIGNED_SHORT+        gl_INT = GL.GL_INT+        gl_UNSIGNED_INT = GL.GL_UNSIGNED_INT+        gl_FLOAT = GL.GL_FLOAT+        gl_DEPTH_COMPONENT = GL.GL_DEPTH_COMPONENT+        gl_ALPHA = GL.GL_ALPHA+        gl_RGB = GL.GL_RGB+        gl_RGBA = GL.GL_RGBA+        gl_LUMINANCE = error "GL_LUMINANCE: not present in OpenGL 3.2"+        gl_LUMINANCE_ALPHA = error "GL_LUMINANCE_ALPHA: not present in OpenGL 3.2"+        gl_UNSIGNED_SHORT_4_4_4_4 = GL.GL_UNSIGNED_SHORT_4_4_4_4+        gl_UNSIGNED_SHORT_5_5_5_1 = GL.GL_UNSIGNED_SHORT_5_5_5_1+        gl_UNSIGNED_SHORT_5_6_5 = GL.GL_UNSIGNED_SHORT_5_6_5+        gl_FRAGMENT_SHADER = GL.GL_FRAGMENT_SHADER+        gl_VERTEX_SHADER = GL.GL_VERTEX_SHADER+        gl_MAX_VERTEX_ATTRIBS = GL.GL_MAX_VERTEX_ATTRIBS+        gl_MAX_VERTEX_UNIFORM_VECTORS = error "GL_MAX_VERTEX_UNIFORM_VECTORS: not present in OpenGL 3.2"+        gl_MAX_VARYING_VECTORS = error "GL_MAX_VARYING_VECTORS: not present in OpenGL 3.2"+        gl_MAX_COMBINED_TEXTURE_IMAGE_UNITS = GL.GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS+        gl_MAX_VERTEX_TEXTURE_IMAGE_UNITS = GL.GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS+        gl_MAX_TEXTURE_IMAGE_UNITS = GL.GL_MAX_TEXTURE_IMAGE_UNITS+        gl_MAX_FRAGMENT_UNIFORM_VECTORS = error "GL_MAX_FRAGMENT_UNIFORM_VECTORS: not present in OpenGL 3.2"+        gl_SHADER_TYPE = GL.GL_SHADER_TYPE+        gl_DELETE_STATUS = GL.GL_DELETE_STATUS+        gl_LINK_STATUS = GL.GL_LINK_STATUS+        gl_VALIDATE_STATUS = GL.GL_VALIDATE_STATUS+        gl_ATTACHED_SHADERS = GL.GL_ATTACHED_SHADERS+        gl_ACTIVE_UNIFORMS = GL.GL_ACTIVE_UNIFORMS+        gl_ACTIVE_ATTRIBUTES = GL.GL_ACTIVE_ATTRIBUTES+        gl_SHADING_LANGUAGE_VERSION = GL.GL_SHADING_LANGUAGE_VERSION+        gl_CURRENT_PROGRAM = GL.GL_CURRENT_PROGRAM+        gl_NEVER = GL.GL_NEVER+        gl_LESS = GL.GL_LESS+        gl_EQUAL = GL.GL_EQUAL+        gl_LEQUAL = GL.GL_LEQUAL+        gl_GREATER = GL.GL_GREATER+        gl_NOTEQUAL = GL.GL_NOTEQUAL+        gl_GEQUAL = GL.GL_GEQUAL+        gl_ALWAYS = GL.GL_ALWAYS+        gl_KEEP = GL.GL_KEEP+        gl_REPLACE = GL.GL_REPLACE+        gl_INCR = GL.GL_INCR+        gl_DECR = GL.GL_DECR+        gl_INVERT = GL.GL_INVERT+        gl_INCR_WRAP = GL.GL_INCR_WRAP+        gl_DECR_WRAP = GL.GL_DECR_WRAP+        gl_VENDOR = GL.GL_VENDOR+        gl_RENDERER = GL.GL_RENDERER+        gl_VERSION = GL.GL_VERSION+        gl_NEAREST = GL.GL_NEAREST+        gl_LINEAR = GL.GL_LINEAR+        gl_NEAREST_MIPMAP_NEAREST = GL.GL_NEAREST_MIPMAP_NEAREST+        gl_LINEAR_MIPMAP_NEAREST = GL.GL_LINEAR_MIPMAP_NEAREST+        gl_NEAREST_MIPMAP_LINEAR = GL.GL_NEAREST_MIPMAP_LINEAR+        gl_LINEAR_MIPMAP_LINEAR = GL.GL_LINEAR_MIPMAP_LINEAR+        gl_TEXTURE_MAG_FILTER = GL.GL_TEXTURE_MAG_FILTER+        gl_TEXTURE_MIN_FILTER = GL.GL_TEXTURE_MIN_FILTER+        gl_TEXTURE_WRAP_S = GL.GL_TEXTURE_WRAP_S+        gl_TEXTURE_WRAP_T = GL.GL_TEXTURE_WRAP_T+        gl_TEXTURE_2D = GL.GL_TEXTURE_2D+        gl_TEXTURE = GL.GL_TEXTURE+        gl_TEXTURE_CUBE_MAP = GL.GL_TEXTURE_CUBE_MAP+        gl_TEXTURE_BINDING_CUBE_MAP = GL.GL_TEXTURE_BINDING_CUBE_MAP+        gl_TEXTURE_CUBE_MAP_POSITIVE_X = GL.GL_TEXTURE_CUBE_MAP_POSITIVE_X+        gl_TEXTURE_CUBE_MAP_NEGATIVE_X = GL.GL_TEXTURE_CUBE_MAP_NEGATIVE_X+        gl_TEXTURE_CUBE_MAP_POSITIVE_Y = GL.GL_TEXTURE_CUBE_MAP_POSITIVE_Y+        gl_TEXTURE_CUBE_MAP_NEGATIVE_Y = GL.GL_TEXTURE_CUBE_MAP_NEGATIVE_Y+        gl_TEXTURE_CUBE_MAP_POSITIVE_Z = GL.GL_TEXTURE_CUBE_MAP_POSITIVE_Z+        gl_TEXTURE_CUBE_MAP_NEGATIVE_Z = GL.GL_TEXTURE_CUBE_MAP_NEGATIVE_Z+        gl_MAX_CUBE_MAP_TEXTURE_SIZE = GL.GL_MAX_CUBE_MAP_TEXTURE_SIZE+        gl_TEXTURE0 = GL.GL_TEXTURE0+        gl_TEXTURE1 = GL.GL_TEXTURE1+        gl_TEXTURE2 = GL.GL_TEXTURE2+        gl_TEXTURE3 = GL.GL_TEXTURE3+        gl_TEXTURE4 = GL.GL_TEXTURE4+        gl_TEXTURE5 = GL.GL_TEXTURE5+        gl_TEXTURE6 = GL.GL_TEXTURE6+        gl_TEXTURE7 = GL.GL_TEXTURE7+        gl_TEXTURE8 = GL.GL_TEXTURE8+        gl_TEXTURE9 = GL.GL_TEXTURE9+        gl_TEXTURE10 = GL.GL_TEXTURE10+        gl_TEXTURE11 = GL.GL_TEXTURE11+        gl_TEXTURE12 = GL.GL_TEXTURE12+        gl_TEXTURE13 = GL.GL_TEXTURE13+        gl_TEXTURE14 = GL.GL_TEXTURE14+        gl_TEXTURE15 = GL.GL_TEXTURE15+        gl_TEXTURE16 = GL.GL_TEXTURE16+        gl_TEXTURE17 = GL.GL_TEXTURE17+        gl_TEXTURE18 = GL.GL_TEXTURE18+        gl_TEXTURE19 = GL.GL_TEXTURE19+        gl_TEXTURE20 = GL.GL_TEXTURE20+        gl_TEXTURE21 = GL.GL_TEXTURE21+        gl_TEXTURE22 = GL.GL_TEXTURE22+        gl_TEXTURE23 = GL.GL_TEXTURE23+        gl_TEXTURE24 = GL.GL_TEXTURE24+        gl_TEXTURE25 = GL.GL_TEXTURE25+        gl_TEXTURE26 = GL.GL_TEXTURE26+        gl_TEXTURE27 = GL.GL_TEXTURE27+        gl_TEXTURE28 = GL.GL_TEXTURE28+        gl_TEXTURE29 = GL.GL_TEXTURE29+        gl_TEXTURE30 = GL.GL_TEXTURE30+        gl_TEXTURE31 = GL.GL_TEXTURE31+        gl_ACTIVE_TEXTURE = GL.GL_ACTIVE_TEXTURE+        gl_REPEAT = GL.GL_REPEAT+        gl_CLAMP_TO_EDGE = GL.GL_CLAMP_TO_EDGE+        gl_MIRRORED_REPEAT = GL.GL_MIRRORED_REPEAT+        gl_FLOAT_VEC2 = GL.GL_FLOAT_VEC2+        gl_FLOAT_VEC3 = GL.GL_FLOAT_VEC3+        gl_FLOAT_VEC4 = GL.GL_FLOAT_VEC4+        gl_INT_VEC2 = GL.GL_INT_VEC2+        gl_INT_VEC3 = GL.GL_INT_VEC3+        gl_INT_VEC4 = GL.GL_INT_VEC4+        gl_BOOL = GL.GL_BOOL+        gl_BOOL_VEC2 = GL.GL_BOOL_VEC2+        gl_BOOL_VEC3 = GL.GL_BOOL_VEC3+        gl_BOOL_VEC4 = GL.GL_BOOL_VEC4+        gl_FLOAT_MAT2 = GL.GL_FLOAT_MAT2+        gl_FLOAT_MAT3 = GL.GL_FLOAT_MAT3+        gl_FLOAT_MAT4 = GL.GL_FLOAT_MAT4+        gl_SAMPLER_2D = GL.GL_SAMPLER_2D+        gl_SAMPLER_CUBE = GL.GL_SAMPLER_CUBE+        gl_VERTEX_ATTRIB_ARRAY_ENABLED = GL.GL_VERTEX_ATTRIB_ARRAY_ENABLED+        gl_VERTEX_ATTRIB_ARRAY_SIZE = GL.GL_VERTEX_ATTRIB_ARRAY_SIZE+        gl_VERTEX_ATTRIB_ARRAY_STRIDE = GL.GL_VERTEX_ATTRIB_ARRAY_STRIDE+        gl_VERTEX_ATTRIB_ARRAY_TYPE = GL.GL_VERTEX_ATTRIB_ARRAY_TYPE+        gl_VERTEX_ATTRIB_ARRAY_NORMALIZED = GL.GL_VERTEX_ATTRIB_ARRAY_NORMALIZED+        gl_VERTEX_ATTRIB_ARRAY_POINTER = GL.GL_VERTEX_ATTRIB_ARRAY_POINTER+        gl_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING = GL.GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING+        gl_COMPILE_STATUS = GL.GL_COMPILE_STATUS+        gl_LOW_FLOAT = error "GL_LOW_FLOAT: not present in OpenGL 3.2"+        gl_MEDIUM_FLOAT = error "GL_MEDIUM_FLOAT: not present in OpenGL 3.2"+        gl_HIGH_FLOAT = error "GL_HIGH_FLOAT: not present in OpenGL 3.2"+        gl_LOW_INT = error "GL_LOW_INT: not present in OpenGL 3.2"+        gl_MEDIUM_INT = error "GL_MEDIUM_INT: not present in OpenGL 3.2"+        gl_HIGH_INT = error "GL_HIGH_INT: not present in OpenGL 3.2"+        gl_FRAMEBUFFER = GL.GL_FRAMEBUFFER+        gl_RENDERBUFFER = GL.GL_RENDERBUFFER+        gl_RGBA4 = GL.GL_RGBA4+        gl_RGB5_A1 = GL.GL_RGB5_A1+        gl_RGB565 = error "GL_RGB565: not present in OpenGL 3.2"+        gl_DEPTH_COMPONENT16 = GL.GL_DEPTH_COMPONENT16+        gl_STENCIL_INDEX8 = GL.GL_STENCIL_INDEX8+        gl_RENDERBUFFER_WIDTH = GL.GL_RENDERBUFFER_WIDTH+        gl_RENDERBUFFER_HEIGHT = GL.GL_RENDERBUFFER_HEIGHT+        gl_RENDERBUFFER_INTERNAL_FORMAT = GL.GL_RENDERBUFFER_INTERNAL_FORMAT+        gl_RENDERBUFFER_RED_SIZE = GL.GL_RENDERBUFFER_RED_SIZE+        gl_RENDERBUFFER_GREEN_SIZE = GL.GL_RENDERBUFFER_GREEN_SIZE+        gl_RENDERBUFFER_BLUE_SIZE = GL.GL_RENDERBUFFER_BLUE_SIZE+        gl_RENDERBUFFER_ALPHA_SIZE = GL.GL_RENDERBUFFER_ALPHA_SIZE+        gl_RENDERBUFFER_DEPTH_SIZE = GL.GL_RENDERBUFFER_DEPTH_SIZE+        gl_RENDERBUFFER_STENCIL_SIZE = GL.GL_RENDERBUFFER_STENCIL_SIZE+        gl_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE = GL.GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE+        gl_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME = GL.GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME+        gl_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL = GL.GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL+        gl_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE = GL.GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE+        gl_COLOR_ATTACHMENT0 = GL.GL_COLOR_ATTACHMENT0+        gl_DEPTH_ATTACHMENT = GL.GL_DEPTH_ATTACHMENT+        gl_STENCIL_ATTACHMENT = GL.GL_STENCIL_ATTACHMENT+        gl_NONE = GL.GL_NONE+        gl_FRAMEBUFFER_COMPLETE = GL.GL_FRAMEBUFFER_COMPLETE+        gl_FRAMEBUFFER_INCOMPLETE_ATTACHMENT = GL.GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT+        gl_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT = GL.GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT+        gl_FRAMEBUFFER_INCOMPLETE_DIMENSIONS = error "GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS: not present in OpenGL 3.2"+        gl_FRAMEBUFFER_UNSUPPORTED = GL.GL_FRAMEBUFFER_UNSUPPORTED+        gl_FRAMEBUFFER_BINDING = GL.GL_FRAMEBUFFER_BINDING+        gl_RENDERBUFFER_BINDING = GL.GL_RENDERBUFFER_BINDING+        gl_MAX_RENDERBUFFER_SIZE = GL.GL_MAX_RENDERBUFFER_SIZE+        gl_INVALID_FRAMEBUFFER_OPERATION = GL.GL_INVALID_FRAMEBUFFER_OPERATION
+ Setup.hs view
@@ -0,0 +1,2 @@+import Distribution.Simple+main = defaultMain
+ fwgl-glfw.cabal view
@@ -0,0 +1,20 @@+name:                fwgl-glfw+version:             0.1.0.2+synopsis:            FWGL GLFW backend+description:         FWGL GLFW backend.+homepage:            https://github.com/ZioCrocifisso/FWGL+stability:           experimental+license:             BSD3+author:              Luca "ZioCrocifisso" Prezzavento+maintainer:          ziocroc@gmail.com+category:            Game, Game Engine+build-type:          Simple+cabal-version:       >=1.10++library+  exposed-modules:     FWGL.Backend.GLFW.GL20+  other-modules:       FWGL.Backend.OpenGL.Common, FWGL.Backend.GLFW.Common, FWGL.Backend.OpenGL.GL20+  other-extensions:    NullaryTypeClasses, TypeFamilies, MultiParamTypeClasses+  build-depends:       fwgl >= 0.1 && <0.2, base >=4.7 && <4.8, Yampa >=0.9 && <0.10, hashable >=1.2 && <1.3, unordered-containers >=0.2 && <0.3, vector >=0.10 && <0.11, transformers, gl >=0.6 && <0.7, JuicyPixels >=3.2 && <3.3, GLFW-b >=1.4 && <1.5+  hs-source-dirs:      .+  default-language:    Haskell2010