Cleanup some silhouette edge buffers
This commit is contained in:
@@ -27,8 +27,8 @@ data RenderData = RenderData
|
|||||||
, _barrelShader :: (Shader,VBO)
|
, _barrelShader :: (Shader,VBO)
|
||||||
, _grayscaleShader :: Shader
|
, _grayscaleShader :: Shader
|
||||||
, _shapeShader :: Shader
|
, _shapeShader :: Shader
|
||||||
, _shapeEBO :: EBO
|
, _shapeEBO :: UintBO
|
||||||
, _silhouetteEBO :: EBO
|
, _silhouetteEBO :: UintBO
|
||||||
, _pictureShaders :: MV.MVector (PrimState IO) (Shader,VBO)
|
, _pictureShaders :: MV.MVector (PrimState IO) (Shader,VBO)
|
||||||
, _fbo2 :: (FBO, TO)
|
, _fbo2 :: (FBO, TO)
|
||||||
, _fbo3 :: (FBO, TO)
|
, _fbo3 :: (FBO, TO)
|
||||||
@@ -46,7 +46,7 @@ data RenderData = RenderData
|
|||||||
, _wallSSBO :: GLuint
|
, _wallSSBO :: GLuint
|
||||||
, _shapeSSBO :: GLuint
|
, _shapeSSBO :: GLuint
|
||||||
, _ishapeSSBO :: GLuint
|
, _ishapeSSBO :: GLuint
|
||||||
, _ieshapeSSBO :: GLuint
|
-- , _ieshapeSSBO :: GLuint
|
||||||
-- , _lightsUBO :: GLuint -- BufferObject id
|
-- , _lightsUBO :: GLuint -- BufferObject id
|
||||||
, _vboWindows :: VBO
|
, _vboWindows :: VBO
|
||||||
, _vboShapes :: VBO
|
, _vboShapes :: VBO
|
||||||
@@ -58,7 +58,7 @@ data RenderData = RenderData
|
|||||||
-- , _wallShader :: Shader
|
-- , _wallShader :: Shader
|
||||||
, _cloudVBO :: VBO
|
, _cloudVBO :: VBO
|
||||||
, _cloudShader :: Shader
|
, _cloudShader :: Shader
|
||||||
, _cloudEBO :: EBO
|
, _cloudEBO :: UintBO
|
||||||
, _screenTextureVAO :: VAO
|
, _screenTextureVAO :: VAO
|
||||||
, _dummyVAO :: VAO
|
, _dummyVAO :: VAO
|
||||||
}
|
}
|
||||||
|
|||||||
+10
-28
@@ -77,36 +77,33 @@ doDrawing' win pdata u = do
|
|||||||
( pokeShape
|
( pokeShape
|
||||||
(drawShadowsByImportance $ cfig ^. gr_shadow_size)
|
(drawShadowsByImportance $ cfig ^. gr_shadow_size)
|
||||||
(_vboPtr $ _vboShapes pdata)
|
(_vboPtr $ _vboShapes pdata)
|
||||||
(_eboPtr $ _shapeEBO pdata)
|
(_uiboPtr $ _shapeEBO pdata)
|
||||||
(_eboPtr $ _silhouetteEBO pdata)
|
(_uiboPtr $ _silhouetteEBO pdata)
|
||||||
(0, 0, 0)
|
(0, 0, 0)
|
||||||
ws
|
ws
|
||||||
)
|
)
|
||||||
(nCloudVs', nCloudIs') <-
|
(nCloudVs', nCloudIs') <-
|
||||||
-- Might want to sort the clouds based on z depth, not sure
|
-- Might want to sort the clouds based on z depth, not sure
|
||||||
V.foldM'
|
V.foldM'
|
||||||
(pokeCloud (pdata ^. cloudVBO . vboPtr) (pdata ^. cloudEBO . eboPtr))
|
(pokeCloud (pdata ^. cloudVBO . vboPtr) (pdata ^. cloudEBO . uiboPtr))
|
||||||
(0, 0)
|
(0, 0)
|
||||||
(V.fromList $ w ^. cWorld . lWorld . clouds)
|
(V.fromList $ w ^. cWorld . lWorld . clouds)
|
||||||
(nCloudVs, nCloudIs) <-
|
(nCloudVs, nCloudIs) <-
|
||||||
V.foldM'
|
V.foldM'
|
||||||
(pokeDust (pdata ^. cloudVBO . vboPtr) (pdata ^. cloudEBO . eboPtr))
|
(pokeDust (pdata ^. cloudVBO . vboPtr) (pdata ^. cloudEBO . uiboPtr))
|
||||||
(nCloudVs', nCloudIs')
|
(nCloudVs', nCloudIs')
|
||||||
(V.fromList $ w ^. cWorld . lWorld . dusts)
|
(V.fromList $ w ^. cWorld . lWorld . dusts)
|
||||||
-- bind wall points, silhouette data, surface geometry
|
-- bind wall points, silhouette data, surface geometry
|
||||||
bufferShaderLayers shadV pokeCounts
|
bufferShaderLayers shadV pokeCounts
|
||||||
mapM_
|
mapM_
|
||||||
(uncurry bufferPokedVBO)
|
(uncurry bufferPokedVBO)
|
||||||
[ --(pdata ^. vboWindows, nWins)
|
[ (_vboShapes pdata, nShapeVs)
|
||||||
(pdata ^. wallVBO, trueNWalls)
|
|
||||||
, (_vboShapes pdata, nShapeVs)
|
|
||||||
, (pdata ^. cloudVBO, nCloudVs)
|
, (pdata ^. cloudVBO, nCloudVs)
|
||||||
]
|
]
|
||||||
mapM_
|
mapM_
|
||||||
(uncurry bufferEBO)
|
(uncurry bufferEBO)
|
||||||
[ (_cloudEBO pdata, nCloudIs)
|
[ (_cloudEBO pdata, nCloudIs)
|
||||||
, (_shapeEBO pdata, nIndices)
|
, (_shapeEBO pdata, nIndices)
|
||||||
, (_silhouetteEBO pdata, nSilIndices)
|
|
||||||
]
|
]
|
||||||
-- set the coordinate uniform ready for drawing elements using world coordinates
|
-- set the coordinate uniform ready for drawing elements using world coordinates
|
||||||
bufferPerspectiveMatrixUBO cfig (w ^. wCam) (pdata ^. matUBO)
|
bufferPerspectiveMatrixUBO cfig (w ^. wCam) (pdata ^. matUBO)
|
||||||
@@ -116,31 +113,16 @@ doDrawing' win pdata u = do
|
|||||||
glNamedBufferSubData (pdata ^. wallSSBO) 0
|
glNamedBufferSubData (pdata ^. wallSSBO) 0
|
||||||
(fromIntegral $ trueNWalls * sizeOf (0::Float) * 8)
|
(fromIntegral $ trueNWalls * sizeOf (0::Float) * 8)
|
||||||
(pdata ^. wallVBO . vboPtr)
|
(pdata ^. wallVBO . vboPtr)
|
||||||
-- withArray
|
|
||||||
-- [V4 0 0 0 (1:: Float)
|
|
||||||
-- ,V4 0 0 0 0
|
|
||||||
-- ,V4 0 0 0 0
|
|
||||||
-- ,V4 1 1 0 1
|
|
||||||
-- ,V4 0 0 0 0
|
|
||||||
-- ,V4 0 0 0 0
|
|
||||||
-- ,V4 0 1 0 1
|
|
||||||
-- ,V4 0 0 0 0
|
|
||||||
-- ,V4 0 0 0 0
|
|
||||||
-- ]
|
|
||||||
-- $ glNamedBufferSubData (pdata ^. shapeSSBO) 0
|
|
||||||
-- (fromIntegral $ 9 * (sizeOf (0::Float)*12))
|
|
||||||
-- withArray [0::GLuint,1,2] $
|
|
||||||
-- glNamedBufferSubData (pdata ^. ishapeSSBO) 0
|
|
||||||
-- (fromIntegral $ 3 * (sizeOf (0::GLuint)))
|
|
||||||
glNamedBufferSubData (pdata ^. shapeSSBO) 0
|
glNamedBufferSubData (pdata ^. shapeSSBO) 0
|
||||||
(fromIntegral $ nShapeVs * (sizeOf (0::Float)*12))
|
(fromIntegral $ nShapeVs * (sizeOf (0::Float)*12))
|
||||||
(pdata ^. vboShapes . vboPtr)
|
(pdata ^. vboShapes . vboPtr)
|
||||||
glNamedBufferSubData (pdata ^. ishapeSSBO) 0
|
glNamedBufferSubData (pdata ^. ishapeSSBO) 0
|
||||||
(fromIntegral $ nIndices * (sizeOf (0::GLuint)))
|
(fromIntegral $ nIndices * (sizeOf (0::GLuint)))
|
||||||
(pdata ^. shapeEBO . eboPtr)
|
(pdata ^. shapeEBO . uiboPtr)
|
||||||
glNamedBufferSubData (pdata ^. ieshapeSSBO) 0
|
bufferEBO (pdata ^. silhouetteEBO) nSilIndices
|
||||||
(fromIntegral $ nSilIndices * (sizeOf (0::GLuint)))
|
-- glNamedBufferSubData (pdata ^. ieshapeSSBO) 0
|
||||||
(pdata ^. silhouetteEBO . eboPtr)
|
-- (fromIntegral $ nSilIndices * (sizeOf (0::GLuint)))
|
||||||
|
-- (pdata ^. silhouetteEBO . uiboPtr)
|
||||||
setViewport _gr_world_res cfig
|
setViewport _gr_world_res cfig
|
||||||
glBindFramebuffer GL_FRAMEBUFFER (pdata ^. fboBase . _1 . unFBO)
|
glBindFramebuffer GL_FRAMEBUFFER (pdata ^. fboBase . _1 . unFBO)
|
||||||
glDepthMask GL_TRUE
|
glDepthMask GL_TRUE
|
||||||
|
|||||||
@@ -62,6 +62,7 @@ preloadRender = do
|
|||||||
let ieshapessbosize = fromIntegral (sizeOf (0::GLuint) * 65536)
|
let ieshapessbosize = fromIntegral (sizeOf (0::GLuint) * 65536)
|
||||||
glNamedBufferStorage ieshapessbo ieshapessbosize nullPtr GL_DYNAMIC_STORAGE_BIT
|
glNamedBufferStorage ieshapessbo ieshapessbosize nullPtr GL_DYNAMIC_STORAGE_BIT
|
||||||
glBindBufferBase GL_SHADER_STORAGE_BUFFER 5 ieshapessbo
|
glBindBufferBase GL_SHADER_STORAGE_BUFFER 5 ieshapessbo
|
||||||
|
ieptr <- mallocArray 65536 -- so we can go back to glushort...
|
||||||
|
|
||||||
dummyvao <- mglCreate glGenVertexArrays
|
dummyvao <- mglCreate glGenVertexArrays
|
||||||
|
|
||||||
@@ -83,12 +84,12 @@ preloadRender = do
|
|||||||
shapeVerxAttributes
|
shapeVerxAttributes
|
||||||
pmTriangles
|
pmTriangles
|
||||||
shVBO
|
shVBO
|
||||||
glVertexArrayElementBuffer (shapeshader ^. shaderVAO . vaoName) (shEBO ^. eboName)
|
glVertexArrayElementBuffer (shapeshader ^. shaderVAO . vaoName) (shEBO ^. uiboName)
|
||||||
|
|
||||||
--setup silhouette edge VAO
|
--setup silhouette edge VAO
|
||||||
putStrLn "Setup silhouette VAO, EBO"
|
-- putStrLn "Setup silhouette VAO, EBO"
|
||||||
shedgevao <- setupVAOUsingVBO [VertexAttribute 4 GL_FLOAT GL_FALSE 0] shVBO
|
-- shedgevao <- setupVAOUsingVBO [VertexAttribute 4 GL_FLOAT GL_FALSE 0] shVBO
|
||||||
shedgeebo <- setupEBO shedgevao
|
-- shedgeebo <- setupEBO shedgevao
|
||||||
|
|
||||||
putStrLn "Setup wall/windows VBO, VAO, EBO, shader"
|
putStrLn "Setup wall/windows VBO, VAO, EBO, shader"
|
||||||
let wallverxstrd = 8
|
let wallverxstrd = 8
|
||||||
@@ -104,7 +105,7 @@ preloadRender = do
|
|||||||
makeShaderUsingVAO "lighting/cap" [vert] pmTriangles (VAO dummyvao)
|
makeShaderUsingVAO "lighting/cap" [vert] pmTriangles (VAO dummyvao)
|
||||||
lightingLineShadowShad <-
|
lightingLineShadowShad <-
|
||||||
--makeShaderUsingVAO "lighting/lineShadow" [vert, geom] pmLinesAdjacency shedgevao
|
--makeShaderUsingVAO "lighting/lineShadow" [vert, geom] pmLinesAdjacency shedgevao
|
||||||
makeShaderUsingVAO "lighting/lineShadow" [vert] pmTriangles shedgevao
|
makeShaderUsingVAO "lighting/lineShadow" [vert] pmTriangles (VAO dummyvao)
|
||||||
|
|
||||||
ceilingstencilshader <- makeShaderUsingVAO "ceiling/stencil" [vert] pmTriangles
|
ceilingstencilshader <- makeShaderUsingVAO "ceiling/stencil" [vert] pmTriangles
|
||||||
(VAO dummyvao)
|
(VAO dummyvao)
|
||||||
@@ -200,7 +201,7 @@ preloadRender = do
|
|||||||
{ _pictureShaders = shadV
|
{ _pictureShaders = shadV
|
||||||
, _shapeShader = shapeshader -- & shaderVAO' .~ shPosColVAO
|
, _shapeShader = shapeshader -- & shaderVAO' .~ shPosColVAO
|
||||||
, _shapeEBO = shEBO
|
, _shapeEBO = shEBO
|
||||||
, _silhouetteEBO = shedgeebo
|
, _silhouetteEBO = UintBO ieshapessbo ieptr
|
||||||
, _lightingCapShader = lightingCapShad
|
, _lightingCapShader = lightingCapShad
|
||||||
, _lightingLineShadowShader = lightingLineShadowShad
|
, _lightingLineShadowShader = lightingLineShadowShad
|
||||||
, _lightingWallShadShader = lightingWallShadShad
|
, _lightingWallShadShader = lightingWallShadShad
|
||||||
@@ -232,7 +233,7 @@ preloadRender = do
|
|||||||
, _wallSSBO = wallssbo
|
, _wallSSBO = wallssbo
|
||||||
, _shapeSSBO = shapessbo
|
, _shapeSSBO = shapessbo
|
||||||
, _ishapeSSBO = ishapessbo
|
, _ishapeSSBO = ishapessbo
|
||||||
, _ieshapeSSBO = ieshapessbo
|
-- , _ieshapeSSBO = ieshapessbo
|
||||||
-- , _lightsUBO = lightsubo
|
-- , _lightsUBO = lightsubo
|
||||||
, _vboWindows = winvbo
|
, _vboWindows = winvbo
|
||||||
, _vboShapes = shVBO
|
, _vboShapes = shVBO
|
||||||
|
|||||||
+3
-3
@@ -25,13 +25,13 @@ bufferPokedVBO theVBO numVs =
|
|||||||
(fromIntegral $ numVs * _vboVertexBytes theVBO)
|
(fromIntegral $ numVs * _vboVertexBytes theVBO)
|
||||||
(_vboPtr theVBO)
|
(_vboPtr theVBO)
|
||||||
|
|
||||||
bufferEBO :: EBO -> Int -> IO ()
|
bufferEBO :: UintBO -> Int -> IO ()
|
||||||
bufferEBO ebo numis =
|
bufferEBO ebo numis =
|
||||||
glNamedBufferSubData
|
glNamedBufferSubData
|
||||||
(ebo ^. eboName)
|
(ebo ^. uiboName)
|
||||||
0
|
0
|
||||||
(fromIntegral $ gluintSize * numis)
|
(fromIntegral $ gluintSize * numis)
|
||||||
(ebo ^. eboPtr)
|
(ebo ^. uiboPtr)
|
||||||
|
|
||||||
bufferShaderLayers :: MV.MVector (PrimState IO) (Shader, VBO) -> UMV.MVector (PrimState IO) Int -> IO ()
|
bufferShaderLayers :: MV.MVector (PrimState IO) (Shader, VBO) -> UMV.MVector (PrimState IO) Int -> IO ()
|
||||||
bufferShaderLayers shads counts = MV.imapM_ f shads
|
bufferShaderLayers shads counts = MV.imapM_ f shads
|
||||||
|
|||||||
@@ -59,11 +59,11 @@ makeShaderEBO ::
|
|||||||
[VertexAttribute] ->
|
[VertexAttribute] ->
|
||||||
PrimitiveMode ->
|
PrimitiveMode ->
|
||||||
VBO ->
|
VBO ->
|
||||||
IO (Shader, EBO)
|
IO (Shader, UintBO)
|
||||||
makeShaderEBO s shaderlist sizes pm vbo = do
|
makeShaderEBO s shaderlist sizes pm vbo = do
|
||||||
shad <- makeShaderUsingVBO s shaderlist sizes pm vbo
|
shad <- makeShaderUsingVBO s shaderlist sizes pm vbo
|
||||||
ebo <- setupEBO (shad ^. shaderVAO)
|
ebo <- setupEBO (shad ^. shaderVAO)
|
||||||
glVertexArrayElementBuffer (shad ^. shaderVAO . vaoName) (ebo ^. eboName)
|
glVertexArrayElementBuffer (shad ^. shaderVAO . vaoName) (ebo ^. uiboName)
|
||||||
return (shad, ebo)
|
return (shad, ebo)
|
||||||
|
|
||||||
makeShaderUsingVBO ::
|
makeShaderUsingVBO ::
|
||||||
@@ -189,19 +189,17 @@ setupVAOUsingVBO vas vbo = do
|
|||||||
(fromIntegral strd)
|
(fromIntegral strd)
|
||||||
return VAO{_vaoName = vaoname}
|
return VAO{_vaoName = vaoname}
|
||||||
|
|
||||||
setupEBO :: VAO -> IO EBO
|
setupEBO :: VAO -> IO UintBO
|
||||||
setupEBO vao = do
|
setupEBO vao = do
|
||||||
eboptr <- mallocArray 65536 -- so we can go back to glushort...
|
eboptr <- mallocArray 65536 -- so we can go back to glushort...
|
||||||
eboname <- mglCreate glCreateBuffers
|
eboname <- mglCreate glCreateBuffers
|
||||||
--glNamedBufferData
|
|
||||||
glNamedBufferStorage
|
glNamedBufferStorage
|
||||||
eboname
|
eboname
|
||||||
(fromIntegral $ gluintSize * 65536)
|
(fromIntegral $ gluintSize * 65536)
|
||||||
nullPtr
|
nullPtr
|
||||||
GL_DYNAMIC_STORAGE_BIT
|
GL_DYNAMIC_STORAGE_BIT
|
||||||
--GL_STREAM_DRAW
|
|
||||||
glVertexArrayElementBuffer (vao ^. vaoName) eboname
|
glVertexArrayElementBuffer (vao ^. vaoName) eboname
|
||||||
return $ EBO eboname eboptr
|
return $ UintBO eboname eboptr
|
||||||
|
|
||||||
setupVBOVAO :: [VertexAttribute] -> IO (VAO, VBO)
|
setupVBOVAO :: [VertexAttribute] -> IO (VAO, VBO)
|
||||||
setupVBOVAO vas = do
|
setupVBOVAO vas = do
|
||||||
|
|||||||
+10
-4
@@ -91,9 +91,14 @@ data FloatBO = FloatBO
|
|||||||
, _boType :: BOType
|
, _boType :: BOType
|
||||||
}
|
}
|
||||||
|
|
||||||
data EBO = EBO
|
data UintBO = UintBO
|
||||||
{ _eboName :: GLuint
|
{ _uiboName :: GLuint
|
||||||
, _eboPtr :: Ptr GLuint
|
, _uiboPtr :: Ptr GLuint
|
||||||
|
}
|
||||||
|
|
||||||
|
data SSBO a = SSBO
|
||||||
|
{ _ssboName :: GLuint
|
||||||
|
, _ssboPtr :: Ptr a
|
||||||
}
|
}
|
||||||
|
|
||||||
-- | Datatype containing the reference to a texture object.
|
-- | Datatype containing the reference to a texture object.
|
||||||
@@ -124,7 +129,8 @@ pmPatches = PrimitiveMode GL_PATCHES
|
|||||||
|
|
||||||
makeLenses ''VAO
|
makeLenses ''VAO
|
||||||
makeLenses ''VBO
|
makeLenses ''VBO
|
||||||
makeLenses ''EBO
|
makeLenses ''UintBO
|
||||||
|
makeLenses ''SSBO
|
||||||
makeLenses ''ShaderTexture
|
makeLenses ''ShaderTexture
|
||||||
makeLenses ''Shader
|
makeLenses ''Shader
|
||||||
makeLenses ''FBO
|
makeLenses ''FBO
|
||||||
|
|||||||
Reference in New Issue
Block a user