diff options
Diffstat (limited to 'Spear/GL.hs')
-rw-r--r-- | Spear/GL.hs | 42 |
1 files changed, 21 insertions, 21 deletions
diff --git a/Spear/GL.hs b/Spear/GL.hs index f463109..3c1734b 100644 --- a/Spear/GL.hs +++ b/Spear/GL.hs | |||
@@ -36,7 +36,7 @@ module Spear.GL | |||
36 | Data.StateVar.get, | 36 | Data.StateVar.get, |
37 | 37 | ||
38 | -- * VAOs | 38 | -- * VAOs |
39 | VAO, | 39 | VAO(..), |
40 | newVAO, | 40 | newVAO, |
41 | bindVAO, | 41 | bindVAO, |
42 | unbindVAO, | 42 | unbindVAO, |
@@ -48,7 +48,7 @@ module Spear.GL | |||
48 | drawElements, | 48 | drawElements, |
49 | 49 | ||
50 | -- * Buffers | 50 | -- * Buffers |
51 | GLBuffer, | 51 | GLBuffer(..), |
52 | TargetBuffer (..), | 52 | TargetBuffer (..), |
53 | BufferUsage (..), | 53 | BufferUsage (..), |
54 | newBuffer, | 54 | newBuffer, |
@@ -122,7 +122,7 @@ import Unsafe.Coerce | |||
122 | -- | A GLSL shader handle. | 122 | -- | A GLSL shader handle. |
123 | data GLSLShader = GLSLShader | 123 | data GLSLShader = GLSLShader |
124 | { getShader :: GLuint, | 124 | { getShader :: GLuint, |
125 | getShaderKey :: Resource | 125 | getShaderKey :: ReleaseKey |
126 | } | 126 | } |
127 | 127 | ||
128 | instance ResourceClass GLSLShader where | 128 | instance ResourceClass GLSLShader where |
@@ -131,7 +131,7 @@ instance ResourceClass GLSLShader where | |||
131 | -- | A GLSL program handle. | 131 | -- | A GLSL program handle. |
132 | data GLSLProgram = GLSLProgram | 132 | data GLSLProgram = GLSLProgram |
133 | { getProgram :: GLuint, | 133 | { getProgram :: GLuint, |
134 | getProgramKey :: Resource | 134 | getProgramKey :: ReleaseKey |
135 | } | 135 | } |
136 | 136 | ||
137 | instance ResourceClass GLSLProgram where | 137 | instance ResourceClass GLSLProgram where |
@@ -173,11 +173,11 @@ attribLocation prog var = makeStateVar get set | |||
173 | -- | Create a new program. | 173 | -- | Create a new program. |
174 | newProgram :: [GLSLShader] -> Game s GLSLProgram | 174 | newProgram :: [GLSLShader] -> Game s GLSLProgram |
175 | newProgram shaders = do | 175 | newProgram shaders = do |
176 | h <- gameIO glCreateProgram | 176 | h <- liftIO glCreateProgram |
177 | when (h == 0) $ gameError "glCreateProgram failed" | 177 | when (h == 0) $ gameError "glCreateProgram failed" |
178 | rkey <- register $ deleteProgram h | 178 | rkey <- register $ deleteProgram h |
179 | let program = GLSLProgram h rkey | 179 | let program = GLSLProgram h rkey |
180 | mapM_ (gameIO . attachShader program) shaders | 180 | mapM_ (liftIO . attachShader program) shaders |
181 | linkProgram program | 181 | linkProgram program |
182 | return program | 182 | return program |
183 | 183 | ||
@@ -192,7 +192,7 @@ deleteProgram prog = do | |||
192 | linkProgram :: GLSLProgram -> Game s () | 192 | linkProgram :: GLSLProgram -> Game s () |
193 | linkProgram prog = do | 193 | linkProgram prog = do |
194 | let h = getProgram prog | 194 | let h = getProgram prog |
195 | err <- gameIO $ do | 195 | err <- liftIO $ do |
196 | glLinkProgram h | 196 | glLinkProgram h |
197 | alloca $ \statptr -> do | 197 | alloca $ \statptr -> do |
198 | glGetProgramiv h GL_LINK_STATUS statptr | 198 | glGetProgramiv h GL_LINK_STATUS statptr |
@@ -235,7 +235,7 @@ loadShader shaderType file = do | |||
235 | -- | Create a new shader. | 235 | -- | Create a new shader. |
236 | newShader :: ShaderType -> Game s GLSLShader | 236 | newShader :: ShaderType -> Game s GLSLShader |
237 | newShader shaderType = do | 237 | newShader shaderType = do |
238 | h <- gameIO $ glCreateShader (toGLShader shaderType) | 238 | h <- liftIO $ glCreateShader (toGLShader shaderType) |
239 | case h of | 239 | case h of |
240 | 0 -> gameError "glCreateShader failed" | 240 | 0 -> gameError "glCreateShader failed" |
241 | _ -> do | 241 | _ -> do |
@@ -253,10 +253,10 @@ deleteShader shader = do | |||
253 | -- into the shader. | 253 | -- into the shader. |
254 | loadSource :: FilePath -> GLSLShader -> Game s () | 254 | loadSource :: FilePath -> GLSLShader -> Game s () |
255 | loadSource file h = do | 255 | loadSource file h = do |
256 | exists <- gameIO $ doesFileExist file | 256 | exists <- liftIO $ doesFileExist file |
257 | case exists of | 257 | case exists of |
258 | False -> gameError "the specified shader file does not exist" | 258 | False -> gameError "the specified shader file does not exist" |
259 | True -> gameIO $ do | 259 | True -> liftIO $ do |
260 | code <- readSource file | 260 | code <- readSource file |
261 | withCString code $ shaderSource h | 261 | withCString code $ shaderSource h |
262 | 262 | ||
@@ -272,10 +272,10 @@ compile file shader = do | |||
272 | let h = getShader shader | 272 | let h = getShader shader |
273 | 273 | ||
274 | -- Compile | 274 | -- Compile |
275 | gameIO $ glCompileShader h | 275 | liftIO $ glCompileShader h |
276 | 276 | ||
277 | -- Verify status | 277 | -- Verify status |
278 | err <- gameIO $ | 278 | err <- liftIO $ |
279 | alloca $ \statusPtr -> do | 279 | alloca $ \statusPtr -> do |
280 | glGetShaderiv h GL_COMPILE_STATUS statusPtr | 280 | glGetShaderiv h GL_COMPILE_STATUS statusPtr |
281 | result <- peek statusPtr | 281 | result <- peek statusPtr |
@@ -438,7 +438,7 @@ instance Uniform [Int] where | |||
438 | -- | A vertex array object. | 438 | -- | A vertex array object. |
439 | data VAO = VAO | 439 | data VAO = VAO |
440 | { getVAO :: GLuint, | 440 | { getVAO :: GLuint, |
441 | vaoKey :: Resource | 441 | vaoKey :: ReleaseKey |
442 | } | 442 | } |
443 | 443 | ||
444 | instance ResourceClass VAO where | 444 | instance ResourceClass VAO where |
@@ -454,7 +454,7 @@ instance Ord VAO where | |||
454 | -- | Create a new vao. | 454 | -- | Create a new vao. |
455 | newVAO :: Game s VAO | 455 | newVAO :: Game s VAO |
456 | newVAO = do | 456 | newVAO = do |
457 | h <- gameIO . alloca $ \ptr -> do | 457 | h <- liftIO . alloca $ \ptr -> do |
458 | glGenVertexArrays 1 ptr | 458 | glGenVertexArrays 1 ptr |
459 | peek ptr | 459 | peek ptr |
460 | 460 | ||
@@ -533,11 +533,11 @@ drawElements mode count t idxs = glDrawElements mode (unsafeCoerce count) t idxs | |||
533 | -- | An OpenGL buffer. | 533 | -- | An OpenGL buffer. |
534 | data GLBuffer = GLBuffer | 534 | data GLBuffer = GLBuffer |
535 | { getBuffer :: GLuint, | 535 | { getBuffer :: GLuint, |
536 | rkey :: Resource | 536 | bufferKey :: ReleaseKey |
537 | } | 537 | } |
538 | 538 | ||
539 | instance ResourceClass GLBuffer where | 539 | instance ResourceClass GLBuffer where |
540 | getResource = rkey | 540 | getResource = bufferKey |
541 | 541 | ||
542 | -- | The type of target buffer. | 542 | -- | The type of target buffer. |
543 | data TargetBuffer | 543 | data TargetBuffer |
@@ -580,7 +580,7 @@ fromUsage DynamicCopy = GL_DYNAMIC_COPY | |||
580 | -- | Create a new buffer. | 580 | -- | Create a new buffer. |
581 | newBuffer :: Game s GLBuffer | 581 | newBuffer :: Game s GLBuffer |
582 | newBuffer = do | 582 | newBuffer = do |
583 | h <- gameIO . alloca $ \ptr -> do | 583 | h <- liftIO . alloca $ \ptr -> do |
584 | glGenBuffers 1 ptr | 584 | glGenBuffers 1 ptr |
585 | peek ptr | 585 | peek ptr |
586 | 586 | ||
@@ -656,7 +656,7 @@ withGLBuffer buf f = f $ getBuffer buf | |||
656 | -- | Represents a texture resource. | 656 | -- | Represents a texture resource. |
657 | data Texture = Texture | 657 | data Texture = Texture |
658 | { getTex :: GLuint, | 658 | { getTex :: GLuint, |
659 | texKey :: Resource | 659 | texKey :: ReleaseKey |
660 | } | 660 | } |
661 | 661 | ||
662 | instance Eq Texture where | 662 | instance Eq Texture where |
@@ -672,7 +672,7 @@ instance ResourceClass Texture where | |||
672 | -- | Create a new texture. | 672 | -- | Create a new texture. |
673 | newTexture :: Game s Texture | 673 | newTexture :: Game s Texture |
674 | newTexture = do | 674 | newTexture = do |
675 | tex <- gameIO . alloca $ \ptr -> do | 675 | tex <- liftIO . alloca $ \ptr -> do |
676 | glGenTextures 1 ptr | 676 | glGenTextures 1 ptr |
677 | peek ptr | 677 | peek ptr |
678 | 678 | ||
@@ -697,7 +697,7 @@ loadTextureImage :: | |||
697 | loadTextureImage file minFilter magFilter = do | 697 | loadTextureImage file minFilter magFilter = do |
698 | image <- loadImage file | 698 | image <- loadImage file |
699 | tex <- newTexture | 699 | tex <- newTexture |
700 | gameIO $ do | 700 | liftIO $ do |
701 | let w = width image | 701 | let w = width image |
702 | h = height image | 702 | h = height image |
703 | pix = pixels image | 703 | pix = pixels image |
@@ -794,7 +794,7 @@ printGLError = | |||
794 | assertGL :: Game s a -> String -> Game s a | 794 | assertGL :: Game s a -> String -> Game s a |
795 | assertGL action err = do | 795 | assertGL action err = do |
796 | result <- action | 796 | result <- action |
797 | status <- gameIO getGLError | 797 | status <- liftIO getGLError |
798 | case status of | 798 | case status of |
799 | Just str -> gameError $ "OpenGL error raised: " ++ err ++ "; " ++ str | 799 | Just str -> gameError $ "OpenGL error raised: " ++ err ++ "; " ++ str |
800 | Nothing -> return result | 800 | Nothing -> return result |