{-# 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, 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 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 , _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. -} newtype VAO = VAO { _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. -} data VBO = VBO { _vboName :: GLuint , _vboPtr :: Ptr Float , _vboVertexSize :: 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