{-# 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