diff --git a/shader/floor/arrayPos.frag b/shader/floor/arrayPos.frag index dbbd9ee5e..7356735b4 100644 --- a/shader/floor/arrayPos.frag +++ b/shader/floor/arrayPos.frag @@ -4,7 +4,6 @@ in vec2 vPos; layout (location=0) out vec4 fCol; layout (location=1) out vec4 fPos; layout (location=2) out vec4 normal; -//layout (binding=0) uniform sampler2DArray tilesetSampler; layout (binding=40) uniform sampler2DArray diffuseSampler; layout (binding=41) uniform sampler2DArray normalSampler; vec2 rotateV2 (float a, vec2 v) diff --git a/shader/floor/arrayPos.vert b/shader/floor/arrayPos.vert index b0c3f882e..acd596a94 100644 --- a/shader/floor/arrayPos.vert +++ b/shader/floor/arrayPos.vert @@ -1,12 +1,12 @@ #version 450 core -layout (location = 0) in vec4 posXX; -layout (location = 1) in vec4 texPosRot; +struct PosTexRot {vec4 posXX; vec4 texPosRot; }; layout (std140, binding = 0) uniform TheMat { mat4 theMat; } ; +layout (std430, binding = 8) readonly buffer Data { PosTexRot data[]; }; out vec4 vTexPosRot; out vec2 vPos; void main() { - vPos = posXX.xy; + vPos = data[gl_VertexID].posXX.xy; gl_Position = theMat * vec4(vPos,0,1.0) ; - vTexPosRot = texPosRot; + vTexPosRot = data[gl_VertexID].texPosRot; } diff --git a/src/Data/Preload/Render.hs b/src/Data/Preload/Render.hs index 5ce271cbd..2a2aa24b0 100644 --- a/src/Data/Preload/Render.hs +++ b/src/Data/Preload/Render.hs @@ -42,7 +42,7 @@ data RenderData = RenderData , _lightUBO :: GLuint -- BufferObject id , _vboShapes :: VBO , _floorVBO :: VBO - , _floorShader :: Shader + , _floorShader :: GLuint , _chasmVBO :: VBO , _chasmShader :: GLuint , _winVBO :: VBO diff --git a/src/Dodge/Render.hs b/src/Dodge/Render.hs index 1224bc5c1..aa0284d14 100644 --- a/src/Dodge/Render.hs +++ b/src/Dodge/Render.hs @@ -155,13 +155,9 @@ doDrawing' win pdata u = do glNamedFramebufferDrawBuffers (pdata ^. fboBase . _1 . unFBO) 3 glDepthMask GL_TRUE --draw floor onto base buffer - glUseProgram (pdata ^. floorShader . shaderUINT) - glBindVertexArray $ pdata ^. floorShader . shaderVAO . vaoName + glUseProgram (pdata ^. floorShader) glStencilFunc GL_EQUAL 0 255 - glDrawArrays - (_unPrimitiveMode $ pdata ^. floorShader . shaderPrimitive) - 0 - (fromIntegral nFls) + glDrawArrays GL_TRIANGLES 0 (fromIntegral nFls) --glDisable GL_STENCIL_TEST glDisable GL_CULL_FACE glEnable GL_BLEND diff --git a/src/Dodge/WorldLoad.hs b/src/Dodge/WorldLoad.hs index 4449cf522..dbdeb72b5 100644 --- a/src/Dodge/WorldLoad.hs +++ b/src/Dodge/WorldLoad.hs @@ -1,23 +1,27 @@ module Dodge.WorldLoad (postUniverseLoadSideEffect) where -import Shader.Parameters -import Graphics.GL.Core45 import Control.Lens import Control.Monad import Data.Preload.Render import Dodge.Data.Universe -import Shader.Bind +import Graphics.GL.Core45 import Shader.Data +import Shader.Parameters import Shader.Poke.Floor postUniverseLoadSideEffect :: Universe -> Universe -postUniverseLoadSideEffect = uvIOEffects %~ - (\f uv -> (uvWorld . cWorld) (postWorldLoad (uv ^. preloadData . renderData)) uv >>= f) +postUniverseLoadSideEffect = + uvIOEffects + %~ (\f uv -> (uvWorld . cWorld) (postWorldLoad (uv ^. preloadData . renderData)) uv >>= f) postWorldLoad :: RenderData -> CWorld -> IO CWorld postWorldLoad rdata cw = do - nfloorvxs <- foldM (pokeTile (rdata ^. floorVBO . vboPtr)) 0 (cw ^. cwTiles) - bufferPokedVBO (rdata ^. floorVBO) nfloorvxs + let floorbo = (rdata ^. floorVBO . vboName) + 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 chptr = rdata ^. chasmVBO . vboPtr nchasmvxs <- foldM (pokeChasm chptr) 0 (cw ^. chasms) diff --git a/src/Preload/Render.hs b/src/Preload/Render.hs index cbac82c0f..1b03b9dc6 100644 --- a/src/Preload/Render.hs +++ b/src/Preload/Render.hs @@ -130,16 +130,17 @@ preloadRender = do barrelShad <- makeShaderVBO "texture/barrel" [vert, geom, frag] (toFloatVAs [2, 2, 2, 1]) pmPoints -- blank wallShader putStrLn "Setup floor VBO, shader" - let floorverxstrd = 8 - floorvbo <- setupVBOStatic (floatSize * floorverxstrd) - floorshader <- makeShaderUsingVBO "floor/arrayPos" [vert, frag] (toFloatVAs [4, 4]) pmTriangles floorvbo + flvbo <- mglCreate glCreateBuffers + flptr <- mallocArray (8 * 65536) + 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 41 3 GL_LINEAR_MIPMAP_LINEAR GL_LINEAR "data/normalMaps/normalArray.png" putStrLn "Setup chasm VBO, shader" chvbo <- mglCreate glCreateBuffers chptr <- mallocArray (2 * 65536) - let chasmvbo = VBO chvbo chptr floatSize + let chasmvbo = VBO chvbo chptr (2 * floatSize) chasmshader <- makeSourcedShader "chasm" [vert] framebuf2 <- newTextureFramebuffer framebuf3 <- newTextureFramebuffer diff --git a/src/Shader/Poke/Floor.hs b/src/Shader/Poke/Floor.hs index 583430051..3913ae753 100644 --- a/src/Shader/Poke/Floor.hs +++ b/src/Shader/Poke/Floor.hs @@ -23,7 +23,7 @@ pokeTileVerx tangent tilez ptr i (V2 x y, V2 s t) = do return $ i + 1 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 i p = do diff --git a/tags b/tags index c9a890df5..aab618f2f 100644 --- a/tags +++ b/tags @@ -2704,7 +2704,7 @@ brightX src/Color.hs 116;" f btSPic src/Dodge/Render/ShapePicture.hs 129;" f btText src/Dodge/Inventory/SelectionList.hs 237;" 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 bufferShaderLayers src/Shader/Bind.hs 32;" 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 copyItemToFloor src/Dodge/FloorItem.hs 14;" 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 corridor src/Dodge/Room/Corridor.hs 17;" 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 344;" 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 getGrenadeHitEffect src/Dodge/HeldUse.hs 1264;" 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 initialWorld src/Dodge/Initialisation.hs 15;" 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 initializeOptionMenuBO src/Dodge/Menu/Option.hs 30;" 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 pokeBox src/Shader/Poke.hs 228;" 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 pokeCloud src/Shader/Poke/Cloud.hs 14;" 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 pokeShapeObj src/Shader/Poke.hs 125;" f pokeStride src/Shader/Poke.hs 500;" f -pokeTile src/Shader/Poke/Floor.hs 12;" f -pokeTileVerx src/Shader/Poke/Floor.hs 18;" f +pokeTile src/Shader/Poke/Floor.hs 13;" f +pokeTileVerx src/Shader/Poke/Floor.hs 19;" f pokeVerx src/Shader/Poke.hs 39;" f pokeVerxs src/Shader/Poke.hs 32;" 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 positionRoomsFromTree src/Dodge/Tree/Shift.hs 35;" f postGenerationProcessing src/Dodge/LevelGen.hs 30;" f -postUniverseLoadSideEffect src/Dodge/WorldLoad.hs 11;" f -postWorldLoad src/Dodge/WorldLoad.hs 15;" f +postUniverseLoadSideEffect src/Dodge/WorldLoad.hs 12;" f +postWorldLoad src/Dodge/WorldLoad.hs 17;" f powerFakeout src/Dodge/Room/Start.hs 28;" f powerFakeout' src/Dodge/Room/Start.hs 25;" 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 setViewDistance src/Dodge/Update/Camera.hs 239;" 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 setWristShieldPos src/Dodge/Equipment.hs 49;" f setWristShieldPos src/Dodge/Euse.hs 38;" f