From db0d24d0441c32ddba3d5d158e18d65507f8b459 Mon Sep 17 00:00:00 2001 From: justin Date: Tue, 14 Mar 2023 22:05:17 +0000 Subject: [PATCH] Cleanup shader code --- src/Dodge/Render.hs | 4 ++-- src/Preload/Render.hs | 23 ++++++++++++++--------- src/Shader/Compile.hs | 28 ++++++++++++---------------- src/Shader/Data.hs | 1 + 4 files changed, 29 insertions(+), 27 deletions(-) diff --git a/src/Dodge/Render.hs b/src/Dodge/Render.hs index 7ea73779f..aa7b4115b 100644 --- a/src/Dodge/Render.hs +++ b/src/Dodge/Render.hs @@ -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) diff --git a/src/Preload/Render.hs b/src/Preload/Render.hs index 31fbeefa2..161dde956 100644 --- a/src/Preload/Render.hs +++ b/src/Preload/Render.hs @@ -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 diff --git a/src/Shader/Compile.hs b/src/Shader/Compile.hs index 8d679c760..ba5f4b99c 100644 --- a/src/Shader/Compile.hs +++ b/src/Shader/Compile.hs @@ -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 diff --git a/src/Shader/Data.hs b/src/Shader/Data.hs index a6e9e14b2..6022a6eb4 100644 --- a/src/Shader/Data.hs +++ b/src/Shader/Data.hs @@ -18,6 +18,7 @@ module Shader.Data , vboName , vboPtr , vboVertexSize + , eboName , eboPtr