abstract bindable stuff as typeclass
This commit is contained in:
parent
a0f9ffcc6e
commit
c2014e41c5
7 changed files with 30 additions and 10 deletions
|
@ -26,8 +26,10 @@ executable renderer-tutorial
|
|||
, bytestring
|
||||
, monad-loops
|
||||
, random
|
||||
other-modules: BufferClass
|
||||
other-modules: BindableClass
|
||||
, BufferClass
|
||||
, VertexBuffer
|
||||
, VertexArray
|
||||
, IndexBuffer
|
||||
hs-source-dirs: src
|
||||
default-language: Haskell2010
|
||||
|
|
10
src/BindableClass.hs
Normal file
10
src/BindableClass.hs
Normal file
|
@ -0,0 +1,10 @@
|
|||
module BindableClass where
|
||||
|
||||
-- | typeclass for bindabl eobjects like buffers, vertex arrays or shaders
|
||||
class Bindable a where
|
||||
|
||||
-- bind the object in context
|
||||
bind :: a -> IO ()
|
||||
|
||||
-- release object from context
|
||||
unbind :: a -> IO ()
|
|
@ -5,10 +5,14 @@ import qualified Graphics.Rendering.OpenGL as GL
|
|||
|
||||
import SDL (($=), get)
|
||||
|
||||
-- internal imports
|
||||
|
||||
import BindableClass
|
||||
|
||||
-- this aims to be a typeclass for all used buffer objects throughout the
|
||||
-- tutorial.
|
||||
-- think of it as some kind of interface in the object oriented context
|
||||
class Buffer a where
|
||||
class (Bindable a) => Buffer a where
|
||||
|
||||
type ObjName a :: *
|
||||
|
||||
|
@ -20,11 +24,3 @@ class Buffer a where
|
|||
|
||||
-- bind the buffer object and fill it with data
|
||||
initialize :: a -> IO ()
|
||||
|
||||
-- bind the buffer
|
||||
bind :: a -> IO ()
|
||||
-- bind buf = GL.bindBuffer (target buf) $= Just (glId buf)
|
||||
|
||||
-- unbind the buffer
|
||||
unbind :: a -> IO ()
|
||||
-- unbind buf = GL.bindBuffer (target buf) $= Nothing
|
||||
|
|
|
@ -9,6 +9,7 @@ import Foreign
|
|||
|
||||
-- internal imports
|
||||
|
||||
import BindableClass
|
||||
import BufferClass
|
||||
|
||||
-- layout of the IndexBuffer data object
|
||||
|
@ -40,6 +41,8 @@ instance Buffer (IndexBuffer a) where
|
|||
-- release the buffer using the default implementation of the typeclass
|
||||
unbind buf
|
||||
|
||||
instance Bindable (IndexBuffer a) where
|
||||
|
||||
-- bind the buffer
|
||||
bind buf = GL.bindBuffer (target buf) $= Just (glId buf)
|
||||
|
||||
|
|
|
@ -31,6 +31,7 @@ import System.Random (randomRIO)
|
|||
|
||||
-- internal imports
|
||||
|
||||
import BindableClass
|
||||
import BufferClass
|
||||
import VertexArray
|
||||
import VertexBuffer
|
||||
|
|
|
@ -11,6 +11,7 @@ import Control.Concurrent.MVar
|
|||
|
||||
-- internal imports
|
||||
|
||||
import BindableClass
|
||||
import BufferClass
|
||||
import VertexBuffer
|
||||
|
||||
|
@ -29,6 +30,9 @@ instance Buffer VertexArray where
|
|||
|
||||
initialize va = return ()
|
||||
|
||||
|
||||
instance Bindable VertexArray where
|
||||
|
||||
bind va = GL.bindVertexArrayObject $= Just (vArrId va)
|
||||
|
||||
unbind va = GL.bindVertexArrayObject $= Nothing
|
||||
|
|
|
@ -9,6 +9,7 @@ import Foreign
|
|||
|
||||
-- internal imports
|
||||
|
||||
import BindableClass
|
||||
import BufferClass
|
||||
|
||||
-- layout of the VertexBuffer data object
|
||||
|
@ -39,6 +40,9 @@ instance Buffer (VertexBuffer a) where
|
|||
-- release the buffer using the default implementation of the typeclass
|
||||
unbind buf
|
||||
|
||||
|
||||
instance Bindable (VertexBuffer a) where
|
||||
|
||||
-- bind the buffer
|
||||
bind buf = GL.bindBuffer (target buf) $= Just (glId buf)
|
||||
|
||||
|
|
Loading…
Reference in a new issue