Cleanup shader code

This commit is contained in:
2023-03-14 22:05:17 +00:00
parent b7d7bc2346
commit db0d24d044
4 changed files with 29 additions and 27 deletions
+2 -2
View File
@@ -91,10 +91,10 @@ doDrawing' win pdata u = do
uncurry (zipWithM_ bufferPokedVBO) $ uncurry (zipWithM_ bufferPokedVBO) $
unzip unzip
[ (pdata ^. vboWalls, nWalls) [ (pdata ^. vboWalls, nWalls)
, (_vboShapes pdata, nShapeVs)
, (pdata ^. vboWindows, nWins) , (pdata ^. vboWindows, nWins)
, (snd $ _textureArrayShader pdata, nFls) , (snd $ _textureArrayShader pdata, nFls)
] ]
bufferPokedVBO (_vboShapes pdata) nShapeVs
glNamedBufferSubData glNamedBufferSubData
(_eboName $ _shapeEBO pdata) (_eboName $ _shapeEBO pdata)
0 0
@@ -136,7 +136,7 @@ doDrawing' win pdata u = do
renderLayer BottomLayer shadV layerCounts renderLayer BottomLayer shadV layerCounts
--draw object shapes onto base buffer --draw object shapes onto base buffer
let fs = _shapeShader pdata let fs = _shapeShader pdata
glUseProgram (_shadName $ fs) glUseProgram (_shadName fs)
glBindVertexArray $ fs ^. shadVAO . vaoName glBindVertexArray $ fs ^. shadVAO . vaoName
glDrawElements glDrawElements
(marshalEPrimitiveMode $ _shadPrim' $ fs) (marshalEPrimitiveMode $ _shadPrim' $ fs)
+14 -9
View File
@@ -52,13 +52,15 @@ preloadRender = do
-- bindVertexArrayObject $= Just wpVAOname -- bindVertexArrayObject $= Just wpVAOname
wpVAOname <- mglCreate glCreateVertexArrays wpVAOname <- mglCreate glCreateVertexArrays
glBindVertexArray wpVAOname glBindVertexArray wpVAOname
setupVertexAttribPointer wpVAOname wpVBOname 0 4 8 0 glVertexArrayVertexBuffer wpVAOname 0 wpVBOname 0 (fromIntegral $ floatSize * 8)
setupVertexAttribPointer wpVAOname 0 4 0
--wpColVAOname <- genObjectName --wpColVAOname <- genObjectName
--bindVertexArrayObject $= Just wpColVAOname --bindVertexArrayObject $= Just wpColVAOname
wpColVAOname <- mglCreate glCreateVertexArrays wpColVAOname <- mglCreate glCreateVertexArrays
glBindVertexArray wpColVAOname glBindVertexArray wpColVAOname
setupVertexAttribPointer wpColVAOname wpVBOname 0 4 8 0 glVertexArrayVertexBuffer wpColVAOname 0 wpVBOname 0 (fromIntegral $ floatSize * 8)
setupVertexAttribPointer wpColVAOname wpVBOname 1 4 8 4 setupVertexAttribPointer wpColVAOname 0 4 0
setupVertexAttribPointer wpColVAOname 1 4 4
let wpVAO = VAO{_vaoName = wpVAOname, _vaoAttribSizes = [4], _vaoStride = 8} let wpVAO = VAO{_vaoName = wpVAOname, _vaoAttribSizes = [4], _vaoStride = 8}
wpColVAO = VAO{_vaoName = wpColVAOname, _vaoAttribSizes = [4,4], _vaoStride = 8} wpColVAO = VAO{_vaoName = wpColVAOname, _vaoAttribSizes = [4,4], _vaoStride = 8}
-- setup window points VBO, VAOs and shaders -- setup window points VBO, VAOs and shaders
@@ -73,8 +75,9 @@ preloadRender = do
--bindVertexArrayObject $= Just winColVAOname --bindVertexArrayObject $= Just winColVAOname
winColVAOname <- mglCreate glCreateVertexArrays winColVAOname <- mglCreate glCreateVertexArrays
glBindVertexArray winColVAOname glBindVertexArray winColVAOname
setupVertexAttribPointer winColVAOname winVBOname 0 4 8 0 glVertexArrayVertexBuffer winColVAOname 0 winVBOname 0 (fromIntegral $ floatSize * 8)
setupVertexAttribPointer winColVAOname winVBOname 1 4 8 4 setupVertexAttribPointer winColVAOname 0 4 0
setupVertexAttribPointer winColVAOname 1 4 4
let winColVAO = VAO let winColVAO = VAO
{_vaoName = winColVAOname, _vaoAttribSizes = [4,4], _vaoStride = 8} {_vaoName = winColVAOname, _vaoAttribSizes = [4,4], _vaoStride = 8}
-- setup shape geometry/cap VBO and two VAOs -- setup shape geometry/cap VBO and two VAOs
@@ -86,7 +89,7 @@ preloadRender = do
nullPtr nullPtr
GL_STREAM_DRAW GL_STREAM_DRAW
let shEBO = EBO{_eboName = shEBOname, _eboPtr = shEBOptr} let shEBO = EBO{_eboName = shEBOname, _eboPtr = shEBOptr}
shVBO <- trueSetupVBO 8 shVBO <- setupVBO4 8
-- shPosColVAOname <- mglCreate glCreateVertexArrays -- shPosColVAOname <- mglCreate glCreateVertexArrays
-- glBindVertexArray shPosColVAOname -- glBindVertexArray shPosColVAOname
-- setupVertexAttribPointer shPosColVAOname (shVBO ^. vboName) 0 3 7 0 -- setupVertexAttribPointer shPosColVAOname (shVBO ^. vboName) 0 3 7 0
@@ -97,7 +100,8 @@ preloadRender = do
--bindVertexArrayObject $= Just shPosVAOname --bindVertexArrayObject $= Just shPosVAOname
shPosVAOname <- mglCreate glCreateVertexArrays shPosVAOname <- mglCreate glCreateVertexArrays
glBindVertexArray shPosVAOname glBindVertexArray shPosVAOname
setupVertexAttribPointer shPosVAOname (shVBO ^. vboName) 0 4 8 0 glVertexArrayVertexBuffer shPosVAOname 0 (shVBO ^. vboName) 0 (fromIntegral $ floatSize * 8)
setupVertexAttribPointer shPosVAOname 0 4 0
--bindBuffer ElementArrayBuffer $= Just shEBOname --bindBuffer ElementArrayBuffer $= Just shEBOname
glVertexArrayElementBuffer shPosVAOname shEBOname glVertexArrayElementBuffer shPosVAOname shEBOname
let --shPosColVAO = VAO let --shPosColVAO = VAO
@@ -108,7 +112,8 @@ preloadRender = do
--bindVertexArrayObject $= Just shEdgeVAOname --bindVertexArrayObject $= Just shEdgeVAOname
shEdgeVAOname <- mglCreate glCreateVertexArrays shEdgeVAOname <- mglCreate glCreateVertexArrays
glBindVertexArray shEdgeVAOname glBindVertexArray shEdgeVAOname
setupVertexAttribPointer shEdgeVAOname (shVBO ^. vboName) 0 4 8 0 glVertexArrayVertexBuffer shEdgeVAOname 0 (shVBO ^. vboName) 0 (fromIntegral $ floatSize * 8)
setupVertexAttribPointer shEdgeVAOname 0 4 0
--setup ebo for silhouette edges --setup ebo for silhouette edges
silEBOname <- mglCreate glCreateBuffers silEBOname <- mglCreate glCreateBuffers
silEBOptr <- mallocArray numDrawableElements silEBOptr <- mallocArray numDrawableElements
@@ -150,7 +155,7 @@ preloadRender = do
positionalBlankShad <- makeShader "positional/blank" [vert, frag] [3] ETriangles positionalBlankShad <- makeShader "positional/blank" [vert, frag] [3] ETriangles
-- 2D draw shaders -- 2D draw shaders
bslist <- makeShader "dualTwoD/basic" [vert, frag] [3, 4] ETriangles bslist <- makeShader "dualTwoD/basic" [vert, frag] [3, 4] ETriangles
bslista <- makeShader' "shape/basic" [vert, frag] [4, 4] ETriangles shVBO bslista <- makeShader4 "shape/basic" [vert, frag] [4, 4] ETriangles shVBO
glVertexArrayElementBuffer (bslista ^. shadVAO . vaoName) shEBOname glVertexArrayElementBuffer (bslista ^. shadVAO . vaoName) shEBOname
aslist <- makeShader "dualTwoD/arc" [vert, frag] [3, 4, 3] ETriangles aslist <- makeShader "dualTwoD/arc" [vert, frag] [3, 4, 3] ETriangles
eslist <- makeShader "dualTwoD/ellipse" [vert, geom, frag] [3, 4] ETriangles eslist <- makeShader "dualTwoD/ellipse" [vert, geom, frag] [3, 4] ETriangles
+12 -16
View File
@@ -1,7 +1,7 @@
module Shader.Compile ( module Shader.Compile (
trueSetupVBO, setupVBO4,
makeShader, makeShader,
makeShader', makeShader4,
makeByteStringShaderUsingVAO, makeByteStringShaderUsingVAO,
makeShaderSized, makeShaderSized,
makeShaderUsingVAO, makeShaderUsingVAO,
@@ -9,6 +9,7 @@ module Shader.Compile (
setupVertexAttribPointer, setupVertexAttribPointer,
) where ) where
import Control.Lens
import Control.Monad import Control.Monad
import qualified Data.ByteString as BS import qualified Data.ByteString as BS
import qualified Data.ByteString.Unsafe as BU import qualified Data.ByteString.Unsafe as BU
@@ -45,7 +46,7 @@ makeShader s shaderlist sizes pm = do
} }
, vbo) , vbo)
makeShader' :: makeShader4 ::
-- | First part of the name of the shader -- | First part of the name of the shader
String -> String ->
-- | shader types -- | shader types
@@ -55,7 +56,7 @@ makeShader' ::
EPrimitiveMode -> EPrimitiveMode ->
VBO -> VBO ->
IO FullShader IO FullShader
makeShader' s shaderlist sizes pm vbo = do makeShader4 s shaderlist sizes pm vbo = do
prog <- makeSourcedShader s shaderlist prog <- makeSourcedShader s shaderlist
vao <- setupVAOvbo sizes vbo vao <- setupVAOvbo sizes vbo
return $ FullShader return $ FullShader
@@ -66,8 +67,8 @@ makeShader' s shaderlist sizes pm vbo = do
, _shadUnis' = mempty , _shadUnis' = mempty
} }
trueSetupVBO :: Int -> IO VBO setupVBO4 :: Int -> IO VBO
trueSetupVBO vertexsize = do setupVBO4 vertexsize = do
vboname <- mglCreate glCreateBuffers vboname <- mglCreate glCreateBuffers
thePtr <- mallocArray (vertexsize * numDrawableElements) thePtr <- mallocArray (vertexsize * numDrawableElements)
-- Allocate space -- Allocate space
@@ -190,8 +191,9 @@ setupVBOSized ndraw vao sizes = do
--vboName <- genObjectName --vboName <- genObjectName
--bindBuffer ArrayBuffer $= Just vboName --bindBuffer ArrayBuffer $= Just vboName
vboname <- mglCreate glCreateBuffers vboname <- mglCreate glCreateBuffers
glVertexArrayVertexBuffer vao 0 vboname 0 (fromIntegral $ floatSize * strd)
forM_ (zip3 [0 ..] sizes offs) $ \(loc, siz, off) -> do forM_ (zip3 [0 ..] sizes offs) $ \(loc, siz, off) -> do
setupVertexAttribPointer vao vboname loc siz strd off setupVertexAttribPointer vao loc siz off
thePtr <- mallocArray (strd * ndraw) thePtr <- mallocArray (strd * ndraw)
-- Allocate space -- Allocate space
glNamedBufferData vboname glNamedBufferData vboname
@@ -210,9 +212,9 @@ setupVBOSized ndraw vao sizes = do
setupVertexAttribs :: VBO -> GLuint -> [Int] -> IO () setupVertexAttribs :: VBO -> GLuint -> [Int] -> IO ()
setupVertexAttribs vbo vao sizes = do setupVertexAttribs vbo vao sizes = do
let vboname = _vboName vbo glVertexArrayVertexBuffer vao 0 (vbo ^. vboName) 0 (fromIntegral $ floatSize * strd)
forM_ (zip3 [0 ..] sizes offs) $ \(loc, siz, off) -> do forM_ (zip3 [0 ..] sizes offs) $ \(loc, siz, off) -> do
setupVertexAttribPointer vao vboname loc siz strd off setupVertexAttribPointer vao loc siz off
where where
strd = sum sizes strd = sum sizes
offs = scanl (+) 0 sizes offs = scanl (+) 0 sizes
@@ -221,19 +223,13 @@ setupVertexAttribs vbo vao sizes = do
setupVertexAttribPointer :: setupVertexAttribPointer ::
GLuint -> GLuint ->
-- | vao name -- | vao name
GLuint ->
-- | vbo name
Int -> Int ->
-- | Size -- | Size
Int -> Int ->
-- | Stride
Int ->
-- | Offset -- | Offset
Int -> Int ->
IO () IO ()
setupVertexAttribPointer vao vbo loc siz strd off = do setupVertexAttribPointer vao loc siz off = do
glVertexArrayVertexBuffer vao 0 vbo 0 (fromIntegral $ floatSize * strd)
-- the above is probably duplicated: needs moving out of this function
glEnableVertexArrayAttrib vao loc' glEnableVertexArrayAttrib vao loc'
glVertexArrayAttribFormat vao loc' siz' GL_FLOAT GL_FALSE (fromIntegral $ floatSize * off) glVertexArrayAttribFormat vao loc' siz' GL_FLOAT GL_FALSE (fromIntegral $ floatSize * off)
glVertexArrayAttribBinding vao loc' 0 glVertexArrayAttribBinding vao loc' 0
+1
View File
@@ -18,6 +18,7 @@ module Shader.Data
, vboName , vboName
, vboPtr , vboPtr
, vboVertexSize , vboVertexSize
, eboName , eboName
, eboPtr , eboPtr