Refactor shader types
This commit is contained in:
+87
-67
@@ -1,98 +1,118 @@
|
||||
{-# LANGUAGE TemplateHaskell #-}
|
||||
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
|
||||
{-# LANGUAGE StrictData #-}
|
||||
{- | Datatypes used to setup and pass data to shaders. -}
|
||||
module Shader.Data
|
||||
( VAO (..)
|
||||
, VBO (..)
|
||||
, EBO (..)
|
||||
, Shader (..)
|
||||
, FullShader (..)
|
||||
, ShaderTexture (..)
|
||||
, EPrimitiveMode (..)
|
||||
-- | Lens functions
|
||||
, vaoName
|
||||
, shaderUINT
|
||||
, shaderPrimitive
|
||||
, shaderVAO
|
||||
{-# LANGUAGE TemplateHaskell #-}
|
||||
|
||||
, textureObject
|
||||
-- | 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
|
||||
|
||||
, vboName
|
||||
, vboPtr
|
||||
, vboVertexSize
|
||||
|
||||
, eboName
|
||||
, eboPtr
|
||||
|
||||
, shadName
|
||||
, shadVAO
|
||||
, shadPrim'
|
||||
, shadTex'
|
||||
-- | Synonyms
|
||||
, vert
|
||||
, geom
|
||||
, frag
|
||||
) where
|
||||
import Graphics.GL.Core45
|
||||
import Foreign
|
||||
import Control.Lens
|
||||
{- | Datatype containing the necessary information for a single shader. -}
|
||||
data FullShader = FullShader
|
||||
{ _shadName :: GLuint -- should be shaderID
|
||||
, _shadVAO :: VAO
|
||||
, _shadPrim' :: EPrimitiveMode
|
||||
, _shadTex' :: Maybe ShaderTexture
|
||||
}
|
||||
import Foreign
|
||||
import Graphics.GL.Core45
|
||||
|
||||
-- | Datatype containing the necessary information for a single shader.
|
||||
data Shader = Shader
|
||||
{ _shaderUINT :: GLuint -- should be shaderID
|
||||
, _shaderPrimitive :: GLenum
|
||||
, _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. -}
|
||||
and its buffer targets.
|
||||
-}
|
||||
newtype VAO = VAO
|
||||
{ _vaoName :: GLuint
|
||||
{ _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. -}
|
||||
Vertex attributes are interleaved within the vbo.
|
||||
-}
|
||||
data VBO = VBO
|
||||
{ _vboName :: GLuint
|
||||
, _vboPtr :: Ptr Float
|
||||
, _vboVertexSize :: Int
|
||||
{ _vboName :: GLuint
|
||||
, _vboPtr :: Ptr Float
|
||||
, _vboVertexSize :: Int
|
||||
-- add int for AMOUNT of data poked!
|
||||
}
|
||||
|
||||
data EBO = EBO
|
||||
{ _eboName :: GLuint
|
||||
, _eboPtr :: Ptr GLushort
|
||||
{ _eboName :: GLuint
|
||||
, _eboPtr :: Ptr GLushort
|
||||
}
|
||||
{- | Datatype containing the reference to a texture object. -}
|
||||
|
||||
-- | Datatype containing the reference to a texture object.
|
||||
newtype ShaderTexture = ShaderTexture
|
||||
{ _textureObject :: GLuint -- DSA style texture, 450
|
||||
-- , _textureTarget :: GLenum
|
||||
{ _textureObject :: GLuint -- DSA style texture, 450
|
||||
-- , _textureTarget :: GLenum
|
||||
}
|
||||
data EPrimitiveMode
|
||||
= EPoints
|
||||
| ELines
|
||||
| ELinesAdjacency
|
||||
| ELineLoop
|
||||
| ELineStrip
|
||||
| ETriangles
|
||||
| ETriangleStrip
|
||||
| ETriangleFan
|
||||
| EQuads
|
||||
| EQuadStrip
|
||||
| EPolygon
|
||||
| EPatches
|
||||
|
||||
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 ''FullShader
|
||||
makeLenses ''EBO
|
||||
makeLenses ''ShaderTexture
|
||||
makeLenses ''Shader
|
||||
makeLenses ''FBO
|
||||
makeLenses ''TO
|
||||
makeLenses ''PrimitiveMode
|
||||
|
||||
Reference in New Issue
Block a user