Draw chasms using vertex pulling
This commit is contained in:
@@ -0,0 +1,6 @@
|
|||||||
|
#version 450 core
|
||||||
|
layout (std140, binding = 0) uniform TheMat { mat4 theMat; } ;
|
||||||
|
layout (std430, binding = 7) readonly buffer Pos { vec2 pos[]; };
|
||||||
|
void main() {
|
||||||
|
gl_Position = theMat * vec4(pos[gl_VertexID],0,1);
|
||||||
|
}
|
||||||
@@ -44,7 +44,7 @@ data RenderData = RenderData
|
|||||||
, _floorVBO :: VBO
|
, _floorVBO :: VBO
|
||||||
, _floorShader :: Shader
|
, _floorShader :: Shader
|
||||||
, _chasmVBO :: VBO
|
, _chasmVBO :: VBO
|
||||||
, _chasmShader :: Shader
|
, _chasmShader :: GLuint
|
||||||
, _winVBO :: VBO
|
, _winVBO :: VBO
|
||||||
, _wallVBO :: VBO
|
, _wallVBO :: VBO
|
||||||
, _cloudVBO :: VBO
|
, _cloudVBO :: VBO
|
||||||
|
|||||||
+2
-6
@@ -145,16 +145,12 @@ doDrawing' win pdata u = do
|
|||||||
glUseProgram fs
|
glUseProgram fs
|
||||||
glDrawArrays GL_TRIANGLES 0 (fromIntegral nIndices)
|
glDrawArrays GL_TRIANGLES 0 (fromIntegral nIndices)
|
||||||
-- draw chasm shader blocking floor
|
-- draw chasm shader blocking floor
|
||||||
glUseProgram (pdata ^. chasmShader . shaderUINT)
|
glUseProgram (pdata ^. chasmShader)
|
||||||
glBindVertexArray $ pdata ^. chasmShader . shaderVAO . vaoName
|
|
||||||
glDepthMask GL_FALSE
|
glDepthMask GL_FALSE
|
||||||
glDrawBuffer GL_NONE
|
glDrawBuffer GL_NONE
|
||||||
glStencilOp GL_KEEP GL_KEEP GL_INCR
|
glStencilOp GL_KEEP GL_KEEP GL_INCR
|
||||||
with 0 $ glClearNamedFramebufferiv (pdata ^. fboBase . _1 . unFBO) GL_STENCIL 0
|
with 0 $ glClearNamedFramebufferiv (pdata ^. fboBase . _1 . unFBO) GL_STENCIL 0
|
||||||
glDrawArrays
|
glDrawArrays GL_TRIANGLES 0 (fromIntegral nchs)
|
||||||
(_unPrimitiveMode $ pdata ^. chasmShader . shaderPrimitive)
|
|
||||||
0
|
|
||||||
(fromIntegral nchs)
|
|
||||||
withArray [GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1, GL_COLOR_ATTACHMENT2] $
|
withArray [GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1, GL_COLOR_ATTACHMENT2] $
|
||||||
glNamedFramebufferDrawBuffers (pdata ^. fboBase . _1 . unFBO) 3
|
glNamedFramebufferDrawBuffers (pdata ^. fboBase . _1 . unFBO) 3
|
||||||
glDepthMask GL_TRUE
|
glDepthMask GL_TRUE
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
module Dodge.WorldLoad (postUniverseLoadSideEffect) where
|
module Dodge.WorldLoad (postUniverseLoadSideEffect) where
|
||||||
|
|
||||||
|
import Shader.Parameters
|
||||||
|
import Graphics.GL.Core45
|
||||||
import Control.Lens
|
import Control.Lens
|
||||||
import Control.Monad
|
import Control.Monad
|
||||||
import Data.Preload.Render
|
import Data.Preload.Render
|
||||||
@@ -16,8 +18,12 @@ postWorldLoad :: RenderData -> CWorld -> IO CWorld
|
|||||||
postWorldLoad rdata cw = do
|
postWorldLoad rdata cw = do
|
||||||
nfloorvxs <- foldM (pokeTile (rdata ^. floorVBO . vboPtr)) 0 (cw ^. cwTiles)
|
nfloorvxs <- foldM (pokeTile (rdata ^. floorVBO . vboPtr)) 0 (cw ^. cwTiles)
|
||||||
bufferPokedVBO (rdata ^. floorVBO) nfloorvxs
|
bufferPokedVBO (rdata ^. floorVBO) nfloorvxs
|
||||||
nchasmvxs <- foldM (pokeChasm (rdata ^. chasmVBO . vboPtr)) 0 (cw ^. chasms)
|
let chbo = rdata ^. chasmVBO . vboName
|
||||||
bufferPokedVBO (rdata ^. chasmVBO) nchasmvxs
|
chptr = rdata ^. chasmVBO . vboPtr
|
||||||
|
nchasmvxs <- foldM (pokeChasm chptr) 0 (cw ^. chasms)
|
||||||
|
glInvalidateBufferData chbo
|
||||||
|
glNamedBufferStorage chbo (fromIntegral $ 2 * nchasmvxs * floatSize) chptr 0
|
||||||
|
glBindBufferBase GL_SHADER_STORAGE_BUFFER 7 chbo
|
||||||
return $
|
return $
|
||||||
cw & numberFloorVerxs .~ nfloorvxs
|
cw & numberFloorVerxs .~ nfloorvxs
|
||||||
& numberChasmVerxs .~ nchasmvxs
|
& numberChasmVerxs .~ nchasmvxs
|
||||||
|
|||||||
@@ -137,15 +137,10 @@ preloadRender = do
|
|||||||
initTexture2DArraySquare 41 3 GL_LINEAR_MIPMAP_LINEAR GL_LINEAR "data/normalMaps/normalArray.png"
|
initTexture2DArraySquare 41 3 GL_LINEAR_MIPMAP_LINEAR GL_LINEAR "data/normalMaps/normalArray.png"
|
||||||
|
|
||||||
putStrLn "Setup chasm VBO, shader"
|
putStrLn "Setup chasm VBO, shader"
|
||||||
let chasmverxstrd = 3
|
chvbo <- mglCreate glCreateBuffers
|
||||||
chasmvbo <- setupVBOStatic (floatSize * chasmverxstrd)
|
chptr <- mallocArray (2 * 65536)
|
||||||
chasmshader <-
|
let chasmvbo = VBO chvbo chptr floatSize
|
||||||
makeShaderUsingVBO
|
chasmshader <- makeSourcedShader "chasm" [vert]
|
||||||
"positional/blank"
|
|
||||||
[vert, frag]
|
|
||||||
(toFloatVAs [3])
|
|
||||||
pmTriangles
|
|
||||||
chasmvbo
|
|
||||||
framebuf2 <- newTextureFramebuffer
|
framebuf2 <- newTextureFramebuffer
|
||||||
framebuf3 <- newTextureFramebuffer
|
framebuf3 <- newTextureFramebuffer
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ module Shader.Poke.Floor (
|
|||||||
pokeChasm,
|
pokeChasm,
|
||||||
) where
|
) where
|
||||||
|
|
||||||
|
import Shader.Parameters
|
||||||
import Control.Monad
|
import Control.Monad
|
||||||
import Data.Tile
|
import Data.Tile
|
||||||
import Foreign
|
import Foreign
|
||||||
@@ -22,10 +23,9 @@ pokeTileVerx tangent tilez ptr i (V2 x y, V2 s t) = do
|
|||||||
return $ i + 1
|
return $ i + 1
|
||||||
|
|
||||||
pokeChasm :: Ptr Float -> Int -> [Point2] -> IO Int
|
pokeChasm :: Ptr Float -> Int -> [Point2] -> IO Int
|
||||||
pokeChasm ptr i ps =
|
pokeChasm ptr i ps = foldM (pokeChasmVerx ptr) i $ polyToTris ps
|
||||||
foldM (pokeChasmVerx ptr) i $ polyToTris ps
|
|
||||||
|
|
||||||
pokeChasmVerx :: Ptr Float -> Int -> Point2 -> IO Int
|
pokeChasmVerx :: Ptr Float -> Int -> Point2 -> IO Int
|
||||||
pokeChasmVerx ptr i (V2 x y) = do
|
pokeChasmVerx ptr i p = do
|
||||||
zipWithM_ (\off -> pokeElemOff ptr (i * 3 + off)) [0 ..] [x, y, 0]
|
pokeByteOff ptr (floatSize*i*2) p
|
||||||
return $ i + 1
|
return $ i + 1
|
||||||
|
|||||||
Reference in New Issue
Block a user