Files
loop/src/Shader/Data.hs
T

128 lines
3.0 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 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
makeLenses ''VertexAttribute