Continue render refactor
This commit is contained in:
+20
-18
@@ -70,15 +70,17 @@ doDrawing' win pdata u = do
|
||||
wp
|
||||
)
|
||||
( pokeWallsWindowsFloor
|
||||
(shadVBOptr $ _wallTextureShader pdata)
|
||||
(shadVBOptr $ _windowShader pdata)
|
||||
--(shadVBOptr $ _wallTextureShader pdata)
|
||||
--(shadVBOptr $ _windowShader pdata)
|
||||
( pdata ^. vboWalls . vboPtr)
|
||||
( pdata ^. vboWindows . vboPtr)
|
||||
(shadVBOptr $ _textureArrayShader pdata)
|
||||
wallPointsCol
|
||||
windowPoints
|
||||
(w ^. cWorld . floorTiles)
|
||||
)
|
||||
( pokeShape
|
||||
(_vboPtr $ _vaoVBO $ _shadVAO' $ _shapeShader pdata)
|
||||
(_vboPtr $ _vboShapes pdata)
|
||||
(_eboPtr $ _shapeEBO pdata)
|
||||
(_eboPtr $ _silhouetteEBO pdata)
|
||||
(0, 0, 0)
|
||||
@@ -88,10 +90,10 @@ doDrawing' win pdata u = do
|
||||
bindShaderLayers shadV layerCounts
|
||||
uncurry bindShaderBuffers $
|
||||
unzip
|
||||
[ (_wallTextureShader pdata, nWalls)
|
||||
, (_shapeShader pdata, nShapeVs)
|
||||
, (_windowShader pdata, nWins)
|
||||
, (_textureArrayShader pdata, nFls)
|
||||
[ ((pdata ^. vboWalls), nWalls)
|
||||
, (_vboShapes pdata, nShapeVs)
|
||||
, (pdata ^. vboWindows, nWins)
|
||||
, (snd $ _textureArrayShader pdata, nFls)
|
||||
]
|
||||
glNamedBufferSubData
|
||||
(_eboName $ _shapeEBO pdata)
|
||||
@@ -134,15 +136,15 @@ doDrawing' win pdata u = do
|
||||
renderLayer BottomLayer shadV layerCounts
|
||||
--draw object shapes onto base buffer
|
||||
let fs = _shapeShader pdata
|
||||
glUseProgram (_shadName fs)
|
||||
glBindVertexArray $ fs ^. shadVAO' . vaoName
|
||||
glUseProgram (_shadName $ fst fs)
|
||||
glBindVertexArray $ fs ^. _1 . shadVAO' . vaoName
|
||||
glDrawElements
|
||||
(marshalEPrimitiveMode $ _shadPrim' fs)
|
||||
(marshalEPrimitiveMode $ _shadPrim' $ fst fs)
|
||||
(fromIntegral nIndices)
|
||||
GL_UNSIGNED_SHORT
|
||||
nullPtr
|
||||
--draw floor onto base buffer
|
||||
drawShader (_textureArrayShader pdata) nFls
|
||||
drawShader (fst $ _textureArrayShader pdata) nFls
|
||||
--draw lightmap into its own buffer
|
||||
createLightMap
|
||||
cfig
|
||||
@@ -161,7 +163,7 @@ doDrawing' win pdata u = do
|
||||
glBindTexture GL_TEXTURE_2D (pdata ^. fboLighting . _2 . unTO)
|
||||
glEnable GL_BLEND
|
||||
glBlendFunc GL_ZERO GL_ONE_MINUS_SRC_COLOR
|
||||
drawShader (_fullscreenShader pdata) 4
|
||||
drawShader (fst $ _fullscreenShader pdata) 4
|
||||
with GL_COLOR_ATTACHMENT0 $ \ptr ->
|
||||
glInvalidateNamedFramebufferData
|
||||
(pdata ^. fboLighting . _1 . unFBO)
|
||||
@@ -231,7 +233,7 @@ doDrawing' win pdata u = do
|
||||
glBindTexture GL_TEXTURE_2D (_unTO . snd $ _fboLighting pdata)
|
||||
glEnable GL_BLEND
|
||||
glBlendFuncSeparate GL_ZERO GL_ONE_MINUS_SRC_COLOR GL_ZERO GL_ONE
|
||||
drawShader (_fullscreenShader pdata) 4
|
||||
drawShader (fst $ _fullscreenShader pdata) 4
|
||||
glBlendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
|
||||
-- bind base buffer for drawing bloom then clouds
|
||||
glBindFramebuffer GL_FRAMEBUFFER (_unFBO (fst (_fboBase pdata)))
|
||||
@@ -239,11 +241,11 @@ doDrawing' win pdata u = do
|
||||
glEnable GL_BLEND
|
||||
glBlendFunc GL_SRC_ALPHA GL_ONE
|
||||
glBindTexture GL_TEXTURE_2D (_unTO . snd $ _fboHalf1 pdata)
|
||||
drawShader (_fullscreenShader pdata) 4
|
||||
drawShader (fst $ _fullscreenShader pdata) 4
|
||||
glBlendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
|
||||
--draw shadowed clouds onto base buffer
|
||||
glBindTexture GL_TEXTURE_2D (_unTO . fst . snd $ _fboCloud pdata)
|
||||
drawShader (_fullscreenShader pdata) 4
|
||||
drawShader (fst $ _fullscreenShader pdata) 4
|
||||
--set viewport for radial distortion
|
||||
setViewportSize (round winx) (round winy)
|
||||
glDepthFunc GL_ALWAYS
|
||||
@@ -253,13 +255,13 @@ doDrawing' win pdata u = do
|
||||
[] -> do
|
||||
bindTO $ fst $ snd $ _fboBase pdata
|
||||
glBindFramebuffer GL_FRAMEBUFFER 0
|
||||
drawShader (_fullscreenShader pdata) 4
|
||||
drawShader (fst $ _fullscreenShader pdata) 4
|
||||
rds -> do
|
||||
let bindDrawDist :: Distortion -> IO ()
|
||||
bindDrawDist (RadialDistortion (V2 a b) (V2 c d) (V2 e f) g) = do
|
||||
pokeArray (shadVBOptr $ _barrelShader pdata) [a, b, c, d, e, f, g]
|
||||
bindShaderBuffers [_barrelShader pdata] [1]
|
||||
drawShader (_barrelShader pdata) 1
|
||||
bindShaderBuffers [snd $ _barrelShader pdata] [1]
|
||||
drawShader (fst $ _barrelShader pdata) 1
|
||||
fboList =
|
||||
take (length rds - 1) (concat (repeat [fst $ _fbo2 pdata, fst $ _fbo3 pdata]))
|
||||
++ [FBO 0]
|
||||
|
||||
+17
-16
@@ -17,22 +17,23 @@ import Shader.Parameters
|
||||
import Shape.Data
|
||||
|
||||
drawCPUShadows :: RenderData -> Shape -> Point3 -> Float -> IO ()
|
||||
drawCPUShadows pdata s pos rad = do
|
||||
let theshad = pdata ^. positionalBlankShader
|
||||
theptr = _vboPtr $ _vaoVBO $ _shadVAO' theshad
|
||||
i <- VFSM.foldlM' (pokeShapeShad pos rad theptr) 0 $ VFSM.fromList s
|
||||
glBufferSubData
|
||||
(theshad ^. shadVAO' . vaoVBO . vboName)
|
||||
0
|
||||
(fromIntegral $ floatSize * i)
|
||||
(theshad ^. shadVAO' . vaoVBO . vboPtr)
|
||||
glUseProgram (theshad ^. shadName)
|
||||
glBindVertexArray . _vaoName $ _shadVAO' theshad
|
||||
glDrawArrays
|
||||
(marshalEPrimitiveMode $ _shadPrim' theshad)
|
||||
0
|
||||
(fromIntegral i)
|
||||
return ()
|
||||
drawCPUShadows _ _ _ _ = return ()
|
||||
--drawCPUShadows pdata s pos rad = do
|
||||
-- let theshad = pdata ^. positionalBlankShader
|
||||
-- theptr = _vboPtr $ _vaoVBO $ _shadVAO' theshad
|
||||
-- i <- VFSM.foldlM' (pokeShapeShad pos rad theptr) 0 $ VFSM.fromList s
|
||||
-- glBufferSubData
|
||||
-- (theshad ^. shadVAO' . vaoVBO . vboName)
|
||||
-- 0
|
||||
-- (fromIntegral $ floatSize * i)
|
||||
-- (theshad ^. shadVAO' . vaoVBO . vboPtr)
|
||||
-- glUseProgram (theshad ^. shadName)
|
||||
-- glBindVertexArray . _vaoName $ _shadVAO' theshad
|
||||
-- glDrawArrays
|
||||
-- (marshalEPrimitiveMode $ _shadPrim' theshad)
|
||||
-- 0
|
||||
-- (fromIntegral i)
|
||||
-- return ()
|
||||
|
||||
pokeShapeShad :: Point3 -> Float -> Ptr Float -> Int -> ShapeObj -> IO Int
|
||||
pokeShapeShad pos r theptr i so = do
|
||||
|
||||
Reference in New Issue
Block a user