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 +232/−0
- FWGL/Backend/GLFW/GL20.hs +11/−0
- FWGL/Backend/OpenGL/Common.hs +44/−0
- FWGL/Backend/OpenGL/GL20.hs +488/−0
- Setup.hs +2/−0
- fwgl-glfw.cabal +20/−0
+ 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