219c574931
Not yet sure whether the colour vector is correctly input into the ssbo
134 lines
3.1 KiB
Haskell
134 lines
3.1 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,
|
|
-- 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
|
|
}
|
|
|
|
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 }
|
|
|
|
data VertexAttribute = VertexAttribute
|
|
{ _vaCount :: GLint
|
|
, _vaType :: GLenum
|
|
, _vaNormalize :: GLboolean
|
|
, _vaOffset :: 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
|
|
, _vboVertexBytes :: Int
|
|
-- add int for AMOUNT of data poked!
|
|
}
|
|
|
|
data BOType = WindowPoss
|
|
|
|
data FloatBO = FloatBO
|
|
{ _boName :: GLuint
|
|
, _boPtr :: Ptr Float
|
|
, _boType :: BOType
|
|
}
|
|
|
|
data EBO = EBO
|
|
{ _eboName :: GLuint
|
|
, _eboPtr :: Ptr GLuint
|
|
}
|
|
|
|
-- | 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
|
|
makeLenses ''VertexAttribute
|