Draw floors using vertex pulling

This commit is contained in:
2025-11-13 22:22:19 +00:00
parent 836c0ba772
commit cffa75c014
8 changed files with 34 additions and 34 deletions
-1
View File
@@ -4,7 +4,6 @@ in vec2 vPos;
layout (location=0) out vec4 fCol; layout (location=0) out vec4 fCol;
layout (location=1) out vec4 fPos; layout (location=1) out vec4 fPos;
layout (location=2) out vec4 normal; layout (location=2) out vec4 normal;
//layout (binding=0) uniform sampler2DArray tilesetSampler;
layout (binding=40) uniform sampler2DArray diffuseSampler; layout (binding=40) uniform sampler2DArray diffuseSampler;
layout (binding=41) uniform sampler2DArray normalSampler; layout (binding=41) uniform sampler2DArray normalSampler;
vec2 rotateV2 (float a, vec2 v) vec2 rotateV2 (float a, vec2 v)
+4 -4
View File
@@ -1,12 +1,12 @@
#version 450 core #version 450 core
layout (location = 0) in vec4 posXX; struct PosTexRot {vec4 posXX; vec4 texPosRot; };
layout (location = 1) in vec4 texPosRot;
layout (std140, binding = 0) uniform TheMat { mat4 theMat; } ; layout (std140, binding = 0) uniform TheMat { mat4 theMat; } ;
layout (std430, binding = 8) readonly buffer Data { PosTexRot data[]; };
out vec4 vTexPosRot; out vec4 vTexPosRot;
out vec2 vPos; out vec2 vPos;
void main() void main()
{ {
vPos = posXX.xy; vPos = data[gl_VertexID].posXX.xy;
gl_Position = theMat * vec4(vPos,0,1.0) ; gl_Position = theMat * vec4(vPos,0,1.0) ;
vTexPosRot = texPosRot; vTexPosRot = data[gl_VertexID].texPosRot;
} }
+1 -1
View File
@@ -42,7 +42,7 @@ data RenderData = RenderData
, _lightUBO :: GLuint -- BufferObject id , _lightUBO :: GLuint -- BufferObject id
, _vboShapes :: VBO , _vboShapes :: VBO
, _floorVBO :: VBO , _floorVBO :: VBO
, _floorShader :: Shader , _floorShader :: GLuint
, _chasmVBO :: VBO , _chasmVBO :: VBO
, _chasmShader :: GLuint , _chasmShader :: GLuint
, _winVBO :: VBO , _winVBO :: VBO
+2 -6
View File
@@ -155,13 +155,9 @@ doDrawing' win pdata u = do
glNamedFramebufferDrawBuffers (pdata ^. fboBase . _1 . unFBO) 3 glNamedFramebufferDrawBuffers (pdata ^. fboBase . _1 . unFBO) 3
glDepthMask GL_TRUE glDepthMask GL_TRUE
--draw floor onto base buffer --draw floor onto base buffer
glUseProgram (pdata ^. floorShader . shaderUINT) glUseProgram (pdata ^. floorShader)
glBindVertexArray $ pdata ^. floorShader . shaderVAO . vaoName
glStencilFunc GL_EQUAL 0 255 glStencilFunc GL_EQUAL 0 255
glDrawArrays glDrawArrays GL_TRIANGLES 0 (fromIntegral nFls)
(_unPrimitiveMode $ pdata ^. floorShader . shaderPrimitive)
0
(fromIntegral nFls)
--glDisable GL_STENCIL_TEST --glDisable GL_STENCIL_TEST
glDisable GL_CULL_FACE glDisable GL_CULL_FACE
glEnable GL_BLEND glEnable GL_BLEND
+11 -7
View File
@@ -1,23 +1,27 @@
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
import Dodge.Data.Universe import Dodge.Data.Universe
import Shader.Bind import Graphics.GL.Core45
import Shader.Data import Shader.Data
import Shader.Parameters
import Shader.Poke.Floor import Shader.Poke.Floor
postUniverseLoadSideEffect :: Universe -> Universe postUniverseLoadSideEffect :: Universe -> Universe
postUniverseLoadSideEffect = uvIOEffects %~ postUniverseLoadSideEffect =
(\f uv -> (uvWorld . cWorld) (postWorldLoad (uv ^. preloadData . renderData)) uv >>= f) uvIOEffects
%~ (\f uv -> (uvWorld . cWorld) (postWorldLoad (uv ^. preloadData . renderData)) uv >>= f)
postWorldLoad :: RenderData -> CWorld -> IO CWorld postWorldLoad :: RenderData -> CWorld -> IO CWorld
postWorldLoad rdata cw = do postWorldLoad rdata cw = do
nfloorvxs <- foldM (pokeTile (rdata ^. floorVBO . vboPtr)) 0 (cw ^. cwTiles) let floorbo = (rdata ^. floorVBO . vboName)
bufferPokedVBO (rdata ^. floorVBO) nfloorvxs floorptr = (rdata ^. floorVBO . vboPtr)
nfloorvxs <- foldM (pokeTile floorptr) 0 (cw ^. cwTiles)
glInvalidateBufferData floorbo
glNamedBufferStorage floorbo (fromIntegral $ 8 * nfloorvxs * floatSize) floorptr 0
glBindBufferBase GL_SHADER_STORAGE_BUFFER 8 floorbo
let chbo = rdata ^. chasmVBO . vboName let chbo = rdata ^. chasmVBO . vboName
chptr = rdata ^. chasmVBO . vboPtr chptr = rdata ^. chasmVBO . vboPtr
nchasmvxs <- foldM (pokeChasm chptr) 0 (cw ^. chasms) nchasmvxs <- foldM (pokeChasm chptr) 0 (cw ^. chasms)
+5 -4
View File
@@ -130,16 +130,17 @@ preloadRender = do
barrelShad <- makeShaderVBO "texture/barrel" [vert, geom, frag] (toFloatVAs [2, 2, 2, 1]) pmPoints barrelShad <- makeShaderVBO "texture/barrel" [vert, geom, frag] (toFloatVAs [2, 2, 2, 1]) pmPoints
-- blank wallShader -- blank wallShader
putStrLn "Setup floor VBO, shader" putStrLn "Setup floor VBO, shader"
let floorverxstrd = 8 flvbo <- mglCreate glCreateBuffers
floorvbo <- setupVBOStatic (floatSize * floorverxstrd) flptr <- mallocArray (8 * 65536)
floorshader <- makeShaderUsingVBO "floor/arrayPos" [vert, frag] (toFloatVAs [4, 4]) pmTriangles floorvbo let floorvbo = VBO flvbo flptr (8 * floatSize)
floorshader <- makeSourcedShader "floor/arrayPos" [vert, frag]
initTexture2DArraySquare 40 3 GL_LINEAR_MIPMAP_LINEAR GL_LINEAR "data/normalMaps/diffuseArray.png" initTexture2DArraySquare 40 3 GL_LINEAR_MIPMAP_LINEAR GL_LINEAR "data/normalMaps/diffuseArray.png"
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"
chvbo <- mglCreate glCreateBuffers chvbo <- mglCreate glCreateBuffers
chptr <- mallocArray (2 * 65536) chptr <- mallocArray (2 * 65536)
let chasmvbo = VBO chvbo chptr floatSize let chasmvbo = VBO chvbo chptr (2 * floatSize)
chasmshader <- makeSourcedShader "chasm" [vert] chasmshader <- makeSourcedShader "chasm" [vert]
framebuf2 <- newTextureFramebuffer framebuf2 <- newTextureFramebuffer
framebuf3 <- newTextureFramebuffer framebuf3 <- newTextureFramebuffer
+1 -1
View File
@@ -23,7 +23,7 @@ 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 = foldM (pokeChasmVerx ptr) i $ polyToTris ps pokeChasm ptr i = foldM (pokeChasmVerx ptr) i . polyToTris
pokeChasmVerx :: Ptr Float -> Int -> Point2 -> IO Int pokeChasmVerx :: Ptr Float -> Int -> Point2 -> IO Int
pokeChasmVerx ptr i p = do pokeChasmVerx ptr i p = do
+10 -10
View File
@@ -2704,7 +2704,7 @@ brightX src/Color.hs 116;" f
btSPic src/Dodge/Render/ShapePicture.hs 129;" f btSPic src/Dodge/Render/ShapePicture.hs 129;" f
btText src/Dodge/Inventory/SelectionList.hs 237;" f btText src/Dodge/Inventory/SelectionList.hs 237;" f
bufferEBO src/Shader/Bind.hs 28;" f bufferEBO src/Shader/Bind.hs 28;" f
bufferPerspectiveMatrixUBO src/Dodge/Render.hs 437;" f bufferPerspectiveMatrixUBO src/Dodge/Render.hs 418;" f
bufferPokedVBO src/Shader/Bind.hs 19;" f bufferPokedVBO src/Shader/Bind.hs 19;" f
bufferShaderLayers src/Shader/Bind.hs 32;" f bufferShaderLayers src/Shader/Bind.hs 32;" f
bulletBeltBracer src/Dodge/Item/Equipment.hs 67;" f bulletBeltBracer src/Dodge/Item/Equipment.hs 67;" f
@@ -2882,7 +2882,7 @@ copier src/Dodge/Item/Scope.hs 88;" f
copierItemUpdate src/Dodge/Creature/State.hs 131;" f copierItemUpdate src/Dodge/Creature/State.hs 131;" f
copyItemToFloor src/Dodge/FloorItem.hs 14;" f copyItemToFloor src/Dodge/FloorItem.hs 14;" f
corDoor src/Dodge/Room/Room.hs 385;" f corDoor src/Dodge/Room/Room.hs 385;" f
cornerList src/Preload/Render.hs 217;" f cornerList src/Preload/Render.hs 213;" f
corpseOrGib src/Dodge/Creature/Update.hs 111;" f corpseOrGib src/Dodge/Creature/Update.hs 111;" f
corridor src/Dodge/Room/Corridor.hs 17;" f corridor src/Dodge/Room/Corridor.hs 17;" f
corridorBoss src/Dodge/LockAndKey.hs 133;" f corridorBoss src/Dodge/LockAndKey.hs 133;" f
@@ -3558,7 +3558,7 @@ getCrMoveSpeed src/Dodge/Creature/Statistics.hs 50;" f
getCrsFromRooms src/Dodge/Room/Tutorial.hs 357;" f getCrsFromRooms src/Dodge/Room/Tutorial.hs 357;" f
getCrsFromRooms' src/Dodge/Room/Tutorial.hs 344;" f getCrsFromRooms' src/Dodge/Room/Tutorial.hs 344;" f
getDebugMouseOver src/Dodge/Update.hs 374;" f getDebugMouseOver src/Dodge/Update.hs 374;" f
getDistortions src/Dodge/Render.hs 449;" f getDistortions src/Dodge/Render.hs 430;" f
getEdgesCrossing src/Dodge/Path.hs 37;" f getEdgesCrossing src/Dodge/Path.hs 37;" f
getGrenadeHitEffect src/Dodge/HeldUse.hs 1264;" f getGrenadeHitEffect src/Dodge/HeldUse.hs 1264;" f
getInventoryPath src/Dodge/Inventory/Path.hs 9;" f getInventoryPath src/Dodge/Inventory/Path.hs 9;" f
@@ -3709,7 +3709,7 @@ initWallZoning src/Dodge/Wall/Zone.hs 12;" f
initialRoomTree src/Dodge/Floor.hs 24;" f initialRoomTree src/Dodge/Floor.hs 24;" f
initialWorld src/Dodge/Initialisation.hs 15;" f initialWorld src/Dodge/Initialisation.hs 15;" f
initialisePlaying src/Sound.hs 77;" f initialisePlaying src/Sound.hs 77;" f
initializeGLState src/Preload/Render.hs 238;" f initializeGLState src/Preload/Render.hs 234;" f
initializeOptionMenu src/Dodge/Menu/Option.hs 17;" f initializeOptionMenu src/Dodge/Menu/Option.hs 17;" f
initializeOptionMenuBO src/Dodge/Menu/Option.hs 30;" f initializeOptionMenuBO src/Dodge/Menu/Option.hs 30;" f
initializeTexture2D src/Framebuffer/Update.hs 217;" f initializeTexture2D src/Framebuffer/Update.hs 217;" f
@@ -4392,7 +4392,7 @@ poke34 src/Shader/Poke.hs 508;" f
pokeArrayOff src/Shader/Poke.hs 519;" f pokeArrayOff src/Shader/Poke.hs 519;" f
pokeBox src/Shader/Poke.hs 228;" f pokeBox src/Shader/Poke.hs 228;" f
pokeBoxSurface src/Shader/Poke.hs 261;" f pokeBoxSurface src/Shader/Poke.hs 261;" f
pokeChasm src/Shader/Poke/Floor.hs 24;" f pokeChasm src/Shader/Poke/Floor.hs 25;" f
pokeChasmVerx src/Shader/Poke/Floor.hs 28;" f pokeChasmVerx src/Shader/Poke/Floor.hs 28;" f
pokeCloud src/Shader/Poke/Cloud.hs 14;" f pokeCloud src/Shader/Poke/Cloud.hs 14;" f
pokeCloudLike src/Shader/Poke/Cloud.hs 32;" f pokeCloudLike src/Shader/Poke/Cloud.hs 32;" f
@@ -4411,8 +4411,8 @@ pokeRoundedFaces src/Shader/Poke.hs 141;" f
pokeShape src/Shader/Poke.hs 112;" f pokeShape src/Shader/Poke.hs 112;" f
pokeShapeObj src/Shader/Poke.hs 125;" f pokeShapeObj src/Shader/Poke.hs 125;" f
pokeStride src/Shader/Poke.hs 500;" f pokeStride src/Shader/Poke.hs 500;" f
pokeTile src/Shader/Poke/Floor.hs 12;" f pokeTile src/Shader/Poke/Floor.hs 13;" f
pokeTileVerx src/Shader/Poke/Floor.hs 18;" f pokeTileVerx src/Shader/Poke/Floor.hs 19;" f
pokeVerx src/Shader/Poke.hs 39;" f pokeVerx src/Shader/Poke.hs 39;" f
pokeVerxs src/Shader/Poke.hs 32;" f pokeVerxs src/Shader/Poke.hs 32;" f
pokeW src/Shader/Poke.hs 90;" f pokeW src/Shader/Poke.hs 90;" f
@@ -4443,8 +4443,8 @@ posRms src/Dodge/Tree/Shift.hs 44;" f
posSelSecYint src/Dodge/SelectionSections.hs 147;" f posSelSecYint src/Dodge/SelectionSections.hs 147;" f
positionRoomsFromTree src/Dodge/Tree/Shift.hs 35;" f positionRoomsFromTree src/Dodge/Tree/Shift.hs 35;" f
postGenerationProcessing src/Dodge/LevelGen.hs 30;" f postGenerationProcessing src/Dodge/LevelGen.hs 30;" f
postUniverseLoadSideEffect src/Dodge/WorldLoad.hs 11;" f postUniverseLoadSideEffect src/Dodge/WorldLoad.hs 12;" f
postWorldLoad src/Dodge/WorldLoad.hs 15;" f postWorldLoad src/Dodge/WorldLoad.hs 17;" f
powerFakeout src/Dodge/Room/Start.hs 28;" f powerFakeout src/Dodge/Room/Start.hs 28;" f
powerFakeout' src/Dodge/Room/Start.hs 25;" f powerFakeout' src/Dodge/Room/Start.hs 25;" f
powerLegs src/Dodge/Item/Equipment.hs 85;" f powerLegs src/Dodge/Item/Equipment.hs 85;" f
@@ -4821,7 +4821,7 @@ setTiles src/Dodge/Layout.hs 67;" f
setTreeInts src/Dodge/Room/Tutorial.hs 98;" f setTreeInts src/Dodge/Room/Tutorial.hs 98;" f
setViewDistance src/Dodge/Update/Camera.hs 239;" f setViewDistance src/Dodge/Update/Camera.hs 239;" f
setViewPos src/Dodge/Creature/ReaderUpdate.hs 69;" f setViewPos src/Dodge/Creature/ReaderUpdate.hs 69;" f
setViewport src/Dodge/Render.hs 454;" f setViewport src/Dodge/Render.hs 435;" f
setVol src/Dodge/Config.hs 47;" f setVol src/Dodge/Config.hs 47;" f
setWristShieldPos src/Dodge/Equipment.hs 49;" f setWristShieldPos src/Dodge/Equipment.hs 49;" f
setWristShieldPos src/Dodge/Euse.hs 38;" f setWristShieldPos src/Dodge/Euse.hs 38;" f