From ce4c3bd231eb8b7ba47fb4d9095d3b071189514e Mon Sep 17 00:00:00 2001 From: justin Date: Wed, 1 Sep 2021 13:13:10 +0100 Subject: [PATCH] Tweak window rendering --- src/Data/Preload/Render.hs | 1 + src/Dodge/Render.hs | 16 ++++++++-------- src/Dodge/Update.hs | 2 +- src/Dodge/WorldEvent/SpawnParticle.hs | 3 +-- src/Preload/Render.hs | 16 ++++++++++++++++ 5 files changed, 27 insertions(+), 11 deletions(-) diff --git a/src/Data/Preload/Render.hs b/src/Data/Preload/Render.hs index afc8be17d..39da1d0e7 100644 --- a/src/Data/Preload/Render.hs +++ b/src/Data/Preload/Render.hs @@ -18,6 +18,7 @@ data RenderData = RenderData , _lightingLineShadowShader :: FullShader , _lightingCapShader :: FullShader , _wallBlankShader :: FullShader + , _windowShader :: FullShader , _wallTextureShader :: FullShader , _textureArrayShader :: FullShader , _fullscreenShader :: FullShader diff --git a/src/Dodge/Render.hs b/src/Dodge/Render.hs index 3e4fa9a9f..f812408be 100644 --- a/src/Dodge/Render.hs +++ b/src/Dodge/Render.hs @@ -139,7 +139,7 @@ doDrawing pdata w = do drawBuffers $= [FBOColorAttachment 0,NoBuffers] clear [ColorBuffer] renderLayer 2 shadV layerCounts - --renderWindows pdata windowPoints + renderWindows pdata windowPoints ----render transparency depths depthMask $= Enabled @@ -148,7 +148,7 @@ doDrawing pdata w = do clearColor $= Color4 0 0 0 0 clear [ColorBuffer] renderLayer 2 shadV layerCounts - --renderWindows pdata windowPoints + renderWindows pdata windowPoints depthMask $= Disabled blend $= Enabled @@ -244,12 +244,12 @@ renderWindows -> [((Point2,Point2),Point4)] -- ^ List: wall positions and color -> IO () renderWindows pdata wps = do - n <- poke224s (shadVBOptr $ _wallBlankShader pdata) wps - bindShaderBuffers [_wallBlankShader pdata] [n] - currentProgram $= Just (_shaderProgram $ _wallBlankShader pdata) - cullFace $= Just Back - drawShader (_wallBlankShader pdata) n - cullFace $= Nothing + n <- poke224s (shadVBOptr $ _windowShader pdata) wps + bindShaderBuffers [_windowShader pdata] [n] + currentProgram $= Just (_shaderProgram $ _windowShader pdata) + --cullFace $= Just Back + drawShader (_windowShader pdata) n + --cullFace $= Nothing renderTextureWalls :: RenderData diff --git a/src/Dodge/Update.hs b/src/Dodge/Update.hs index be07db4d2..4f0ce5cba 100644 --- a/src/Dodge/Update.hs +++ b/src/Dodge/Update.hs @@ -184,7 +184,7 @@ updateCloud w c & clTimer -~ 1 ) where - newVel@(V3 _ _ nvz) = (0.95 *.*.* springVels) +.+.+ (V3 0 0 (0.01 * vertVel)) + newVel@(V3 _ _ nvz) = (0.95 *.*.* springVels) +.+.+ (V3 0 0 (0.001 * vertVel)) newVel2 = stripZ newVel vertVel = _clAlt c - opz springVels = foldl' (clClSpringVel c) (_clVel c) (cloudsNearPoint oldPos2 w) diff --git a/src/Dodge/WorldEvent/SpawnParticle.hs b/src/Dodge/WorldEvent/SpawnParticle.hs index c1c150614..493b4d0e3 100644 --- a/src/Dodge/WorldEvent/SpawnParticle.hs +++ b/src/Dodge/WorldEvent/SpawnParticle.hs @@ -82,7 +82,6 @@ drawFlame rotd pt = thePic prot p' = p' +.+ rotateV (fromIntegral time) (V2 0 1) prot2 p' = p' +.+ rotateV (negate $ fromIntegral time) (V2 0 1) prot3 p' = p' +.+ rotateV (2 + fromIntegral time * 0.1) (V2 0 2) - {- TODO: add generalised area damage particles/hiteffects. -} moveFlame :: Point2 -- ^ Rotation direction @@ -132,7 +131,7 @@ moveFlame rotd w pt pOut p = p +.+ safeNormalizeV (sp -.- p) reflV wall = (0.3 *.* reflectIn (uncurry (-.-) . swap $ _wlLine wall) vel ) +.+ (0.2 *.* vel) - smokeCol = fst $ randomR (0.2,0.5) (_randGen w) + smokeCol = fst $ randomR (0.5,0.8) (_randGen w) smokeGen = makeFlamerSmokeAt smokeCol (addZ 20 ep) makeFlameletTimed diff --git a/src/Preload/Render.hs b/src/Preload/Render.hs index 27c92fd12..f8263c863 100644 --- a/src/Preload/Render.hs +++ b/src/Preload/Render.hs @@ -51,6 +51,21 @@ preloadRender = do setupVertexAttribPointer 1 4 8 4 let wpVAO = VAO {_vao = wpVAOname, _vaoVBO = wpVBO} wpColVAO = VAO {_vao = wpColVAOname, _vaoVBO = wpVBO} + -- setup window points VBO, VAOs and shaders + winVBOname <- genObjectName + winVBOptr <- mallocArray (8 * numDrawableWalls) + bindBuffer ArrayBuffer $= Just winVBOname + bufferData ArrayBuffer $= + (fromIntegral $ floatSize * numDrawableWalls * 8 + , nullPtr + , DynamicDraw + ) + let winVBO = VBO {_vbo = winVBOname, _vboPtr = winVBOptr, _vboAttribSizes = [4,4], _vboStride = 8} + winColVAOname <- genObjectName + bindVertexArrayObject $= Just winColVAOname + setupVertexAttribPointer 0 4 8 0 + setupVertexAttribPointer 1 4 8 4 + let winColVAO = VAO {_vao = winColVAOname, _vaoVBO = winVBO} -- lighting shaders wsShad <- makeShader "lighting/occlude" [vert,geom,frag] [4] EPoints >>= addUniforms ["lightPos"] @@ -142,6 +157,7 @@ preloadRender = do --, _lightingWallShader = wlLightShad {_shaderVAO = wpVAO} , _wallBlankShader = wlBlank { _shaderVAO = wpColVAO } , _wallTextureShader = wlTexture { _shaderVAO = wpColVAO } + , _windowShader = wlBlank { _shaderVAO = winColVAO } , _textureArrayShader = textArrayShad , _fullscreenShader = fsShad , _fullLightingShader = fullLightingShad