diff options
| -rw-r--r-- | Spear/GL.hs | 22 | 
1 files changed, 20 insertions, 2 deletions
| diff --git a/Spear/GL.hs b/Spear/GL.hs index 65f985b..aa3e930 100644 --- a/Spear/GL.hs +++ b/Spear/GL.hs | |||
| @@ -5,6 +5,7 @@ module Spear.GL | |||
| 5 | , newProgram | 5 | , newProgram | 
| 6 | , linkProgram | 6 | , linkProgram | 
| 7 | , useProgram | 7 | , useProgram | 
| 8 | , unuseProgram | ||
| 8 | , withGLSLProgram | 9 | , withGLSLProgram | 
| 9 | -- ** Locations | 10 | -- ** Locations | 
| 10 | , attribLocation | 11 | , attribLocation | 
| @@ -36,6 +37,7 @@ module Spear.GL | |||
| 36 | , VAO | 37 | , VAO | 
| 37 | , newVAO | 38 | , newVAO | 
| 38 | , bindVAO | 39 | , bindVAO | 
| 40 | , unbindVAO | ||
| 39 | , enableVAOAttrib | 41 | , enableVAOAttrib | 
| 40 | , attribVAOPointer | 42 | , attribVAOPointer | 
| 41 | -- ** Rendering | 43 | -- ** Rendering | 
| @@ -47,6 +49,7 @@ module Spear.GL | |||
| 47 | , BufferUsage(..) | 49 | , BufferUsage(..) | 
| 48 | , newBuffer | 50 | , newBuffer | 
| 49 | , bindBuffer | 51 | , bindBuffer | 
| 52 | , unbindBuffer | ||
| 50 | , BufferData(..) | 53 | , BufferData(..) | 
| 51 | , bufferData' | 54 | , bufferData' | 
| 52 | , withGLBuffer | 55 | , withGLBuffer | 
| @@ -59,6 +62,7 @@ module Spear.GL | |||
| 59 | , loadTextureImage | 62 | , loadTextureImage | 
| 60 | -- ** Manipulation | 63 | -- ** Manipulation | 
| 61 | , bindTexture | 64 | , bindTexture | 
| 65 | , unbindTexture | ||
| 62 | , loadTextureData | 66 | , loadTextureData | 
| 63 | , texParami | 67 | , texParami | 
| 64 | , texParamf | 68 | , texParamf | 
| @@ -162,10 +166,8 @@ newProgram shaders = do | |||
| 162 | when (h == 0) $ gameError "glCreateProgram failed" | 166 | when (h == 0) $ gameError "glCreateProgram failed" | 
| 163 | rkey <- register $ deleteProgram h | 167 | rkey <- register $ deleteProgram h | 
| 164 | let program = GLSLProgram h rkey | 168 | let program = GLSLProgram h rkey | 
| 165 | |||
| 166 | mapM_ (gameIO . attachShader program) shaders | 169 | mapM_ (gameIO . attachShader program) shaders | 
| 167 | linkProgram program | 170 | linkProgram program | 
| 168 | |||
| 169 | return program | 171 | return program | 
| 170 | 172 | ||
| 171 | -- | Delete the program. | 173 | -- | Delete the program. | 
| @@ -196,6 +198,10 @@ linkProgram prog = do | |||
| 196 | useProgram :: GLSLProgram -> IO () | 198 | useProgram :: GLSLProgram -> IO () | 
| 197 | useProgram prog = glUseProgram $ getProgram prog | 199 | useProgram prog = glUseProgram $ getProgram prog | 
| 198 | 200 | ||
| 201 | -- | Deactivate the active program. | ||
| 202 | unuseProgram :: IO () | ||
| 203 | unuseProgram = glUseProgram 0 | ||
| 204 | |||
| 199 | -- | Attach the given shader to the given program. | 205 | -- | Attach the given shader to the given program. | 
| 200 | attachShader :: GLSLProgram -> GLSLShader -> IO () | 206 | attachShader :: GLSLProgram -> GLSLShader -> IO () | 
| 201 | attachShader prog shader = glAttachShader (getProgram prog) (getShader shader) | 207 | attachShader prog shader = glAttachShader (getProgram prog) (getShader shader) | 
| @@ -411,6 +417,10 @@ deleteVAO vao = Foreign.with vao $ glDeleteVertexArrays 1 | |||
| 411 | bindVAO :: VAO -> IO () | 417 | bindVAO :: VAO -> IO () | 
| 412 | bindVAO = glBindVertexArray . getVAO | 418 | bindVAO = glBindVertexArray . getVAO | 
| 413 | 419 | ||
| 420 | -- | Unbind the bound vao. | ||
| 421 | unbindVAO :: IO () | ||
| 422 | unbindVAO = glBindVertexArray 0 | ||
| 423 | |||
| 414 | -- | Enable the given vertex attribute of the bound vao. | 424 | -- | Enable the given vertex attribute of the bound vao. | 
| 415 | -- | 425 | -- | 
| 416 | -- See also 'bindVAO'. | 426 | -- See also 'bindVAO'. | 
| @@ -516,6 +526,10 @@ deleteBuffer buf = Foreign.with buf $ glDeleteBuffers 1 | |||
| 516 | bindBuffer :: GLBuffer -> TargetBuffer -> IO () | 526 | bindBuffer :: GLBuffer -> TargetBuffer -> IO () | 
| 517 | bindBuffer buf target = glBindBuffer (fromTarget target) $ getBuffer buf | 527 | bindBuffer buf target = glBindBuffer (fromTarget target) $ getBuffer buf | 
| 518 | 528 | ||
| 529 | -- | Unbind the bound buffer. | ||
| 530 | unbindBuffer :: TargetBuffer -> IO () | ||
| 531 | unbindBuffer target = glBindBuffer (fromTarget target) 0 | ||
| 532 | |||
| 519 | class Storable a => BufferData a where | 533 | class Storable a => BufferData a where | 
| 520 | -- | Set the buffer's data. | 534 | -- | Set the buffer's data. | 
| 521 | bufferData :: TargetBuffer -> [a] -> BufferUsage -> IO () | 535 | bufferData :: TargetBuffer -> [a] -> BufferUsage -> IO () | 
| @@ -616,6 +630,10 @@ loadTextureImage file minFilter magFilter = do | |||
| 616 | bindTexture :: Texture -> IO () | 630 | bindTexture :: Texture -> IO () | 
| 617 | bindTexture = glBindTexture gl_TEXTURE_2D . getTex | 631 | bindTexture = glBindTexture gl_TEXTURE_2D . getTex | 
| 618 | 632 | ||
| 633 | -- | Unbind the bound texture. | ||
| 634 | unbindTexture :: IO () | ||
| 635 | unbindTexture = glBindTexture gl_TEXTURE_2D 0 | ||
| 636 | |||
| 619 | -- | Load data onto the bound texture. | 637 | -- | Load data onto the bound texture. | 
| 620 | -- | 638 | -- | 
| 621 | -- See also 'bindTexture'. | 639 | -- See also 'bindTexture'. | 
