From ce438b7ecd66c69823c2120e571ab57954bbb83d Mon Sep 17 00:00:00 2001 From: justin Date: Tue, 11 Nov 2025 21:03:02 +0000 Subject: [PATCH] Pack shape normals into a word8 --- shader/shape/basic.frag | 3 +- shader/shape/basic.vert | 7 ++- src/Data/Preload/Render.hs | 4 +- src/Dodge/Render.hs | 13 ++--- src/Preload.hs | 4 +- src/Preload/Render.hs | 28 +++++----- src/Shader/Poke.hs | 35 ++++++------ src/Shape/Parameters.hs | 22 ++++---- tags | 106 ++++++++++++++++++------------------- 9 files changed, 109 insertions(+), 113 deletions(-) diff --git a/shader/shape/basic.frag b/shader/shape/basic.frag index 893473275..f461b1b83 100644 --- a/shader/shape/basic.frag +++ b/shader/shape/basic.frag @@ -9,5 +9,6 @@ void main() { fCol = vCol; fPos = vPos; - fNorm = vec4(vNorm.xyz - vPos.xyz,1); + //fNorm = vec4(vNorm.xyz - vPos.xyz,1); + fNorm = vNorm ; } diff --git a/shader/shape/basic.vert b/shader/shape/basic.vert index e2caf9d54..79e6fa1e8 100644 --- a/shader/shape/basic.vert +++ b/shader/shape/basic.vert @@ -1,5 +1,7 @@ #version 450 core -struct PosColNorm { vec4 pos; uint col; vec4 norm; }; +//struct PosColNorm { vec4 pos; vec4 norm;uint col; uint dummy; }; +struct PosColNorm { vec4 pos; uint norm;uint d1;uint d2; uint d3;uint col; uint dummy; }; +// I don't know if the dummy is necessary layout (std140, binding = 0) uniform TheMat { mat4 theMat; } ; layout (std430, binding = 3) readonly buffer Data { PosColNorm data[]; }; layout (std430, binding = 4) readonly buffer Indices { uint indices[]; }; @@ -9,7 +11,8 @@ out vec4 vNorm; void main() { vPos = data[indices[gl_VertexID]].pos; vCol = unpackUnorm4x8(data[indices[gl_VertexID]].col); - vNorm = data[indices[gl_VertexID]].norm; + vec4 n = unpackUnorm4x8(data[indices[gl_VertexID]].norm); + vNorm = n *2 - vec4(1,1,1,1); gl_Position = theMat * vec4(vPos.xyz,1); } //layout (location = 0) in vec4 pos; diff --git a/src/Data/Preload/Render.hs b/src/Data/Preload/Render.hs index 294806411..2498d1eb6 100644 --- a/src/Data/Preload/Render.hs +++ b/src/Data/Preload/Render.hs @@ -44,8 +44,8 @@ data RenderData = RenderData , _matUBO :: GLuint -- BufferObject id -- , _winSSBO :: GLuint -- , _wallSSBO :: GLuint - , _shapeSSBO :: GLuint - , _ishapeSSBO :: GLuint +-- , _shapeSSBO :: GLuint +-- , _ishapeSSBO :: GLuint , _vboShapes :: VBO , _floorVBO :: VBO , _floorShader :: Shader diff --git a/src/Dodge/Render.hs b/src/Dodge/Render.hs index 14e0f4b34..6853bc5d3 100644 --- a/src/Dodge/Render.hs +++ b/src/Dodge/Render.hs @@ -4,6 +4,7 @@ module Dodge.Render ( getWindowSize, ) where +import Shape.Parameters import Control.Lens import Control.Monad import qualified Control.Monad.Parallel as MP @@ -114,10 +115,10 @@ doDrawing' win pdata u = do glNamedBufferSubData (pdata ^. wallVBO . vboName) 0 (fromIntegral $ trueNWalls * sizeOf (0::Float) * 8) (pdata ^. wallVBO . vboPtr) - glNamedBufferSubData (pdata ^. shapeSSBO) 0 - (fromIntegral $ nShapeVs * (sizeOf (0::Float)*12)) + glNamedBufferSubData (pdata ^. vboShapes . vboName) 0 + (fromIntegral $ nShapeVs * shapeVerxSize) (pdata ^. vboShapes . vboPtr) - glNamedBufferSubData (pdata ^. ishapeSSBO) 0 + glNamedBufferSubData (pdata ^. shapeEBO . uiboName) 0 (fromIntegral $ nIndices * (sizeOf (0::GLuint))) (pdata ^. shapeEBO . uiboPtr) bufferEBO (pdata ^. silhouetteEBO) nSilIndices @@ -176,13 +177,7 @@ doDrawing' win pdata u = do --draw object shapes onto base buffer let fs = _shapeShader pdata glUseProgram (_shaderUINT fs) --- glBindVertexArray $ fs ^. shaderVAO . vaoName glDrawArrays GL_TRIANGLES 0 (fromIntegral nIndices) --- glDrawElements --- (_unPrimitiveMode $ _shaderPrimitive fs) --- (fromIntegral nIndices) --- GL_UNSIGNED_INT --- nullPtr -- draw chasm shader blocking floor glUseProgram (pdata ^. chasmShader . shaderUINT) glBindVertexArray $ pdata ^. chasmShader . shaderVAO . vaoName diff --git a/src/Preload.hs b/src/Preload.hs index 01ae6cc38..a8e404d7f 100644 --- a/src/Preload.hs +++ b/src/Preload.hs @@ -4,12 +4,12 @@ module Preload ( import qualified Data.IntMap.Strict as IM import Data.Preload -import Preload.Render +--import Preload.Render import qualified SDL.Mixer as Mix cleanUpPreload :: PreloadData -> IO () cleanUpPreload pd = do - cleanUpRenderPreload $ _renderData pd +-- cleanUpRenderPreload $ _renderData pd cleanUpSoundPreload $ _soundData pd cleanUpSoundPreload :: IM.IntMap Mix.Chunk -> IO () diff --git a/src/Preload/Render.hs b/src/Preload/Render.hs index f5e4d7745..a121bc2ed 100644 --- a/src/Preload/Render.hs +++ b/src/Preload/Render.hs @@ -2,11 +2,12 @@ --{-# OPTIONS_GHC -Wno-unused-top-binds #-} module Preload.Render ( preloadRender, - cleanUpRenderPreload, +-- cleanUpRenderPreload, ) where +import Shape.Parameters import Control.Concurrent -import Control.Lens +--import Control.Lens import Control.Monad import Data.Preload.Render import qualified Data.Vector.Mutable as MV @@ -18,7 +19,7 @@ import Shader.AuxAddition import Shader.Compile import Shader.Data import Shader.Parameters -import Shape.Parameters +--import Shape.Parameters {- BINDING LIST: 0 base @@ -35,7 +36,6 @@ preloadRender = do -- set up uniform buffer object putStrLn "Setup UBO" theUBO <- mglCreate glCreateBuffers - --glNamedBufferData theUBO 64 nullPtr GL_STREAM_DRAW glNamedBufferStorage theUBO 64 nullPtr GL_DYNAMIC_STORAGE_BIT glBindBufferBase GL_UNIFORM_BUFFER 0 theUBO @@ -55,14 +55,18 @@ preloadRender = do let wallvbo = VBO wallssbo wallssboptr 8 shapessbo <- mglCreate glCreateBuffers - let shapessbosize = fromIntegral (sizeOf (0::Float) * 12) * 65536 + let shapessbosize = fromIntegral shapeVerxSize * 65536 glNamedBufferStorage shapessbo shapessbosize nullPtr GL_DYNAMIC_STORAGE_BIT glBindBufferBase GL_SHADER_STORAGE_BUFFER 3 shapessbo + shptr <- mallocArray (fromIntegral shapessbosize) + let shVBO = VBO shapessbo shptr shapeVerxSize ishapessbo <- mglCreate glCreateBuffers let ishapessbosize = fromIntegral (sizeOf (0::GLuint) * 65536) glNamedBufferStorage ishapessbo ishapessbosize nullPtr GL_DYNAMIC_STORAGE_BIT glBindBufferBase GL_SHADER_STORAGE_BUFFER 4 ishapessbo + ishptr <- mallocArray 65536 + let shEBO = UintBO ishapessbo ishptr ieshapessbo <- mglCreate glCreateBuffers let ieshapessbosize = fromIntegral (sizeOf (0::GLuint) * 65536) @@ -77,9 +81,9 @@ preloadRender = do wallpull <- makeShaderUsingVAO "pull/wall" [vert,frag] pmTriangles (VAO dummyvao) putStrLn "Setup shape VBO, VAO, EBO" - shVBO <- setupVBO shapeVerxSize - shPosVAO <- setupVAOUsingVBO [VertexAttribute 4 GL_FLOAT GL_FALSE 0] shVBO - shEBO <- setupEBO shPosVAO +-- shVBO <- setupVBO shapeVerxSize +-- shPosVAO <- setupVAOUsingVBO [VertexAttribute 4 GL_FLOAT GL_FALSE 0] shVBO +-- shEBO <- setupEBO shPosVAO -- note the shape shader vao is distinct from the position vao, but they -- share an EBO -- shapeshader <- makeShaderUsingVBO "shape/basic" [vert, frag] shapeVerxAttributes @@ -221,8 +225,8 @@ preloadRender = do , _matUBO = theUBO -- , _winSSBO = winssbo -- , _wallSSBO = wallssbo - , _shapeSSBO = shapessbo - , _ishapeSSBO = ishapessbo +-- , _shapeSSBO = shapessbo +-- , _ishapeSSBO = ishapessbo -- , _ieshapeSSBO = ieshapessbo -- , _lightsUBO = lightsubo -- , _vboWindows = winvbo @@ -265,8 +269,8 @@ initializeGLState = do glEnable GL_DEPTH_TEST glEnable GL_STENCIL_TEST -cleanUpRenderPreload :: RenderData -> IO () -cleanUpRenderPreload _ = return () +--cleanUpRenderPreload :: RenderData -> IO () +--cleanUpRenderPreload _ = return () --cleanUpRenderPreload pd = do -- TODO fix this diff --git a/src/Shader/Poke.hs b/src/Shader/Poke.hs index 8b2acae80..4abfadb48 100644 --- a/src/Shader/Poke.hs +++ b/src/Shader/Poke.hs @@ -8,6 +8,8 @@ module Shader.Poke ( pokeFloors, ) where +import Control.Lens +import Linear import Shape.Parameters import Color import Control.Monad.Primitive @@ -22,7 +24,6 @@ import Geometry.Data import Geometry.Triangulate import Geometry.Vector import Graphics.GL.Core45 -import Linear.V3 (cross) import Picture.Data import Shader.Data import Shader.Parameters @@ -263,7 +264,7 @@ pokeBoxSurface :: Float -> Point4 -> Ptr Float -> UV.Vector Point3 -> Int -> [In {-# INLINE pokeBoxSurface #-} pokeBoxSurface xdata col ptr vs n is = UV.foldM' - (pokeFlatV xdata norm col ptr) + (pokeFlatV xdata pnorm col ptr) n v where @@ -271,7 +272,7 @@ pokeBoxSurface xdata col ptr vs n is = x = v UV.! 0 y = v UV.! 1 z = v UV.! 2 - norm = negate $ cross (x - y) (z - y) + pnorm = negate $ cross (x - y) (z - y) -- should probably memoize this boxSurfaces :: Int -> [[Int]] @@ -434,23 +435,16 @@ topPrismIndices n = ] -- consider changing the position to a vec4 -pokeJustV :: - Float -> - Point3 -> - Point4 -> - Ptr Float -> - Int -> - Point3 -> - IO Int +pokeJustV :: Float -> Point3 -> Point4 -> Ptr Float -> Int -> Point3 -> IO Int {-# INLINE pokeJustV #-} pokeJustV xdata cp col ptr nv sh = do pokeByteOff ptr (nv * shapeVerxSize) (V4 x y z xdata) - pokeByteOff ptr (nv *shapeVerxSize + 4 * floatSize) (toColor8 col) - pokeByteOff ptr (nv *shapeVerxSize + 8 * floatSize) (V4 nx ny nz 1) + pokeByteOff ptr (nv *shapeVerxSize + 4 * floatSize) (normalToColor8 $ V4 nx ny nz 1) + pokeByteOff ptr (nv *shapeVerxSize + 8 * floatSize) (toColor8 col) return (nv + 1) where V3 x y z = sh - V3 nx ny nz = cp + V3 nx ny nz = cp - sh pokeFlatV :: Float -> @@ -461,14 +455,19 @@ pokeFlatV :: Point3 -> IO Int {-# INLINE pokeFlatV #-} -pokeFlatV xdata norm col ptr nv sh = do +pokeFlatV xdata pnorm col ptr nv sh = do pokeByteOff ptr (nv * shapeVerxSize) (V4 x y z xdata) - pokeByteOff ptr (nv *shapeVerxSize + 4 * floatSize) (toColor8 col) - pokeByteOff ptr (nv *shapeVerxSize + 8 * floatSize) (V4 nx ny nz 1) + pokeByteOff ptr (nv *shapeVerxSize + 4 * floatSize) (normalToColor8 $ V4 nx ny nz 1) + pokeByteOff ptr (nv *shapeVerxSize + 8 * floatSize) (toColor8 col) return (nv + 1) where V3 x y z = sh - V3 nx ny nz = sh - norm + V3 nx ny nz = (sh - pnorm) - V3 x y z + +normalToColor8 :: Point4 -> Color8 +normalToColor8 = over each f . normalize + where + f x = floor $ (x + 1) * 127.5 pokeLayVerxs :: MV.MVector (PrimState IO) (Shader, VBO) -> diff --git a/src/Shape/Parameters.hs b/src/Shape/Parameters.hs index a92f30303..94ce4e659 100644 --- a/src/Shape/Parameters.hs +++ b/src/Shape/Parameters.hs @@ -1,20 +1,16 @@ -module Shape.Parameters - (shapeVerxSize,shapeVerxAttributes) - where +module Shape.Parameters (shapeVerxSize) where + -- ,shapeVerxAttributes) where -import Shader.Parameters -import Shader.Data ---import Data.Word import Foreign.Storable -import Graphics.GL.Core45 shapeVerxSize :: Int +{-# INLINE shapeVerxSize #-} shapeVerxSize = sizeOf (0 :: Float) * 12 -shapeVerxAttributes :: [VertexAttribute] -shapeVerxAttributes = - [VertexAttribute 4 GL_FLOAT GL_FALSE 0 - ,VertexAttribute 4 GL_UNSIGNED_BYTE GL_TRUE (fromIntegral (4 :: Int) * fromIntegral floatSize) - ,VertexAttribute 4 GL_FLOAT GL_FALSE (fromIntegral (8 :: Int) * fromIntegral (floatSize)) - ] +--shapeVerxAttributes :: [VertexAttribute] +--shapeVerxAttributes = +-- [VertexAttribute 4 GL_FLOAT GL_FALSE 0 +-- ,VertexAttribute 4 GL_UNSIGNED_BYTE GL_TRUE (fromIntegral (4 :: Int) * fromIntegral floatSize) +-- ,VertexAttribute 4 GL_FLOAT GL_FALSE (fromIntegral (8 :: Int) * fromIntegral (floatSize)) +-- ] diff --git a/tags b/tags index 39e393614..a95fc4f41 100644 --- a/tags +++ b/tags @@ -356,7 +356,6 @@ DropItem src/Dodge/Data/ActionPlan.hs 38;" C DudPayload src/Dodge/Data/Payload.hs 11;" C Dungeon src/Dodge/Data/Scenario.hs 66;" C Dust src/Dodge/Data/Cloud.hs 27;" t -EBO src/Shader/Data.hs 94;" t EBSound src/Dodge/Data/SoundOrigin.hs 39;" C ECW src/Dodge/Material/Damage.hs 14;" t ELEPHANTGUN src/Dodge/Data/Item/Combine.hs 157;" C @@ -990,7 +989,7 @@ PosInf src/Dodge/Data/CardinalPoint.hs 44;" C PosRooms src/Dodge/Tree/Shift.hs 28;" t Posture src/Dodge/Data/Creature/Stance.hs 33;" t PreloadData src/Data/Preload.hs 10;" t -PrimitiveMode src/Shader/Data.hs 105;" t +PrimitiveMode src/Shader/Data.hs 110;" t PrintMaterial src/Dodge/Data/AmmoType.hs 12;" C Prison src/Dodge/Data/Scenario.hs 65;" C Projectile src/Dodge/Data/Projectile.hs 15;" t @@ -1118,6 +1117,7 @@ SPEEDLEGS src/Dodge/Data/Item/Combine.hs 129;" C SPRING src/Dodge/Data/Item/Combine.hs 53;" C SPic src/ShapePicture/Data.hs 7;" t SQUARE src/Dodge/Data/GenParams.hs 18;" C +SSBO src/Shader/Data.hs 99;" t SString src/ShortShow.hs 16;" C ST src/Dodge/Data/MetaTree.hs 20;" C STEELDRUM src/Dodge/Data/Item/Combine.hs 58;" C @@ -1151,7 +1151,7 @@ SetLSCol src/Dodge/Data/WorldEffect.hs 24;" C SetTrigger src/Dodge/Data/WorldEffect.hs 22;" C ShadNum src/Picture/Data.hs 33;" t Shader src/Shader/Data.hs 51;" t -ShaderTexture src/Shader/Data.hs 100;" t +ShaderTexture src/Shader/Data.hs 105;" t ShadowFidelity src/Shape/Data.hs 19;" t ShadowRendering src/Dodge/Data/Config.hs 103;" t Shape src/Shape/Data.hs 48;" t @@ -1349,6 +1349,7 @@ TwoHandUnder src/Dodge/Data/AimStance.hs 11;" C Typical src/Shape/Data.hs 31;" C UNDERBARRELSLOT src/Dodge/Data/Item/Combine.hs 97;" C UNIGATE src/Dodge/Data/Item/Combine.hs 30;" C +UintBO src/Shader/Data.hs 94;" t UnderBarrelPlatformSF src/Dodge/Data/ComposedItem.hs 16;" C UnderBarrelSlotSF src/Dodge/Data/ComposedItem.hs 15;" C UnderGround src/Dodge/Data/Scenario.hs 78;" C @@ -1592,8 +1593,8 @@ _cdtUp src/Dodge/Data/DoubleTree.hs 92;" f _ceSideEffect src/Dodge/Data/Universe.hs 66;" f _ceString src/Dodge/Data/Universe.hs 67;" f _ceilingStencilShader src/Data/Preload/Render.hs 18;" f -_chasmShader src/Data/Preload/Render.hs 56;" f -_chasmVBO src/Data/Preload/Render.hs 55;" f +_chasmShader src/Data/Preload/Render.hs 53;" f +_chasmVBO src/Data/Preload/Render.hs 52;" f _chasms src/Dodge/Data/CWorld.hs 33;" f _ciFilter src/Dodge/Data/HUD.hs 25;" f _ciInvIDs src/Dodge/Data/Combine.hs 9;" f @@ -1622,9 +1623,9 @@ _clickPos src/Dodge/Data/Input.hs 42;" f _clickWorldPos src/Dodge/Data/Input.hs 44;" f _closeButtons src/Dodge/Data/HUD.hs 36;" f _closeItems src/Dodge/Data/HUD.hs 35;" f -_cloudEBO src/Data/Preload/Render.hs 61;" f -_cloudShader src/Data/Preload/Render.hs 60;" f -_cloudVBO src/Data/Preload/Render.hs 59;" f +_cloudEBO src/Data/Preload/Render.hs 58;" f +_cloudShader src/Data/Preload/Render.hs 57;" f +_cloudVBO src/Data/Preload/Render.hs 56;" f _clouds src/Dodge/Data/LWorld.hs 96;" f _colorBlurShader src/Data/Preload/Render.hs 26;" f _coolEnd src/Dodge/Data/TriggerType.hs 17;" f @@ -1754,15 +1755,13 @@ _dsZoning src/Dodge/Data/World.hs 48;" f _dtLeft src/Dodge/Data/DoubleTree.hs 29;" f _dtRight src/Dodge/Data/DoubleTree.hs 29;" f _dtValue src/Dodge/Data/DoubleTree.hs 29;" f -_dummyVAO src/Data/Preload/Render.hs 63;" f +_dummyVAO src/Data/Preload/Render.hs 60;" f _dusts src/Dodge/Data/LWorld.hs 97;" f _ebID src/Dodge/Data/EnergyBall/Type.hs 13;" f _ebPos src/Dodge/Data/EnergyBall.hs 17;" f _ebTimer src/Dodge/Data/EnergyBall.hs 18;" f _ebType src/Dodge/Data/EnergyBall.hs 19;" f _ebVel src/Dodge/Data/EnergyBall.hs 16;" f -_eboName src/Shader/Data.hs 95;" f -_eboPtr src/Shader/Data.hs 96;" f _emoMenuOption src/Dodge/Data/Universe.hs 77;" f _energyBalls src/Dodge/Data/LWorld.hs 104;" f _fbSize src/Dodge/Data/EnergyBall/Type.hs 12;" f @@ -1786,8 +1785,8 @@ _flankTarget src/Dodge/Data/ActionPlan.hs 129;" f _flares src/Dodge/Data/LWorld.hs 108;" f _flatShieldWlMIX src/Dodge/Data/Item/Params.hs 14;" f _floorItems src/Dodge/Data/LWorld.hs 127;" f -_floorShader src/Data/Preload/Render.hs 54;" f -_floorVBO src/Data/Preload/Render.hs 53;" f +_floorShader src/Data/Preload/Render.hs 51;" f +_floorVBO src/Data/Preload/Render.hs 50;" f _foreShapes src/Dodge/Data/LWorld.hs 132;" f _fsDir src/Dodge/Data/ForegroundShape.hs 14;" f _fsPos src/Dodge/Data/ForegroundShape.hs 13;" f @@ -1847,7 +1846,6 @@ _ibtHeld src/Dodge/Data/Item/Combine.hs 16;" f _ibtIntroScanType src/Dodge/Data/Item/Combine.hs 32;" f _ibtPathing src/Dodge/Data/Item/Combine.hs 28;" f _ibtTargeting src/Dodge/Data/Item/Combine.hs 21;" f -_ieshapeSSBO src/Data/Preload/Render.hs 49;" f _ilCrID src/Dodge/Data/Item/Location.hs 30;" f _ilEquipSite src/Dodge/Data/Item/Location.hs 35;" f _ilInvID src/Dodge/Data/Item/Location.hs 31;" f @@ -2195,7 +2193,7 @@ _scOptions src/Dodge/Data/Universe.hs 84;" f _scPositionedMenuOption src/Dodge/Data/Universe.hs 86;" f _scSelectionList src/Dodge/Data/Universe.hs 88;" f _scTitle src/Dodge/Data/Universe.hs 83;" f -_screenTextureVAO src/Data/Preload/Render.hs 62;" f +_screenTextureVAO src/Data/Preload/Render.hs 59;" f _scrollAmount src/Dodge/Data/Input.hs 40;" f _scrollItemID src/Dodge/Data/World.hs 68;" f _scrollItemID src/Dodge/Data/World.hs 77;" f @@ -2272,6 +2270,8 @@ _ssItems src/Dodge/Data/SelectionList.hs 30;" f _ssOffset src/Dodge/Data/SelectionList.hs 31;" f _ssShownItems src/Dodge/Data/SelectionList.hs 32;" f _ssShownLength src/Dodge/Data/SelectionList.hs 33;" f +_ssboName src/Shader/Data.hs 100;" f +_ssboPtr src/Shader/Data.hs 101;" f _strideAmount src/Dodge/Data/Creature/Stance.hs 23;" f _strideLength src/Dodge/Data/Creature/Stance.hs 18;" f _stuckCrID src/Dodge/Data/Projectile.hs 48;" f @@ -2305,7 +2305,7 @@ _terminals src/Dodge/Data/LWorld.hs 122;" f _teslaArcs src/Dodge/Data/LWorld.hs 110;" f _testFloat src/Dodge/Data/World.hs 42;" f _textInput src/Dodge/Data/Input.hs 46;" f -_textureObject src/Shader/Data.hs 101;" f +_textureObject src/Shader/Data.hs 106;" f _tiText src/Dodge/Data/Terminal/Status.hs 14;" f _tileArrayZ src/Data/Tile.hs 24;" f _tilePoly src/Data/Tile.hs 17;" f @@ -2355,13 +2355,15 @@ _uScope src/Dodge/Data/Item/Use.hs 34;" f _uValue src/Dodge/Data/Item/Use.hs 33;" f _uaParams src/Dodge/Data/Item/Use.hs 30;" f _ubMod src/Dodge/Data/Item/Use.hs 35;" f +_uiboName src/Shader/Data.hs 95;" f +_uiboPtr src/Shader/Data.hs 96;" f _unCombEdge src/Dodge/Combine/Graph.hs 30;" f _unCombNode src/Dodge/Combine/Graph.hs 23;" f _unFBO src/Shader/Data.hs 57;" f _unNInt src/NewInt.hs 16;" f _unNIntMap src/NewInt.hs 22;" f _unNIntSet src/NewInt.hs 19;" f -_unPrimitiveMode src/Shader/Data.hs 105;" f +_unPrimitiveMode src/Shader/Data.hs 110;" f _unPutCrit src/Dodge/Data/GenWorld.hs 32;" f _unST src/Dodge/Data/MetaTree.hs 20;" f _unTO src/Shader/Data.hs 59;" f @@ -2401,9 +2403,8 @@ _vaType src/Shader/Data.hs 68;" f _vaoName src/Shader/Data.hs 64;" f _vboName src/Shader/Data.hs 80;" f _vboPtr src/Shader/Data.hs 81;" f -_vboShapes src/Data/Preload/Render.hs 52;" f +_vboShapes src/Data/Preload/Render.hs 49;" f _vboVertexBytes src/Shader/Data.hs 82;" f -_vboWindows src/Data/Preload/Render.hs 51;" f _vcCoolDown src/Dodge/Data/Creature/Misc.hs 22;" f _vcMaxCoolDown src/Dodge/Data/Creature/Misc.hs 21;" f _vertices src/Polyhedra/Data.hs 22;" f @@ -2425,15 +2426,13 @@ _wTime src/Dodge/Data/Item/Params.hs 20;" f _waitThenAction src/Dodge/Data/ActionPlan.hs 76;" f _waitThenTimer src/Dodge/Data/ActionPlan.hs 75;" f _wallDamages src/Dodge/Data/LWorld.hs 119;" f -_wallSSBO src/Data/Preload/Render.hs 46;" f -_wallShader src/Data/Preload/Render.hs 58;" f -_wallVBO src/Data/Preload/Render.hs 57;" f +_wallVBO src/Data/Preload/Render.hs 55;" f _walls src/Dodge/Data/LWorld.hs 118;" f _wanID src/Dodge/Data/LWorld.hs 158;" f _wanPos src/Dodge/Data/LWorld.hs 157;" f _warmMax src/Dodge/Data/TriggerType.hs 19;" f _warmStart src/Dodge/Data/TriggerType.hs 15;" f -_winSSBO src/Data/Preload/Render.hs 45;" f +_winVBO src/Data/Preload/Render.hs 54;" f _windowPosX src/Dodge/Data/Config.hs 53;" f _windowPosY src/Dodge/Data/Config.hs 54;" f _windowPullShader src/Data/Preload/Render.hs 21;" f @@ -2592,7 +2591,7 @@ attachOnward src/Dodge/Tree/Compose.hs 95;" f attachOnward' src/Dodge/Tree/Compose.hs 98;" f attachTree src/Dodge/Tree/Compose.hs 38;" f attentionViewPoint src/Dodge/Creature/ReaderUpdate.hs 75;" f -attribSize src/Shader/Compile.hs 312;" f +attribSize src/Shader/Compile.hs 310;" f autoAmr src/Dodge/Item/Held/Rod.hs 39;" f autoBS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 488;" f autoCrit src/Dodge/Creature/AutoCrit.hs 10;" f @@ -2702,9 +2701,9 @@ 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 496;" f +bufferPerspectiveMatrixUBO src/Dodge/Render.hs 471;" f bufferPokedVBO src/Shader/Bind.hs 19;" f -bufferShaderLayers src/Shader/Bind.hs 36;" f +bufferShaderLayers src/Shader/Bind.hs 32;" f bulletBeltBracer src/Dodge/Item/Equipment.hs 67;" f bulletBeltPack src/Dodge/Item/Equipment.hs 61;" f bulletModule src/Dodge/Item/Scope.hs 117;" f @@ -2758,7 +2757,7 @@ checkConnection src/Dodge/Inventory/Swap.hs 66;" f checkDeath src/Dodge/Creature/Update.hs 70;" f checkDeath' src/Dodge/Creature/Update.hs 73;" f checkEndGame src/Dodge/Update.hs 766;" f -checkErrorGL src/Shader/Compile.hs 261;" f +checkErrorGL src/Shader/Compile.hs 259;" f checkFBO src/Framebuffer/Check.hs 6;" f checkGLError src/GLHelp.hs 14;" f checkInvSlotsYou src/Dodge/Inventory/CheckSlots.hs 18;" f @@ -2795,7 +2794,6 @@ clang2S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 676;" f clangS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 542;" f cldtPropagateFold src/Dodge/DoubleTree.hs 358;" f cleanUpPreload src/Preload.hs 10;" f -cleanUpRenderPreload src/Preload/Render.hs 276;" f cleanUpSoundPreload src/Preload.hs 15;" f cleanupHalted src/Sound.hs 117;" f cleatLabel src/Dodge/Cleat.hs 30;" f @@ -2860,7 +2858,7 @@ compP2A src/Dodge/ShiftPoint.hs 11;" f compactDraw src/Dodge/LevelGen.hs 94;" f compactDraw' src/Dodge/LevelGen.hs 105;" f compactDrawTree src/Dodge/LevelGen.hs 88;" f -compileAndCheckShader src/Shader/Compile.hs 283;" f +compileAndCheckShader src/Shader/Compile.hs 281;" f composeNode src/Dodge/Tree/Compose.hs 76;" f composeTree src/Dodge/Tree/Compose.hs 47;" f computerBeepingS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 640;" f @@ -2881,7 +2879,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 253;" f +cornerList src/Preload/Render.hs 245;" f corpseOrGib src/Dodge/Creature/Update.hs 111;" f corridor src/Dodge/Room/Corridor.hs 17;" f corridorBoss src/Dodge/LockAndKey.hs 133;" f @@ -3508,7 +3506,7 @@ forceSpine src/StrictHelp.hs 4;" f fourEmbossDecoration src/Dodge/Placement/TopDecoration.hs 29;" f fpsText src/Dodge/Render/Picture.hs 59;" f fractionLoadedAmmo src/Dodge/Item/Draw/SPic.hs 145;" f -frag src/Shader/Data.hs 108;" f +frag src/Shader/Data.hs 113;" f freeShaderPointers' src/Shader.hs 37;" f fridgeHumS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 500;" f fromJust' src/MaybeHelp.hs 22;" f @@ -3538,7 +3536,7 @@ generateGraphs src/Dodge/Menu.hs 149;" f generateLayout src/Dodge/Layout/Generate.hs 10;" f generateLevelFromRoomList src/Dodge/Layout.hs 35;" f generateWorldFromSeed src/Dodge/LevelGen.hs 17;" f -geom src/Shader/Data.hs 108;" f +geom src/Shader/Data.hs 113;" f geometryQuickCheckTests test/Spec.hs 55;" f geometryTests test/Spec.hs 17;" f geometryUnitTests test/Spec.hs 22;" f @@ -3557,7 +3555,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 502;" f +getDistortions src/Dodge/Render.hs 477;" f getEdgesCrossing src/Dodge/Path.hs 37;" f getGrenadeHitEffect src/Dodge/HeldUse.hs 1264;" f getInventoryPath src/Dodge/Inventory/Path.hs 9;" f @@ -3708,7 +3706,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 271;" f +initializeGLState src/Preload/Render.hs 263;" f initializeOptionMenu src/Dodge/Menu/Option.hs 17;" f initializeOptionMenuBO src/Dodge/Menu/Option.hs 30;" f initializeTexture2D src/Framebuffer/Update.hs 205;" f @@ -4053,7 +4051,7 @@ makePathUsing src/Dodge/Path.hs 51;" f makePoisonExplosionAt src/Dodge/WorldEvent/Explosion.hs 24;" f makeSelectionListPictures src/Dodge/Render/List.hs 66;" f makeShaderEBO src/Shader/Compile.hs 53;" f -makeShaderProgram src/Shader/Compile.hs 247;" f +makeShaderProgram src/Shader/Compile.hs 245;" f makeShaderUsingVAO src/Shader/Compile.hs 150;" f makeShaderUsingVBO src/Shader/Compile.hs 69;" f makeShaderVBO src/Shader/Compile.hs 32;" f @@ -4362,16 +4360,16 @@ playSoundAndUpdate src/Sound.hs 54;" f playSoundQueue src/Sound.hs 132;" f playSoundUnlessRewinding appDodge/Main.hs 118;" f plusDecoration src/Dodge/Placement/TopDecoration.hs 35;" f -pmLineLoop src/Shader/Data.hs 113;" f -pmLineStrip src/Shader/Data.hs 113;" f -pmLines src/Shader/Data.hs 113;" f -pmLinesAdjacency src/Shader/Data.hs 113;" f -pmPatches src/Shader/Data.hs 113;" f -pmPoints src/Shader/Data.hs 113;" f -pmQuads src/Shader/Data.hs 113;" f -pmTriangleFan src/Shader/Data.hs 113;" f -pmTriangleStrip src/Shader/Data.hs 113;" f -pmTriangles src/Shader/Data.hs 113;" f +pmLineLoop src/Shader/Data.hs 118;" f +pmLineStrip src/Shader/Data.hs 118;" f +pmLines src/Shader/Data.hs 118;" f +pmLinesAdjacency src/Shader/Data.hs 118;" f +pmPatches src/Shader/Data.hs 118;" f +pmPoints src/Shader/Data.hs 118;" f +pmQuads src/Shader/Data.hs 118;" f +pmTriangleFan src/Shader/Data.hs 118;" f +pmTriangleStrip src/Shader/Data.hs 118;" f +pmTriangles src/Shader/Data.hs 118;" f pnZoneSize src/Dodge/Zoning/Pathing.hs 26;" f pointIfNotClose src/Dodge/LevelGen/StaticWalls/Deprecated.hs 68;" f pointInCircle src/Geometry.hs 209;" f @@ -4814,7 +4812,7 @@ setRBCreatureTargeting src/Dodge/Creature/State.hs 290;" f setRoomInt src/Dodge/Room/Tutorial.hs 91;" f setSelWhileDragging src/Dodge/Update/Input/InGame.hs 337;" f setSelectionListRestriction src/Dodge/Update/Input/ScreenLayer.hs 87;" f -setShaderSource src/Shader/Compile.hs 296;" f +setShaderSource src/Shader/Compile.hs 294;" f setShadowLimits src/Dodge/Shadows.hs 11;" f setSoundVolume src/Sound.hs 157;" f setTargetMv src/Dodge/Creature/ReaderUpdate.hs 83;" f @@ -4823,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 507;" f +setViewport src/Dodge/Render.hs 482;" f setVol src/Dodge/Config.hs 47;" f setWristShieldPos src/Dodge/Equipment.hs 49;" f setWristShieldPos src/Dodge/Euse.hs 38;" f @@ -4839,9 +4837,9 @@ setupStaticVBOVAO src/Shader/Compile.hs 102;" f setupVAOUsingVBO src/Shader/Compile.hs 183;" f setupVBO src/Shader/Compile.hs 83;" f setupVBOStatic src/Shader/Compile.hs 118;" f -setupVBOVAO src/Shader/Compile.hs 206;" f -setupVertexAttribPointer src/Shader/Compile.hs 230;" f -setupVertexAttribs src/Shader/Compile.hs 224;" f +setupVBOVAO src/Shader/Compile.hs 204;" f +setupVertexAttribPointer src/Shader/Compile.hs 228;" f +setupVertexAttribs src/Shader/Compile.hs 222;" f setupWorldBounds src/Dodge/Layout.hs 116;" f sfInvColor src/Dodge/Item/InventoryColor.hs 12;" f shadVBOptr src/Shader.hs 40;" f @@ -5157,7 +5155,7 @@ toBinary src/Dodge/Inventory/SelectionList.hs 141;" f toBothLnk src/Dodge/RoomLink.hs 136;" f toClosestMultiple src/HelpNum.hs 3;" f toColor8 src/Color.hs 148;" f -toFloatVAs src/Shader/Compile.hs 217;" f +toFloatVAs src/Shader/Compile.hs 215;" f toLabel src/Dodge/Cleat.hs 16;" f toMultiset src/Multiset.hs 64;" f toOnward src/Dodge/Tree/Compose.hs 101;" f @@ -5455,10 +5453,10 @@ vShape src/Dodge/Placement/Instance/LightSource.hs 93;" f vToL src/MatrixHelper.hs 56;" f vToQuat src/Quaternion.hs 42;" f validTerminalCommands src/Dodge/Debug/Terminal.hs 137;" f -vasTightStride src/Shader/Compile.hs 303;" f +vasTightStride src/Shader/Compile.hs 301;" f vecBetweenSpeed src/Dodge/Base.hs 146;" f vecTurnTo src/Dodge/Movement/Turn.hs 19;" f -vert src/Shader/Data.hs 108;" f +vert src/Shader/Data.hs 113;" f vertScale src/MatrixHelper.hs 95;" f vertTrans src/MatrixHelper.hs 103;" f verticalPipe src/Dodge/Picture.hs 19;" f @@ -5523,7 +5521,7 @@ windowLine src/Dodge/Placement/Instance/Wall.hs 59;" f windowXFloat src/Dodge/Data/Config.hs 61;" f windowYFloat src/Dodge/Data/Config.hs 63;" f withAlpha src/Color.hs 10;" f -withByteString src/Shader/Compile.hs 330;" f +withByteString src/Shader/Compile.hs 328;" f wlIXsNearCirc src/Dodge/Zoning/Wall.hs 32;" f wlIXsNearPoint src/Dodge/Zoning/Wall.hs 22;" f wlIXsNearRect src/Dodge/Zoning/Wall.hs 29;" f