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