Cleanup
This commit is contained in:
+11
-19
@@ -92,7 +92,7 @@ doDrawing' win pdata u = do
|
||||
nCloudVs'
|
||||
(V.fromList $ w ^. cWorld . lWorld . dusts)
|
||||
-- bind wall points, silhouette data, surface geometry
|
||||
bufferShaderLayers shadV pokeCounts
|
||||
bufferShaderLayers pokeCounts shadV
|
||||
bufferPokedVBO (_vboShapes pdata) nShapeVs
|
||||
bufferPokedVBO (pdata ^. winVBO) nWins
|
||||
bufferPokedVBO (pdata ^. wallVBO) trueNWalls
|
||||
@@ -108,12 +108,7 @@ doDrawing' win pdata u = do
|
||||
glDepthFunc GL_LESS
|
||||
-- clear depth and stencil buffers
|
||||
glStencilMask 255 -- to alter the entire stencil
|
||||
glClearNamedFramebufferfi
|
||||
(pdata ^. fboBase . _1 . unFBO)
|
||||
GL_DEPTH_STENCIL
|
||||
0
|
||||
1
|
||||
0
|
||||
glClearNamedFramebufferfi (pdata ^. fboBase . _1 . unFBO) GL_DEPTH_STENCIL 0 1 0
|
||||
-- draw wall occlusions from the camera's point of view
|
||||
glStencilFunc GL_NOTEQUAL 128 255
|
||||
glStencilOp GL_KEEP GL_KEEP GL_REPLACE
|
||||
@@ -131,8 +126,7 @@ doDrawing' win pdata u = do
|
||||
glClearNamedFramebufferfv (pdata ^. fboBase . _1 . unFBO) GL_COLOR 0
|
||||
withArray [0, 0, 0, 0] $
|
||||
glClearNamedFramebufferfv (pdata ^. fboBase . _1 . unFBO) GL_COLOR 2
|
||||
withArray [GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1, GL_COLOR_ATTACHMENT2] $
|
||||
glNamedFramebufferDrawBuffers (pdata ^. fboBase . _1 . unFBO) 3
|
||||
-- glNamedFramebufferDrawBuffers set in preloadRender
|
||||
--draw walls onto base buffer
|
||||
glEnable GL_CULL_FACE
|
||||
glUseProgram (pdata ^. pullWallShader)
|
||||
@@ -144,19 +138,15 @@ doDrawing' win pdata u = do
|
||||
-- draw chasm shader blocking floor
|
||||
glUseProgram (pdata ^. chasmShader)
|
||||
glDepthMask GL_FALSE
|
||||
glDrawBuffer GL_NONE
|
||||
glStencilOp GL_KEEP GL_KEEP GL_INCR
|
||||
with 0 $ glClearNamedFramebufferiv (pdata ^. fboBase . _1 . unFBO) GL_STENCIL 0
|
||||
-- probably don't want to set the drawbuffer to GL_NONE, but not sure
|
||||
glDrawArrays GL_TRIANGLES 0 (fromIntegral nchs)
|
||||
withArray [GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1, GL_COLOR_ATTACHMENT2] $
|
||||
glNamedFramebufferDrawBuffers (pdata ^. fboBase . _1 . unFBO) 3
|
||||
glDepthMask GL_TRUE
|
||||
glDisable GL_CULL_FACE
|
||||
--draw floor onto base buffer
|
||||
glUseProgram (pdata ^. floorShader)
|
||||
glStencilFunc GL_EQUAL 0 255
|
||||
glDrawArrays GL_TRIANGLES 0 (fromIntegral nFls)
|
||||
--glDisable GL_STENCIL_TEST
|
||||
glEnable GL_BLEND
|
||||
--draw lightmap into its own buffer
|
||||
createLightMap
|
||||
@@ -171,9 +161,11 @@ doDrawing' win pdata u = do
|
||||
(pdata ^. fboBase . _2 . _3)
|
||||
lightPoints
|
||||
pdata
|
||||
-- no longer need base positions/normals
|
||||
withArray [GL_COLOR_ATTACHMENT1,GL_COLOR_ATTACHMENT2] $
|
||||
glInvalidateNamedFramebufferData (pdata ^. fboBase . _1 . unFBO) 2
|
||||
glColorMask GL_TRUE GL_TRUE GL_TRUE GL_TRUE
|
||||
--apply lightmap to base buffer
|
||||
glDisable GL_CULL_FACE
|
||||
glDepthFunc GL_ALWAYS
|
||||
glDepthMask GL_FALSE
|
||||
glBindFramebuffer GL_FRAMEBUFFER (pdata ^. fboBase . _1 . unFBO)
|
||||
@@ -299,8 +291,7 @@ doDrawing' win pdata u = do
|
||||
--draw windows into window textures
|
||||
glBindFramebuffer GL_FRAMEBUFFER (pdata ^. fboWindow . _1 . unFBO)
|
||||
glBindTextureUnit 3 (pdata ^. fboPos . _2 . unTO)
|
||||
withArray [GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1] $
|
||||
glNamedFramebufferDrawBuffers (pdata ^. fboWindow . _1 . unFBO) 2
|
||||
-- glNamedFramebufferDrawBuffers should be set in preloadRender
|
||||
withArray [0, 0, 0, 0] $
|
||||
glClearNamedFramebufferfv (pdata ^. fboWindow . _1 . unFBO) GL_COLOR 0
|
||||
withArray [0, 0, 0, 0] $
|
||||
@@ -315,10 +306,11 @@ doDrawing' win pdata u = do
|
||||
-- with all source alphas 0.25, alpha -> 0.5
|
||||
glBlendFunc GL_ONE_MINUS_DST_ALPHA GL_ONE_MINUS_SRC_ALPHA
|
||||
glUseProgram $ pdata ^. windowPullShader
|
||||
glBindVertexArray $ pdata ^. dummyVAO
|
||||
-- don't need cloud postions/normals any more
|
||||
withArray [GL_COLOR_ATTACHMENT0] $
|
||||
glInvalidateNamedFramebufferData (pdata ^. fboPos . _1 . unFBO) 1
|
||||
glDrawArrays GL_TRIANGLES 0 (fromIntegral nWins * 12)
|
||||
glDisable GL_DEPTH_CLAMP
|
||||
glDisable GL_CULL_FACE
|
||||
glInvalidateBufferData (pdata ^. vboShapes . vboName)
|
||||
--apply lightmap to cloud buffer
|
||||
glBindFramebuffer GL_FRAMEBUFFER (_unFBO (fst (_fboCloud pdata)))
|
||||
|
||||
@@ -163,8 +163,12 @@ preloadRender = do
|
||||
|
||||
-- if adding to this list, recall you need to sizeFBOs
|
||||
fboBaseName <- setupFramebuffer3GivenStencil rboBaseBloomName
|
||||
withArray [GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1, GL_COLOR_ATTACHMENT2] $
|
||||
glNamedFramebufferDrawBuffers (fboBaseName ^. _1 . unFBO) 3
|
||||
fboCloudName <- setupFramebuffer3GivenStencil rboBaseBloomName
|
||||
fbowindow <- setupFramebuffer2GivenStencil rboBaseBloomName
|
||||
withArray [GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1] $
|
||||
glNamedFramebufferDrawBuffers (fbowindow ^. _1 . unFBO) 2
|
||||
fboBloomName <- setupFramebufferGivenStencil rboBaseBloomName
|
||||
fboPosName <- setupFramebufferGivenStencil rboBaseBloomName
|
||||
fboLightingName <- setupFramebufferGivenStencil rboBaseBloomName
|
||||
|
||||
+2
-2
@@ -30,8 +30,8 @@ bufferEBO x i =
|
||||
glNamedBufferSubData (x ^. uiboName) 0 (fromIntegral $ gluintSize * i) (x ^. uiboPtr)
|
||||
|
||||
bufferShaderLayers
|
||||
:: MV.MVector (PrimState IO) (GLuint, VBO) -> UMV.MVector (PrimState IO) Int -> IO ()
|
||||
bufferShaderLayers shads counts = MV.imapM_ f shads
|
||||
:: UMV.MVector (PrimState IO) Int -> MV.MVector (PrimState IO) (GLuint, VBO) -> IO ()
|
||||
bufferShaderLayers counts = MV.imapM_ f
|
||||
where
|
||||
f i shad = do
|
||||
let theVBO = snd shad
|
||||
|
||||
+1
-53
@@ -32,10 +32,7 @@ makeShaderVBO ::
|
||||
makeShaderVBO s shaderlist sizes = do
|
||||
prog <- makeSourcedShader s shaderlist
|
||||
vbo <- setupVBO (vasTightStride sizes)
|
||||
return
|
||||
( prog
|
||||
, vbo
|
||||
)
|
||||
return (prog , vbo)
|
||||
|
||||
setupVBO :: Int -> IO VBO
|
||||
setupVBO vertexsize = do
|
||||
@@ -66,28 +63,6 @@ shaderTypeExt GL_FRAGMENT_SHADER = ".frag"
|
||||
shaderTypeExt GL_COMPUTE_SHADER = ".comp"
|
||||
shaderTypeExt _ = undefined
|
||||
|
||||
setupVAOUsingVBO :: [VertexAttribute] -> VBO -> IO VAO
|
||||
setupVAOUsingVBO vas vbo = do
|
||||
let strd = vbo ^. vboVertexBytes
|
||||
vaoname <- mglCreate glCreateVertexArrays
|
||||
glBindVertexArray vaoname
|
||||
setupVertexAttribs
|
||||
(vbo ^. vboName)
|
||||
vaoname
|
||||
vas
|
||||
(fromIntegral strd)
|
||||
return $ VAO vaoname
|
||||
|
||||
setupVBOVAO :: [VertexAttribute] -> IO (VAO, VBO)
|
||||
setupVBOVAO vas = do
|
||||
vaoname <- mglCreate glCreateVertexArrays
|
||||
glBindVertexArray vaoname
|
||||
vbo <- setupVBO strd
|
||||
vao <- setupVAOUsingVBO vas vbo
|
||||
return (vao, vbo)
|
||||
where
|
||||
strd = vasTightStride vas
|
||||
|
||||
toFloatVAs :: [Int] -> [VertexAttribute]
|
||||
toFloatVAs = go 0
|
||||
where
|
||||
@@ -96,31 +71,6 @@ toFloatVAs = go 0
|
||||
VertexAttribute (fromIntegral i) GL_FLOAT GL_FALSE x :
|
||||
go (x + fromIntegral floatSize * fromIntegral i) is
|
||||
|
||||
setupVertexAttribs :: GLuint -> GLuint -> [VertexAttribute] -> GLsizei -> IO ()
|
||||
setupVertexAttribs vbo vao vas strd = do
|
||||
glVertexArrayVertexBuffer vao 0 vbo 0 strd
|
||||
zipWithM_ (setupVertexAttribPointer vao) [0 ..] vas
|
||||
|
||||
-- | Assumes the correct VBO is bound
|
||||
setupVertexAttribPointer ::
|
||||
GLuint ->
|
||||
-- | Location (in shader)
|
||||
Int ->
|
||||
VertexAttribute ->
|
||||
IO ()
|
||||
setupVertexAttribPointer vao loc va = do
|
||||
glEnableVertexArrayAttrib vao loc'
|
||||
glVertexArrayAttribFormat
|
||||
vao
|
||||
loc'
|
||||
(va ^. vaCount)
|
||||
(va ^. vaType)
|
||||
(va ^. vaNormalize)
|
||||
(va ^. vaOffset)
|
||||
glVertexArrayAttribBinding vao loc' 0
|
||||
where
|
||||
loc' = fromIntegral loc
|
||||
|
||||
makeShaderProgram :: String -> [(GLenum, BS.ByteString)] -> IO GLuint
|
||||
makeShaderProgram str srcs = do
|
||||
theprog <- glCreateProgram
|
||||
@@ -208,5 +158,3 @@ withByteString :: Num t => BS.ByteString -> (Ptr b -> t -> IO a) -> IO a
|
||||
withByteString bs act =
|
||||
BU.unsafeUseAsCStringLen bs $ \(ptr, size) ->
|
||||
act (castPtr ptr) (fromIntegral size)
|
||||
|
||||
--boVertex
|
||||
|
||||
Reference in New Issue
Block a user