Tweak vbo
This commit is contained in:
+15
-15
@@ -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
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user