From cdf998a1e23b3ec1db492a5a1b05583adeaf99f9 Mon Sep 17 00:00:00 2001 From: justin Date: Wed, 12 Nov 2025 21:37:28 +0000 Subject: [PATCH] Start cleanup of shader records --- src/Data/Preload/Render.hs | 2 +- src/Dodge/Render.hs | 2 - src/Preload/Render.hs | 23 +++-------- src/Render.hs | 9 ++--- src/Shader/Compile.hs | 80 +++++++++++++++++++++----------------- 5 files changed, 55 insertions(+), 61 deletions(-) diff --git a/src/Data/Preload/Render.hs b/src/Data/Preload/Render.hs index 8f504817e..7719986e7 100644 --- a/src/Data/Preload/Render.hs +++ b/src/Data/Preload/Render.hs @@ -11,7 +11,7 @@ import Graphics.GL.Core45 import Shader.Data data RenderData = RenderData - { _lightingWallShadShader :: Shader + { _shadWallShader :: GLuint , _lightingLineShadowShader :: Shader , _lightingCapShader :: Shader , _lightingTextureShader :: Shader diff --git a/src/Dodge/Render.hs b/src/Dodge/Render.hs index 7f20aead9..66f5eecd1 100644 --- a/src/Dodge/Render.hs +++ b/src/Dodge/Render.hs @@ -122,7 +122,6 @@ doDrawing' win pdata u = do glCullFace GL_BACK unless (debugOn Remove_LOS cfig) $ do glUseProgram (pdata ^. ceilingStencilShader . shaderUINT) - -- glBindVertexArray $ pdata ^. ceilingStencilShader . shaderVAO . vaoName glBindVertexArray $ pdata ^. dummyVAO . vaoName glEnable GL_DEPTH_CLAMP glDrawArrays @@ -368,7 +367,6 @@ doDrawing' win pdata u = do glUseProgram $ pdata ^. windowPullShader . shaderUINT glBindVertexArray $ pdata ^. dummyVAO . vaoName glDrawArrays GL_TRIANGLES 0 (fromIntegral nWins * 6) - --drawShader (_windowShader pdata) nWins glDisable GL_DEPTH_CLAMP glDisable GL_CULL_FACE glInvalidateBufferData (pdata ^. vboShapes . vboName) diff --git a/src/Preload/Render.hs b/src/Preload/Render.hs index a806511d0..2433d7dad 100644 --- a/src/Preload/Render.hs +++ b/src/Preload/Render.hs @@ -95,8 +95,7 @@ preloadRender = do cloudshader <- makeShaderUsingVAO "pull/cloud" [vert, frag] pmTriangles (VAO dummyvao) putStrLn "Setup lighting shaders" - lightingWallShadShad <- - makeShaderUsingVAO "lighting/wallShadow" [vert] pmTriangles (VAO dummyvao) + shadwallshader <- makeSourcedShader "lighting/wallShadow" [vert] lightingCapShad <- makeShaderUsingVAO "lighting/cap" [vert] pmTriangles (VAO dummyvao) lightingLineShadowShad <- @@ -199,10 +198,9 @@ preloadRender = do , _silhouetteEBO = UintBO ieshapessbo ieptr , _lightingCapShader = lightingCapShad , _lightingLineShadowShader = lightingLineShadowShad - , _lightingWallShadShader = lightingWallShadShad + , _shadWallShader = shadwallshader , _ceilingStencilShader = ceilingstencilshader - , -- , _windowShader = windowshader - _windowPullShader = winpull + , _windowPullShader = winpull , _pullWallShader = wallpull , _fullscreenShader = fsShad , _transparencyCompShader = transcompshader @@ -224,25 +222,16 @@ preloadRender = do , _fboPos = fboPosName , _rboBaseBloom = rboBaseBloomName , _matUBO = theUBO - , -- , _winSSBO = winssbo - -- , _wallSSBO = wallssbo - -- , _shapeSSBO = shapessbo - -- , _ishapeSSBO = ishapessbo - -- , _ieshapeSSBO = ieshapessbo - -- , _lightsUBO = lightsubo - -- , _vboWindows = winvbo - _vboShapes = shVBO + , _vboShapes = shVBO , _floorVBO = floorvbo , _floorShader = floorshader , _chasmVBO = chasmvbo , _chasmShader = chasmshader , _wallVBO = wallvbo , _winVBO = winvbo - , -- , _wallShader = wallshader - _cloudVBO = cloudvbo + , _cloudVBO = cloudvbo , _cloudShader = cloudshader - , -- , _cloudEBO = cloudebo - _screenTextureVAO = screentexturevao + , _screenTextureVAO = screentexturevao , _dummyVAO = VAO dummyvao } diff --git a/src/Render.hs b/src/Render.hs index 5f8836e0b..bdfe5855c 100644 --- a/src/Render.hs +++ b/src/Render.hs @@ -133,7 +133,7 @@ renderShadows shadrendertype nWalls nSils nCaps positiontexture normaltexture li glBindFramebuffer GL_FRAMEBUFFER $ pdata ^. fboLighting . _1 . unFBO let llinesShad = _lightingLineShadowShader pdata lcapShad = _lightingCapShader pdata - lwallShad = _lightingWallShadShader pdata + shadwall = _shadWallShader pdata ltextShad = _lightingTextureShader pdata -- we assume that the renderbuffer's depth has been correctly set elsewhere -- we will not be changing that here @@ -173,15 +173,12 @@ renderShadows shadrendertype nWalls nSils nCaps positiontexture normaltexture li -- the first bit has been used to stencil out "ceilings" under which we never draw glStencilFunc GL_NOTEQUAL 128 255 --draw wall shadows - glUseProgram (_shaderUINT lwallShad) + glUseProgram shadwall glUniform3f 0 x y z glUniform1f 1 rad --glBindVertexArray $ lwallShad ^. shaderVAO . vaoName -- Just (_vao $ _shadVAO lwallShad) glBindVertexArray $ pdata ^. dummyVAO . vaoName -- Just (_vao $ _shadVAO lwallShad) - glDrawArrays - (_unPrimitiveMode $ _shaderPrimitive lwallShad) - 0 - (nWalls * 18) + glDrawArrays GL_TRIANGLES 0 (nWalls * 18) case shadrendertype of GeoObjShads -> do --draw silhouette shadows diff --git a/src/Shader/Compile.hs b/src/Shader/Compile.hs index 43abca32d..2ff76a271 100644 --- a/src/Shader/Compile.hs +++ b/src/Shader/Compile.hs @@ -9,19 +9,20 @@ module Shader.Compile ( setupVAOUsingVBO, setupEBO, toFloatVAs, - setupStaticVBOVAO + setupStaticVBOVAO, + makeSourcedShader, ) where -import Foreign.C.Types -import Graphics.GL.Types import Control.Lens import Control.Monad import qualified Data.ByteString as BS import qualified Data.ByteString.Unsafe as BU import Foreign import Foreign.C.String +import Foreign.C.Types import GLHelp import Graphics.GL.Core45 +import Graphics.GL.Types import Shader.Data import Shader.Parameters @@ -90,7 +91,7 @@ setupVBO vertexsize = do glNamedBufferStorage vboname (fromIntegral $ floatSize * numDrawableVertices * vertexsize) --- (fromIntegral $ numDrawableVertices * vertexsize) + -- (fromIntegral $ numDrawableVertices * vertexsize) nullPtr --GL_STREAM_DRAW GL_DYNAMIC_STORAGE_BIT @@ -99,7 +100,7 @@ setupVBO vertexsize = do -- the input ptr is assumed to contain the correct amount of data according to -- the specified number and type of vertices -- note the VBO here does not have a sensible ptr value -setupStaticVBOVAO :: Storable a => [VertexAttribute] -> [a] -> IO (VBO,VAO) +setupStaticVBOVAO :: Storable a => [VertexAttribute] -> [a] -> IO (VBO, VAO) setupStaticVBOVAO vas vdata = withArrayLen vdata $ \i ptr -> do vboname <- mglCreate glCreateBuffers glNamedBufferStorage @@ -107,13 +108,14 @@ setupStaticVBOVAO vas vdata = withArrayLen vdata $ \i ptr -> do (CPtrdiff (fromIntegral (i * sizeOf (head vdata)))) ptr 0 - let vbo = VBO - { _vboName = vboname - , _vboPtr = nullPtr - , _vboVertexBytes = vasTightStride vas - } + let vbo = + VBO + { _vboName = vboname + , _vboPtr = nullPtr + , _vboVertexBytes = vasTightStride vas + } vao <- setupVAOUsingVBO vas vbo - return (vbo,vao) + return (vbo, vao) setupVBOStatic :: Int -> IO VBO setupVBOStatic vertexsize = do @@ -126,7 +128,7 @@ setupVBOStatic vertexsize = do (fromIntegral $ numDrawableVertices * vertexsize) nullPtr GL_DYNAMIC_STORAGE_BIT - --GL_STATIC_DRAW + --GL_STATIC_DRAW return VBO{_vboName = vboname, _vboPtr = thePtr, _vboVertexBytes = vertexsize} makeByteStringShaderUsingVAO :: @@ -185,13 +187,16 @@ setupVAOUsingVBO vas vbo = do let strd = vbo ^. vboVertexBytes vaoname <- mglCreate glCreateVertexArrays glBindVertexArray vaoname - setupVertexAttribs (vbo ^. vboName) vaoname vas + setupVertexAttribs + (vbo ^. vboName) + vaoname + vas (fromIntegral strd) return VAO{_vaoName = vaoname} setupEBO :: VAO -> IO UintBO setupEBO vao = do - eboptr <- mallocArray 65536 -- so we can go back to glushort... + eboptr <- mallocArray 65536 -- so we can go back to glushort... eboname <- mglCreate glCreateBuffers glNamedBufferStorage eboname @@ -208,7 +213,7 @@ setupVBOVAO vas = do vbo <- setupVBO strd --vao <- setupVAOvbo (toFloatVAs sizes) (sum sizes) (vbo ^. vboName) vao <- setupVAOUsingVBO vas vbo - return (vao,vbo) + return (vao, vbo) where strd = vasTightStride vas @@ -216,13 +221,14 @@ toFloatVAs :: [Int] -> [VertexAttribute] toFloatVAs = go 0 where go _ [] = [] - go x (i:is) = VertexAttribute (fromIntegral i) GL_FLOAT GL_FALSE x - : go (x + fromIntegral floatSize*fromIntegral i) is + go x (i : is) = + 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 + zipWithM_ (setupVertexAttribPointer vao) [0 ..] vas -- | Assumes the correct VBO is bound setupVertexAttribPointer :: @@ -233,7 +239,9 @@ setupVertexAttribPointer :: IO () setupVertexAttribPointer vao loc va = do glEnableVertexArrayAttrib vao loc' - glVertexArrayAttribFormat vao loc' + glVertexArrayAttribFormat + vao + loc' (va ^. vaCount) (va ^. vaType) (va ^. vaNormalize) @@ -302,26 +310,28 @@ vasTightStride :: [VertexAttribute] -> Int vasTightStride = go 0 where go x [] = x - go x (v:vs) + go x (v : vs) | x /= fromIntegral (v ^. vaOffset) = error "vasTightStride: vertex offset incorrect" - | otherwise = go (x + fromIntegral (v ^. vaCount * fromIntegral (attribSize (v ^. vaType)))) - vs + | otherwise = + go + (x + fromIntegral (v ^. vaCount * fromIntegral (attribSize (v ^. vaType)))) + vs attribSize :: GLenum -> Int attribSize x = case x of - GL_BYTE -> sizeOf (0 :: GLbyte ) - GL_SHORT -> sizeOf (0 :: GLshort) - GL_INT -> sizeOf (0 :: GLint) - GL_FIXED -> sizeOf (0 :: GLfixed) - GL_FLOAT -> sizeOf (0 :: GLfloat) - GL_HALF_FLOAT -> sizeOf (0 :: GLhalf) - GL_DOUBLE -> sizeOf (0 :: GLdouble) - GL_UNSIGNED_BYTE -> sizeOf (0 :: GLubyte) - GL_UNSIGNED_SHORT -> sizeOf (0 :: GLushort) - GL_UNSIGNED_INT -> sizeOf (0 :: GLuint) --- GL_INT_2_10_10_10_REV -> sizeOf (0 :: GL_INT_2_10_10_10_REV) --- GL_UNSIGNED_INT_2_10_10_10_REV -> sizeOf (0 :: GL_UNSIGNED_INT_2_10_10_10_REV) --- GL_UNSIGNED_INT_10F_11F_11F_REV -> sizeOf (0 :: GL_UNSIGNED_INT_10F_11F_11F_REV) + GL_BYTE -> sizeOf (0 :: GLbyte) + GL_SHORT -> sizeOf (0 :: GLshort) + GL_INT -> sizeOf (0 :: GLint) + GL_FIXED -> sizeOf (0 :: GLfixed) + GL_FLOAT -> sizeOf (0 :: GLfloat) + GL_HALF_FLOAT -> sizeOf (0 :: GLhalf) + GL_DOUBLE -> sizeOf (0 :: GLdouble) + GL_UNSIGNED_BYTE -> sizeOf (0 :: GLubyte) + GL_UNSIGNED_SHORT -> sizeOf (0 :: GLushort) + GL_UNSIGNED_INT -> sizeOf (0 :: GLuint) + -- GL_INT_2_10_10_10_REV -> sizeOf (0 :: GL_INT_2_10_10_10_REV) + -- GL_UNSIGNED_INT_2_10_10_10_REV -> sizeOf (0 :: GL_UNSIGNED_INT_2_10_10_10_REV) + -- GL_UNSIGNED_INT_10F_11F_11F_REV -> sizeOf (0 :: GL_UNSIGNED_INT_10F_11F_11F_REV) _ -> error "attribSize : unkown GLenum attribute size" -- https://hackage.haskell.org/package/OpenGL-3.0.3.0/docs/src/Graphics.Rendering.OpenGL.GL.ByteString.html#withByteStringP