Refactor shader types

This commit is contained in:
2023-03-22 14:08:07 +00:00
parent c0579fae00
commit 5769477ad4
20 changed files with 303 additions and 330 deletions
+87 -67
View File
@@ -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