Tweak vbo

This commit is contained in:
2021-06-11 21:04:42 +02:00
parent afece392f7
commit c2360a5f0f
2 changed files with 24 additions and 23 deletions
+15 -15
View File
@@ -38,39 +38,39 @@ makeLenses ''RenderData
preloadRender :: IO RenderData preloadRender :: IO RenderData
preloadRender = do preloadRender = do
-- lighting shaders -- lighting shaders
lightningFloorShad <- makeShader "lighting/floor" [vert,geom,frag] [(0,4)] Points lightningFloorShad <- makeShader "lighting/floor" [vert,geom,frag] [4] Points
(return . return . flat4 . _unRender1111) (return . return . flat4 . _unRender1111)
wsShad <- makeShader "lighting/occlude" [vert,geom,frag] [(0,4)] Points pokeWPStrat wsShad <- makeShader "lighting/occlude" [vert,geom,frag] [4] Points pokeWPStrat
>>= addUniforms ["lightPos"] >>= addUniforms ["lightPos"]
wlLightShad wlLightShad
<- makeShader "lighting/wall" [vert,geom,frag] [(0,4)] Points pokeWPStrat <- makeShader "lighting/wall" [vert,geom,frag] [4] Points pokeWPStrat
>>= addUniforms ["lightPos","radLum"] >>= addUniforms ["lightPos","radLum"]
-- 2D draw shaders -- 2D draw shaders
bslist <- makeShader "twoD/basic" [vert,frag] [(0,3),(1,4)] Triangles pokeTriStrat bslist <- makeShader "twoD/basic" [vert,frag] [3,4] Triangles pokeTriStrat
lslist <- makeShader "twoD/basic" [vert,frag] [(0,3),(1,4)] Lines pokeLineStrat lslist <- makeShader "twoD/basic" [vert,frag] [3,4] Lines pokeLineStrat
aslist <- makeShader "twoD/arc" [vert,geom,frag] [(0,3),(1,4),(2,4)] Points pokeArcStrat aslist <- makeShader "twoD/arc" [vert,geom,frag] [3,4,4] Points pokeArcStrat
eslist <- makeShader "twoD/ellipse" [vert,geom,frag] [(0,3),(1,4)] Triangles pokeEllStrat eslist <- makeShader "twoD/ellipse" [vert,geom,frag] [3,4] Triangles pokeEllStrat
bezierQuadShader <- makeShader bezierQuadShader <- makeShader
"twoD/bezierQuad" [vert,frag] [(0,3),(1,4),(2,4)] TriangleStrip pokeBezQStrat "twoD/bezierQuad" [vert,frag] [3,4,4] TriangleStrip pokeBezQStrat
cslist <- makeShader "twoD/character" [vert,geom,frag] cslist <- makeShader "twoD/character" [vert,geom,frag]
[(0,3),(1,4),(2,3)] Points pokeCharStrat [3,4,3] Points pokeCharStrat
>>= addTexture "data/texture/charMap.png" >>= addTexture "data/texture/charMap.png"
-- texture shaders, no textures attached -- texture shaders, no textures attached
fsShad <- makeShader "texture/simple" [vert,frag] [(0,2),(1,2)] TriangleStrip $ const fsShad <- makeShader "texture/simple" [vert,frag] [2,2] TriangleStrip $ const
[[[-1, 1],[0,1]] [[[-1, 1],[0,1]]
,[[ 1, 1],[1,1]] ,[[ 1, 1],[1,1]]
,[[-1,-1],[0,0]] ,[[-1,-1],[0,0]]
,[[ 1,-1],[1,0]] ,[[ 1,-1],[1,0]]
] ]
_ <- F.foldM (pokeShader fsShad) [RenderConst] -- fix fullscreen vertex positions now _ <- F.foldM (pokeShader fsShad) [RenderConst] -- fix fullscreen vertex positions now
boxBlurShad <- makeShader "texture/boxBlur" [vert,frag] [(0,2),(1,2)] TriangleStrip $ const boxBlurShad <- makeShader "texture/boxBlur" [vert,frag] [2,2] TriangleStrip $ const
[[[-1, 1],[0,1]] [[[-1, 1],[0,1]]
,[[ 1, 1],[1,1]] ,[[ 1, 1],[1,1]]
,[[-1,-1],[0,0]] ,[[-1,-1],[0,0]]
,[[ 1,-1],[1,0]] ,[[ 1,-1],[1,0]]
] ]
_ <- F.foldM (pokeShader boxBlurShad) [RenderConst] -- fix fullscreen vertex positions now _ <- F.foldM (pokeShader boxBlurShad) [RenderConst] -- fix fullscreen vertex positions now
grayscaleShad <- makeShader "texture/grayscale" [vert,frag] [(0,2),(1,2)] TriangleStrip $ const grayscaleShad <- makeShader "texture/grayscale" [vert,frag] [2,2] TriangleStrip $ const
[[[-1, 1],[0,1]] [[[-1, 1],[0,1]]
,[[ 1, 1],[1,1]] ,[[ 1, 1],[1,1]]
,[[-1,-1],[0,0]] ,[[-1,-1],[0,0]]
@@ -78,13 +78,13 @@ preloadRender = do
] ]
_ <- F.foldM (pokeShader grayscaleShad) [RenderConst] -- fix fullscreen vertex positions now _ <- F.foldM (pokeShader grayscaleShad) [RenderConst] -- fix fullscreen vertex positions now
-- background shader -- background shader
bgShad <- makeShader "background" [vert,geom,frag] [(0,4),(1,2)] Points pokeBGStrat bgShad <- makeShader "background" [vert,geom,frag] [4,2] Points pokeBGStrat
>>= addTexture "data/texture/marbleSlabs.png" >>= addTexture "data/texture/marbleSlabs.png"
-- >>= addTexture "data/texture/smudgedDirt.png" -- >>= addTexture "data/texture/smudgedDirt.png"
-- blank wallShader -- blank wallShader
wlBlank <- makeShader "wall/blank" [vert,geom,frag] [(0,4),(1,4)] Points pokeWPColStrat wlBlank <- makeShader "wall/blank" [vert,geom,frag] [4,4] Points pokeWPColStrat
-- textured wallShader -- textured wallShader
wlTexture <- makeShader "wall/texture" [vert,geom,frag] [(0,4),(1,4)] Points pokeWPColStrat wlTexture <- makeShader "wall/texture" [vert,geom,frag] [4,4] Points pokeWPColStrat
>>= addTexture "data/texture/grayscaleDirt.png" >>= addTexture "data/texture/grayscaleDirt.png"
---- texture shader ---- texture shader
+9 -8
View File
@@ -117,13 +117,13 @@ The shader is made up of files begining with the inputted string with extensions
makeShader makeShader
:: String -- ^ First part of the name of the shader :: String -- ^ First part of the name of the shader
-> [ShaderType] -- ^ Filetype extensions -> [ShaderType] -- ^ Filetype extensions
-> [(GLuint,Int)] -- ^ The shaders input vertices (location, size) -> [Int] -- ^ The input vertex sizes
-> PrimitiveMode -> PrimitiveMode
-> (RenderType -> [[[Float]]]) -- ^ Poke strategy: method for creating a list of vertex data to be bound -> (RenderType -> [[[Float]]]) -- ^ Poke strategy: method for creating a list of vertex data to be bound
-> IO (FullShader) -> IO (FullShader)
makeShader s shaderlist alocs pm renStrat = do makeShader s shaderlist sizes pm renStrat = do
(prog,unis) <- makeSourcedShader s shaderlist (prog,unis) <- makeSourcedShader s shaderlist
vaob <- setupVAO alocs vaob <- setupVAO sizes
return $ FullShader { _shaderProgram = prog return $ FullShader { _shaderProgram = prog
, _shaderMatrixUniform = unis , _shaderMatrixUniform = unis
, _shaderVAO = vaob , _shaderVAO = vaob
@@ -143,13 +143,13 @@ numDrawableElements :: Int
{-# INLINE numDrawableElements #-} {-# INLINE numDrawableElements #-}
numDrawableElements = 50000 numDrawableElements = 50000
setupVAO :: [(GLuint,Int)] -> IO VAO setupVAO :: [Int] -> IO VAO
setupVAO ps = do setupVAO sizes = do
theVAO <- genObjectName theVAO <- genObjectName
bindVertexArrayObject $= Just theVAO bindVertexArrayObject $= Just theVAO
theVBO <- setupVBO $ map snd ps theVBO <- setupVBO $ sizes
vbos <- forM ps setupArrayBuffer vbos <- forM (zip (map fromIntegral [(0::Int)..]) sizes) setupArrayBuffer
ptrs <- forM (zip vbos $ map snd ps) setupVBOPointers ptrs <- forM (zip vbos sizes) setupVBOPointers
return $ VAO return $ VAO
{ _vao = theVAO { _vao = theVAO
, _vaoBufferTargets = ptrs , _vaoBufferTargets = ptrs
@@ -182,6 +182,7 @@ setupVertexAttribPointer
setupVertexAttribPointer loc siz strd off = do setupVertexAttribPointer loc siz strd off = do
vertexAttribPointer (AttribLocation (fi loc)) $= vertexAttribPointer (AttribLocation (fi loc)) $=
(ToFloat, VertexArrayDescriptor (fi' siz) Float (fi'' $ floatSize * strd) (bufferOffset off)) (ToFloat, VertexArrayDescriptor (fi' siz) Float (fi'' $ floatSize * strd) (bufferOffset off))
vertexAttribArray (AttribLocation (fi loc)) $= Enabled
where where
fi = fromIntegral fi = fromIntegral
fi' = fromIntegral fi' = fromIntegral