119 lines
2.8 KiB
Haskell
119 lines
2.8 KiB
Haskell
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
|
|
{-# LANGUAGE StrictData #-}
|
|
{-# LANGUAGE TemplateHaskell #-}
|
|
|
|
-- | Datatypes used to setup and pass data to shaders.
|
|
module Shader.Data (
|
|
VAO (..),
|
|
VBO (..),
|
|
EBO (..),
|
|
TO (..),
|
|
FBO (..),
|
|
Shader (..),
|
|
PrimitiveMode (..),
|
|
-- | Lens functions
|
|
vaoName,
|
|
shaderUINT,
|
|
shaderPrimitive,
|
|
shaderVAO,
|
|
shaderTextures,
|
|
textureObject,
|
|
vboName,
|
|
vboPtr,
|
|
vboVertexSize,
|
|
unFBO,
|
|
unTO,
|
|
unPrimitiveMode,
|
|
eboName,
|
|
eboPtr,
|
|
-- | Synonyms
|
|
vert,
|
|
geom,
|
|
frag,
|
|
pmPoints,
|
|
pmLines,
|
|
pmLinesAdjacency,
|
|
pmLineLoop,
|
|
pmLineStrip,
|
|
pmTriangles,
|
|
pmTriangleStrip,
|
|
pmTriangleFan,
|
|
pmQuads,
|
|
pmPatches,
|
|
) where
|
|
|
|
import Control.Lens
|
|
import Foreign
|
|
import Graphics.GL.Core45
|
|
|
|
-- | Datatype containing the necessary information for a single shader.
|
|
data Shader = Shader
|
|
{ _shaderUINT :: GLuint -- should be shaderID
|
|
, _shaderPrimitive :: PrimitiveMode
|
|
, _shaderVAO :: VAO
|
|
, _shaderTextures :: [TO]
|
|
}
|
|
|
|
newtype FBO = FBO {_unFBO :: GLuint}
|
|
|
|
newtype TO = TO {_unTO :: GLuint}
|
|
|
|
{- | Vertex array object: contains the reference to the object,
|
|
and its buffer targets.
|
|
-}
|
|
newtype VAO = VAO
|
|
{ _vaoName :: GLuint
|
|
}
|
|
|
|
{- | Vertex buffer object: contains the reference to the object,
|
|
a pointer to a location with space that can be written to the buffer,
|
|
and a list of attribute pointer sizes.
|
|
Vertex attributes are interleaved within the vbo.
|
|
-}
|
|
data VBO = VBO
|
|
{ _vboName :: GLuint
|
|
, _vboPtr :: Ptr Float
|
|
, _vboVertexSize :: Int
|
|
-- add int for AMOUNT of data poked!
|
|
}
|
|
|
|
data EBO = EBO
|
|
{ _eboName :: GLuint
|
|
, _eboPtr :: Ptr GLushort
|
|
}
|
|
|
|
-- | Datatype containing the reference to a texture object.
|
|
newtype ShaderTexture = ShaderTexture
|
|
{ _textureObject :: GLuint -- DSA style texture, 450
|
|
-- , _textureTarget :: GLenum
|
|
}
|
|
|
|
newtype PrimitiveMode = PrimitiveMode {_unPrimitiveMode :: GLenum}
|
|
|
|
-- | Short synonyms for shader types
|
|
vert, geom, frag :: GLenum
|
|
vert = GL_VERTEX_SHADER
|
|
geom = GL_GEOMETRY_SHADER
|
|
frag = GL_FRAGMENT_SHADER
|
|
|
|
pmPoints, pmLines, pmLinesAdjacency, pmLineLoop, pmLineStrip, pmTriangles, pmTriangleStrip, pmTriangleFan, pmQuads, pmPatches :: PrimitiveMode
|
|
pmPoints = PrimitiveMode GL_POINTS
|
|
pmLines = PrimitiveMode GL_LINES
|
|
pmLinesAdjacency = PrimitiveMode GL_LINES_ADJACENCY
|
|
pmLineLoop = PrimitiveMode GL_LINE_LOOP
|
|
pmLineStrip = PrimitiveMode GL_LINE_STRIP
|
|
pmTriangles = PrimitiveMode GL_TRIANGLES
|
|
pmTriangleStrip = PrimitiveMode GL_TRIANGLE_STRIP
|
|
pmTriangleFan = PrimitiveMode GL_TRIANGLE_FAN
|
|
pmQuads = PrimitiveMode GL_QUADS
|
|
pmPatches = PrimitiveMode GL_PATCHES
|
|
|
|
makeLenses ''VAO
|
|
makeLenses ''VBO
|
|
makeLenses ''EBO
|
|
makeLenses ''ShaderTexture
|
|
makeLenses ''Shader
|
|
makeLenses ''FBO
|
|
makeLenses ''TO
|
|
makeLenses ''PrimitiveMode
|