From 01268e4c8a2e5f7cb8f5e71ec0c7d729fe4ee0d8 Mon Sep 17 00:00:00 2001 From: justin Date: Thu, 9 Mar 2023 12:49:34 +0000 Subject: [PATCH] Refactor EBO to use DSA --- src/Dodge/Render.hs | 28 ++++++++++++++------- src/Dodge/Render/Shadow.hs | 2 +- src/Preload/Render.hs | 51 ++++++++++++++++++++++++-------------- src/Shader/Data.hs | 4 +-- 4 files changed, 55 insertions(+), 30 deletions(-) diff --git a/src/Dodge/Render.hs b/src/Dodge/Render.hs index 43a0a94a7..4672a02e3 100644 --- a/src/Dodge/Render.hs +++ b/src/Dodge/Render.hs @@ -19,7 +19,7 @@ import Dodge.Render.ShapePicture import Dodge.Render.Walls import Foreign import Geometry -import Graphics.GL.Core43 +import Graphics.GL.Core45 import Graphics.Rendering.OpenGL hiding (color, rotate, scale, translate) import MatrixHelper import Render @@ -84,17 +84,27 @@ doDrawing win pdata u = do , (_windowShader pdata, nWins) , (_textureArrayShader pdata, nFls) ] - bindBuffer ElementArrayBuffer $= pdata ^? shapeEBO . ebo --Just (_ebo $ _shapeEBO pdata) - bufferSubData - ElementArrayBuffer - WriteToBuffer + --bindBuffer ElementArrayBuffer $= pdata ^? shapeEBO . eboName --Just (_ebo $ _shapeEBO pdata) + --bufferSubData + -- ElementArrayBuffer + -- WriteToBuffer + -- 0 + -- (fromIntegral $ glushortSize * nIndices) + -- (_eboPtr $ _shapeEBO pdata) + glNamedBufferSubData + (_eboName $ _shapeEBO pdata) 0 (fromIntegral $ glushortSize * nIndices) (_eboPtr $ _shapeEBO pdata) - bindBuffer ElementArrayBuffer $= pdata ^? silhouetteEBO . ebo --Just (_ebo $ _silhouetteEBO pdata) - bufferSubData - ElementArrayBuffer - WriteToBuffer + --bindBuffer ElementArrayBuffer $= pdata ^? silhouetteEBO . eboName --Just (_ebo $ _silhouetteEBO pdata) + --bufferSubData + -- ElementArrayBuffer + -- WriteToBuffer + -- 0 + -- (fromIntegral $ glushortSize * nSilIndices) + -- (_eboPtr $ _silhouetteEBO pdata) + glNamedBufferSubData + (_eboName $ _silhouetteEBO pdata) 0 (fromIntegral $ glushortSize * nSilIndices) (_eboPtr $ _silhouetteEBO pdata) diff --git a/src/Dodge/Render/Shadow.hs b/src/Dodge/Render/Shadow.hs index 047fa9305..28eb1c64c 100644 --- a/src/Dodge/Render/Shadow.hs +++ b/src/Dodge/Render/Shadow.hs @@ -33,7 +33,7 @@ drawCPUShadows pdata s pos rad = do --currentProgram $= theshad ^? shadProg glUseProgram (theshad ^. shadProg') --bindVertexArrayObject $= Just (_vaoName $ _shadVAO' theshad) - glBindVertexArray $ (_vaoName $ _shadVAO' theshad) + glBindVertexArray . _vaoName $ _shadVAO' theshad glDrawArrays (marshalEPrimitiveMode $ _shadPrim' theshad) 0 diff --git a/src/Preload/Render.hs b/src/Preload/Render.hs index d56356834..1f48c019a 100644 --- a/src/Preload/Render.hs +++ b/src/Preload/Render.hs @@ -73,15 +73,21 @@ preloadRender = do setupVertexAttribPointer 1 4 8 4 let winColVAO = VAO{_vaoName = winColVAOname, _vaoVBO = winVBO} -- setup shape geometry/cap VBO and two VAOs - shEBOname <- genObjectName + --shEBOname <- genObjectName shEBOptr <- mallocArray numDrawableElements - bindBuffer ElementArrayBuffer $= Just shEBOname - bufferData ElementArrayBuffer - $= ( fromIntegral $ glushortSize * numDrawableElements - , nullPtr - , StreamDraw - ) - let shEBO = EBO{_ebo = shEBOname, _eboPtr = shEBOptr} + shEBOname <- mglCreateSingle glCreateBuffers + --bindBuffer ElementArrayBuffer $= Just shEBOname + --bufferData ElementArrayBuffer + -- $= ( fromIntegral $ glushortSize * numDrawableElements + -- , nullPtr + -- , StreamDraw + -- ) + glNamedBufferData + shEBOname + ( fromIntegral $ glushortSize * numDrawableElements) + nullPtr + GL_STREAM_DRAW + let shEBO = EBO{_eboName = shEBOname, _eboPtr = shEBOptr} shVBOname <- genObjectName shVBOptr <- mallocArray (7 * numDrawableElements) bindBuffer ArrayBuffer $= Just shVBOname @@ -98,14 +104,16 @@ preloadRender = do bindBuffer ArrayBuffer $= Just shVBOname setupVertexAttribPointer 0 3 7 0 setupVertexAttribPointer 1 4 7 3 - bindBuffer ElementArrayBuffer $= Just shEBOname + --bindBuffer ElementArrayBuffer $= Just shEBOname + glBindBuffer GL_ELEMENT_ARRAY_BUFFER shEBOname --shPosVAOname <- genObjectName --bindVertexArrayObject $= Just shPosVAOname shPosVAOname <- mglCreateSingle glGenVertexArrays glBindVertexArray shPosVAOname bindBuffer ArrayBuffer $= Just shVBOname setupVertexAttribPointer 0 3 7 0 - bindBuffer ElementArrayBuffer $= Just shEBOname + --bindBuffer ElementArrayBuffer $= Just shEBOname + glBindBuffer GL_ELEMENT_ARRAY_BUFFER shEBOname let shPosColVAO = VAO{_vaoName = shPosColVAOname, _vaoVBO = shVBO} shPosVAO = VAO{_vaoName = shPosVAOname, _vaoVBO = shVBO} --setup silhouette edge VAO @@ -116,16 +124,23 @@ preloadRender = do bindBuffer ArrayBuffer $= Just shVBOname setupVertexAttribPointer 0 3 7 0 --setup ebo for silhouette edges - silEBOname <- genObjectName + --silEBOname <- genObjectName + silEBOname <- mglCreateSingle glCreateBuffers silEBOptr <- mallocArray numDrawableElements -- it may be important to bind this while the correct VAO is bound - bindBuffer ElementArrayBuffer $= Just silEBOname - bufferData ElementArrayBuffer - $= ( fromIntegral $ glushortSize * numDrawableElements - , nullPtr - , StreamDraw - ) - let silEBO = EBO{_ebo = silEBOname, _eboPtr = silEBOptr} + glBindBuffer GL_ELEMENT_ARRAY_BUFFER silEBOname --bindBuffer ElementArrayBuffer $= Just silEBOname + --bindBuffer ElementArrayBuffer $= Just silEBOname + glNamedBufferData + silEBOname + ( fromIntegral $ glushortSize * numDrawableElements) + nullPtr + GL_STREAM_DRAW + --bufferData ElementArrayBuffer + -- $= ( fromIntegral $ glushortSize * numDrawableElements + -- , nullPtr + -- , StreamDraw + -- ) + let silEBO = EBO{_eboName = silEBOname, _eboPtr = silEBOptr} shEdgeVAO = VAO{_vaoName = shEdgeVAOname, _vaoVBO = shVBO} -- lighting shaders lightingWallShadShad <- diff --git a/src/Shader/Data.hs b/src/Shader/Data.hs index d394b3698..a2beff2dd 100644 --- a/src/Shader/Data.hs +++ b/src/Shader/Data.hs @@ -16,7 +16,7 @@ module Shader.Data , vboPtr , vboAttribSizes , vboStride - , ebo + , eboName , eboPtr , shadProg' @@ -59,7 +59,7 @@ data VBO = VBO , _vboStride :: Int } data EBO = EBO - { _ebo :: BufferObject + { _eboName :: GLuint , _eboPtr :: Ptr GLushort } {- | Datatype containing the reference to a texture object. -}