Refactor EBO to use DSA
This commit is contained in:
+19
-9
@@ -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)
|
||||||
|
|||||||
@@ -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
@@ -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
@@ -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. -}
|
||||||
|
|||||||
Reference in New Issue
Block a user