Refactor EBO to use DSA

This commit is contained in:
2023-03-09 12:49:34 +00:00
parent 2fc08a4d96
commit 01268e4c8a
4 changed files with 55 additions and 30 deletions
+19 -9
View File
@@ -19,7 +19,7 @@ import Dodge.Render.ShapePicture
import Dodge.Render.Walls import Dodge.Render.Walls
import Foreign import Foreign
import Geometry import Geometry
import Graphics.GL.Core43 import Graphics.GL.Core45
import Graphics.Rendering.OpenGL hiding (color, rotate, scale, translate) import Graphics.Rendering.OpenGL hiding (color, rotate, scale, translate)
import MatrixHelper import MatrixHelper
import Render import Render
@@ -84,17 +84,27 @@ doDrawing win pdata u = do
, (_windowShader pdata, nWins) , (_windowShader pdata, nWins)
, (_textureArrayShader pdata, nFls) , (_textureArrayShader pdata, nFls)
] ]
bindBuffer ElementArrayBuffer $= pdata ^? shapeEBO . ebo --Just (_ebo $ _shapeEBO pdata) --bindBuffer ElementArrayBuffer $= pdata ^? shapeEBO . eboName --Just (_ebo $ _shapeEBO pdata)
bufferSubData --bufferSubData
ElementArrayBuffer -- ElementArrayBuffer
WriteToBuffer -- WriteToBuffer
-- 0
-- (fromIntegral $ glushortSize * nIndices)
-- (_eboPtr $ _shapeEBO pdata)
glNamedBufferSubData
(_eboName $ _shapeEBO pdata)
0 0
(fromIntegral $ glushortSize * nIndices) (fromIntegral $ glushortSize * nIndices)
(_eboPtr $ _shapeEBO pdata) (_eboPtr $ _shapeEBO pdata)
bindBuffer ElementArrayBuffer $= pdata ^? silhouetteEBO . ebo --Just (_ebo $ _silhouetteEBO pdata) --bindBuffer ElementArrayBuffer $= pdata ^? silhouetteEBO . eboName --Just (_ebo $ _silhouetteEBO pdata)
bufferSubData --bufferSubData
ElementArrayBuffer -- ElementArrayBuffer
WriteToBuffer -- WriteToBuffer
-- 0
-- (fromIntegral $ glushortSize * nSilIndices)
-- (_eboPtr $ _silhouetteEBO pdata)
glNamedBufferSubData
(_eboName $ _silhouetteEBO pdata)
0 0
(fromIntegral $ glushortSize * nSilIndices) (fromIntegral $ glushortSize * nSilIndices)
(_eboPtr $ _silhouetteEBO pdata) (_eboPtr $ _silhouetteEBO pdata)
+1 -1
View File
@@ -33,7 +33,7 @@ drawCPUShadows pdata s pos rad = do
--currentProgram $= theshad ^? shadProg --currentProgram $= theshad ^? shadProg
glUseProgram (theshad ^. shadProg') glUseProgram (theshad ^. shadProg')
--bindVertexArrayObject $= Just (_vaoName $ _shadVAO' theshad) --bindVertexArrayObject $= Just (_vaoName $ _shadVAO' theshad)
glBindVertexArray $ (_vaoName $ _shadVAO' theshad) glBindVertexArray . _vaoName $ _shadVAO' theshad
glDrawArrays glDrawArrays
(marshalEPrimitiveMode $ _shadPrim' theshad) (marshalEPrimitiveMode $ _shadPrim' theshad)
0 0
+33 -18
View File
@@ -73,15 +73,21 @@ preloadRender = do
setupVertexAttribPointer 1 4 8 4 setupVertexAttribPointer 1 4 8 4
let winColVAO = VAO{_vaoName = winColVAOname, _vaoVBO = winVBO} let winColVAO = VAO{_vaoName = winColVAOname, _vaoVBO = winVBO}
-- setup shape geometry/cap VBO and two VAOs -- setup shape geometry/cap VBO and two VAOs
shEBOname <- genObjectName --shEBOname <- genObjectName
shEBOptr <- mallocArray numDrawableElements shEBOptr <- mallocArray numDrawableElements
bindBuffer ElementArrayBuffer $= Just shEBOname shEBOname <- mglCreateSingle glCreateBuffers
bufferData ElementArrayBuffer --bindBuffer ElementArrayBuffer $= Just shEBOname
$= ( fromIntegral $ glushortSize * numDrawableElements --bufferData ElementArrayBuffer
, nullPtr -- $= ( fromIntegral $ glushortSize * numDrawableElements
, StreamDraw -- , nullPtr
) -- , StreamDraw
let shEBO = EBO{_ebo = shEBOname, _eboPtr = shEBOptr} -- )
glNamedBufferData
shEBOname
( fromIntegral $ glushortSize * numDrawableElements)
nullPtr
GL_STREAM_DRAW
let shEBO = EBO{_eboName = shEBOname, _eboPtr = shEBOptr}
shVBOname <- genObjectName shVBOname <- genObjectName
shVBOptr <- mallocArray (7 * numDrawableElements) shVBOptr <- mallocArray (7 * numDrawableElements)
bindBuffer ArrayBuffer $= Just shVBOname bindBuffer ArrayBuffer $= Just shVBOname
@@ -98,14 +104,16 @@ preloadRender = do
bindBuffer ArrayBuffer $= Just shVBOname bindBuffer ArrayBuffer $= Just shVBOname
setupVertexAttribPointer 0 3 7 0 setupVertexAttribPointer 0 3 7 0
setupVertexAttribPointer 1 4 7 3 setupVertexAttribPointer 1 4 7 3
bindBuffer ElementArrayBuffer $= Just shEBOname --bindBuffer ElementArrayBuffer $= Just shEBOname
glBindBuffer GL_ELEMENT_ARRAY_BUFFER shEBOname
--shPosVAOname <- genObjectName --shPosVAOname <- genObjectName
--bindVertexArrayObject $= Just shPosVAOname --bindVertexArrayObject $= Just shPosVAOname
shPosVAOname <- mglCreateSingle glGenVertexArrays shPosVAOname <- mglCreateSingle glGenVertexArrays
glBindVertexArray shPosVAOname glBindVertexArray shPosVAOname
bindBuffer ArrayBuffer $= Just shVBOname bindBuffer ArrayBuffer $= Just shVBOname
setupVertexAttribPointer 0 3 7 0 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} let shPosColVAO = VAO{_vaoName = shPosColVAOname, _vaoVBO = shVBO}
shPosVAO = VAO{_vaoName = shPosVAOname, _vaoVBO = shVBO} shPosVAO = VAO{_vaoName = shPosVAOname, _vaoVBO = shVBO}
--setup silhouette edge VAO --setup silhouette edge VAO
@@ -116,16 +124,23 @@ preloadRender = do
bindBuffer ArrayBuffer $= Just shVBOname bindBuffer ArrayBuffer $= Just shVBOname
setupVertexAttribPointer 0 3 7 0 setupVertexAttribPointer 0 3 7 0
--setup ebo for silhouette edges --setup ebo for silhouette edges
silEBOname <- genObjectName --silEBOname <- genObjectName
silEBOname <- mglCreateSingle glCreateBuffers
silEBOptr <- mallocArray numDrawableElements silEBOptr <- mallocArray numDrawableElements
-- it may be important to bind this while the correct VAO is bound -- it may be important to bind this while the correct VAO is bound
bindBuffer ElementArrayBuffer $= Just silEBOname glBindBuffer GL_ELEMENT_ARRAY_BUFFER silEBOname --bindBuffer ElementArrayBuffer $= Just silEBOname
bufferData ElementArrayBuffer --bindBuffer ElementArrayBuffer $= Just silEBOname
$= ( fromIntegral $ glushortSize * numDrawableElements glNamedBufferData
, nullPtr silEBOname
, StreamDraw ( fromIntegral $ glushortSize * numDrawableElements)
) nullPtr
let silEBO = EBO{_ebo = silEBOname, _eboPtr = silEBOptr} GL_STREAM_DRAW
--bufferData ElementArrayBuffer
-- $= ( fromIntegral $ glushortSize * numDrawableElements
-- , nullPtr
-- , StreamDraw
-- )
let silEBO = EBO{_eboName = silEBOname, _eboPtr = silEBOptr}
shEdgeVAO = VAO{_vaoName = shEdgeVAOname, _vaoVBO = shVBO} shEdgeVAO = VAO{_vaoName = shEdgeVAOname, _vaoVBO = shVBO}
-- lighting shaders -- lighting shaders
lightingWallShadShad <- lightingWallShadShad <-
+2 -2
View File
@@ -16,7 +16,7 @@ module Shader.Data
, vboPtr , vboPtr
, vboAttribSizes , vboAttribSizes
, vboStride , vboStride
, ebo , eboName
, eboPtr , eboPtr
, shadProg' , shadProg'
@@ -59,7 +59,7 @@ data VBO = VBO
, _vboStride :: Int , _vboStride :: Int
} }
data EBO = EBO data EBO = EBO
{ _ebo :: BufferObject { _eboName :: GLuint
, _eboPtr :: Ptr GLushort , _eboPtr :: Ptr GLushort
} }
{- | Datatype containing the reference to a texture object. -} {- | Datatype containing the reference to a texture object. -}