Tweak clouds

This commit is contained in:
2023-03-20 18:24:07 +00:00
parent 695f849f77
commit 7d0bb7f229
11 changed files with 88 additions and 63 deletions
+5 -2
View File
@@ -11,6 +11,9 @@ void main()
float d = dot(vControls,vControls); float d = dot(vControls,vControls);
if (d > 1) {discard;} if (d > 1) {discard;}
fCol = vCol; fCol = vCol;
fPos = vec4(vPosID.xy, vPosID.z + (1-d) * vCenterSize.w, 1); fPos = vec4(vPosID.xy, vPosID.z + (1-d) * vCenterSize.w, 0.5);
fNorm = vec4(vCenterSize.xyz - fPos.xyz, 1); vec3 fn1 = (1-d)*vec3(vCenterSize.xyz - fPos.xyz);
//vec3 fn1 = vec3(vCenterSize.xyz - fPos.xyz);
fNorm = vec4(0.3*fn1.xy,fn1.z, 0.5);
//fNorm = vec4(0,0,1, 1);
} }
+1 -1
View File
@@ -44,7 +44,7 @@ data RenderData = RenderData
, _fboHalf2 :: (FBO, TO) , _fboHalf2 :: (FBO, TO)
, _fboHalf3 :: (FBO, TO) , _fboHalf3 :: (FBO, TO)
, _fboBase :: (FBO, (TO, TO, TO)) , _fboBase :: (FBO, (TO, TO, TO))
, _fboCloud :: (FBO, (TO, TO)) , _fboCloud :: (FBO, (TO, TO, TO))
, _fboBloom :: (FBO, TO) , _fboBloom :: (FBO, TO)
, _fboPos :: (FBO, TO) , _fboPos :: (FBO, TO)
, _fboLighting :: (FBO, TO) , _fboLighting :: (FBO, TO)
-1
View File
@@ -86,7 +86,6 @@ data ResFactor = FullRes | HalfRes | QuarterRes
data ObjectShadows = GeoObjShads data ObjectShadows = GeoObjShads
| InstancingShads | InstancingShads
| CPUObjShads
| NoObjShads | NoObjShads
| NoShadows | NoShadows
| NoLighting | NoLighting
+7
View File
@@ -2,8 +2,15 @@ module Dodge.Event.Test (
testEvent, testEvent,
) where ) where
import Dodge.SoundLogic.ExternallyGeneratedSounds
import Dodge.Data.World import Dodge.Data.World
import Control.Lens
import Geometry
testEvent :: World -> World testEvent :: World -> World
testEvent w = w testEvent w = w
& cWorld . lWorld . worldEvents .~ SoundStart BackgroundSound (V2 0 0) foamSprayFadeOutS Nothing :
[MakeStartCloudAt (V3 (cx + x) (cy + y) 5) | x <- [-5, -4 .. 5], y <- [-5, -4 .. 5]]
where
V2 cx cy = w ^?! cWorld . lWorld . creatures . ix 0 . crPos
+53 -32
View File
@@ -132,7 +132,6 @@ doDrawing' win pdata u = do
GL_DEPTH GL_DEPTH
0 0
ptr ptr
glDepthFunc GL_LESS glDepthFunc GL_LESS
-- draw wall occlusions from the camera's point of view -- draw wall occlusions from the camera's point of view
glUseProgram (pdata ^. lightingWallShadShader . shadName) glUseProgram (pdata ^. lightingWallShadShader . shadName)
@@ -203,7 +202,7 @@ doDrawing' win pdata u = do
nIndices nIndices
(u ^. uvConfig . graphics_object_shadows) (u ^. uvConfig . graphics_object_shadows)
(pdata ^. fboBase . _2 . _2) (pdata ^. fboBase . _2 . _2)
(drawCPUShadows pdata ws) (pdata ^. fboBase . _2 . _3)
glColorMask GL_TRUE GL_TRUE GL_TRUE GL_TRUE glColorMask GL_TRUE GL_TRUE GL_TRUE GL_TRUE
--apply lightmap to base buffer --apply lightmap to base buffer
glBindFramebuffer GL_FRAMEBUFFER (pdata ^. fboBase . _1 . unFBO) glBindFramebuffer GL_FRAMEBUFFER (pdata ^. fboBase . _1 . unFBO)
@@ -250,36 +249,58 @@ doDrawing' win pdata u = do
GL_COLOR GL_COLOR
0 0
ptr ptr
renderLayer MidLayer shadV layerCounts -- renderLayer MidLayer shadV layerCounts
-- glUseProgram (pdata ^. cloudShader . shaderUINT) glUseProgram (pdata ^. cloudShader . shaderUINT)
-- glBindVertexArray $ pdata ^. cloudShader . shaderVAO . vaoName glBindVertexArray $ pdata ^. cloudShader . shaderVAO . vaoName
-- glDrawElements glDrawElements
-- (pdata ^. cloudShader . shaderPrimitive) (pdata ^. cloudShader . shaderPrimitive)
-- (fromIntegral nCloudIs) (fromIntegral nCloudIs)
-- GL_UNSIGNED_SHORT GL_UNSIGNED_SHORT
-- nullPtr nullPtr
drawShader (_windowShader pdata) nWins drawShader (_windowShader pdata) nWins
-- when (_graphics_cloud_shadows cfig) $ do when (_graphics_cloud_shadows cfig) $ do
-- ----render transparency depths ----render transparency depths
-- glDepthMask GL_TRUE glDepthMask GL_TRUE
-- glDisable GL_BLEND glDepthFunc GL_ALWAYS
-- withArray [GL_NONE, GL_COLOR_ATTACHMENT1] $ \ptr -> glDrawBuffers 2 ptr glDisable GL_BLEND
-- renderLayer MidLayer shadV layerCounts withArray [GL_NONE, GL_COLOR_ATTACHMENT1, GL_COLOR_ATTACHMENT2] $ \ptr -> glDrawBuffers 3 ptr
-- drawShader (_windowShader pdata) nWins withArray [0,0,0,0] $ \ptr -> glClearNamedFramebufferfv
-- ----draw lightmap for cloud buffer (pdata ^. fboCloud . _1 . unFBO)
-- glDepthMask GL_FALSE GL_COLOR
-- glEnable GL_BLEND 1
-- glBindFramebuffer GL_FRAMEBUFFER (_unFBO (fst (_fboLighting pdata))) ptr
-- createLightMap withArray [0,0,0,0] $ \ptr -> glClearNamedFramebufferfv
-- cfig (pdata ^. fboCloud . _1 . unFBO)
-- pdata GL_COLOR
-- lightPoints 2
-- nWalls ptr
-- nSilIndices glEnable GL_BLEND
-- nIndices glBlendColor 0.5 0.5 0.5 0.5
-- (_graphics_object_shadows $ _uvConfig u) glBlendFunci 1 GL_ONE_MINUS_DST_ALPHA GL_DST_ALPHA
-- (snd $ snd $ _fboCloud pdata) glBlendFunci 2 GL_ONE GL_ONE
-- (drawCPUShadows pdata ws) glUseProgram (pdata ^. cloudShader . shaderUINT)
glBindVertexArray $ pdata ^. cloudShader . shaderVAO . vaoName
glDrawElements
(pdata ^. cloudShader . shaderPrimitive)
(fromIntegral nCloudIs)
GL_UNSIGNED_SHORT
nullPtr
drawShader (_windowShader pdata) nWins
----draw lightmap for cloud buffer
glDepthMask GL_FALSE
glDepthFunc GL_LEQUAL
glEnable GL_BLEND
glBindFramebuffer GL_FRAMEBUFFER (_unFBO (fst (_fboLighting pdata)))
createLightMap
cfig
pdata
lightPoints
nWalls
nSilIndices
nIndices
(_graphics_object_shadows $ _uvConfig u)
(pdata ^. fboCloud . _2 . _2)
(pdata ^. fboCloud . _2 . _3)
glInvalidateBufferData (pdata ^. vboShapes . vboName) glInvalidateBufferData (pdata ^. vboShapes . vboName)
--apply lightmap to cloud buffer --apply lightmap to cloud buffer
glBindFramebuffer GL_FRAMEBUFFER (_unFBO (fst (_fboCloud pdata))) glBindFramebuffer GL_FRAMEBUFFER (_unFBO (fst (_fboCloud pdata)))
@@ -300,7 +321,7 @@ doDrawing' win pdata u = do
drawShader (fst $ _fullscreenShader pdata) 4 drawShader (fst $ _fullscreenShader pdata) 4
glBlendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA glBlendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
--draw shadowed clouds onto base buffer --draw shadowed clouds onto base buffer
glBindTexture GL_TEXTURE_2D (_unTO . fst . snd $ _fboCloud pdata) glBindTexture GL_TEXTURE_2D (pdata ^. fboCloud . _2 . _1 . unTO)
drawShader (fst $ _fullscreenShader pdata) 4 drawShader (fst $ _fullscreenShader pdata) 4
--set viewport for radial distortion --set viewport for radial distortion
setViewportSize (round winx) (round winy) setViewportSize (round winx) (round winy)
+2 -1
View File
@@ -59,7 +59,8 @@ makeThinSmokeAt :: Point3 -> World -> World
makeThinSmokeAt = makeCloudAt (CloudColor 4 400 (withAlpha 0.05 black)) 5 400 50 makeThinSmokeAt = makeCloudAt (CloudColor 4 400 (withAlpha 0.05 black)) 5 400 50
makeStartCloudAt :: Point3 -> World -> World makeStartCloudAt :: Point3 -> World -> World
makeStartCloudAt = makeCloudAt (CloudColor 2 800 white) 10 400 5 --makeStartCloudAt = makeCloudAt (CloudColor 2 800 white) 10 400 5
makeStartCloudAt = makeCloudAt (CloudColor 2 800 white) 10 400 50
shellTrailCloud :: Point3 -> World -> World shellTrailCloud :: Point3 -> World -> World
shellTrailCloud = makeCloudAt (CloudColor (4 / 3) 800 (greyN 0.5)) 15 400 40 shellTrailCloud = makeCloudAt (CloudColor (4 / 3) 800 (greyN 0.5)) 15 400 40
+2 -5
View File
@@ -30,11 +30,8 @@ sizeFBOs ::
sizeFBOs xsize ysize xfull yfull rdata = do sizeFBOs xsize ysize xfull yfull rdata = do
resizeRBO (_rboBaseBloom rdata) xsize ysize resizeRBO (_rboBaseBloom rdata) xsize ysize
rdata1 <- updateFBOTO3 xsize ysize GL_NEAREST GL_NEAREST GL_RGBA8 GL_RGBA16F GL_RGBA16F rdata fboBase rdata1 <- updateFBOTO3 xsize ysize GL_NEAREST GL_NEAREST GL_RGBA8 GL_RGBA16F GL_RGBA16F rdata fboBase
rdata' <- rdata2 <- updateFBOTO3 xsize ysize GL_NEAREST GL_NEAREST GL_RGBA8 GL_RGBA16F GL_RGBA16F rdata1 fboCloud
foldM (updateFBOTO2 xsize ysize GL_NEAREST GL_NEAREST GL_RGBA8 GL_RGBA16F) rdata1 [fboCloud] rdata' <- updateFBOTO xsize ysize GL_NEAREST GL_NEAREST GL_RGBA8 rdata2 fboLighting
>>= flip
(foldM (updateFBOTO xsize ysize GL_NEAREST GL_NEAREST GL_RGBA8))
[fboLighting]
rdata'' <- rdata'' <-
foldM foldM
(updateFBOTO xsize ysize GL_LINEAR_MIPMAP_LINEAR GL_LINEAR GL_RGBA16F) (updateFBOTO xsize ysize GL_LINEAR_MIPMAP_LINEAR GL_LINEAR GL_RGBA16F)
+8 -15
View File
@@ -76,22 +76,14 @@ preloadRender = do
let winColVAO = VAO let winColVAO = VAO
{_vaoName = winColVAOname} {_vaoName = winColVAOname}
-- setup shape geometry/cap VBO and two VAOs -- setup shape geometry/cap VBO and two VAOs
shEBOptr <- mallocArray numDrawableElements
shEBOname <- mglCreate glCreateBuffers
glNamedBufferData
shEBOname
( fromIntegral $ glushortSize * numDrawableElements)
nullPtr
GL_STREAM_DRAW
let shEBO = EBO{_eboName = shEBOname, _eboPtr = shEBOptr}
shVBO <- setupVBO nShapeVerxComp shVBO <- setupVBO nShapeVerxComp
shPosVAOname <- mglCreate glCreateVertexArrays shPosVAOname <- mglCreate glCreateVertexArrays
glBindVertexArray shPosVAOname glBindVertexArray shPosVAOname
glVertexArrayVertexBuffer shPosVAOname 0 (shVBO ^. vboName) 0 (fromIntegral $ floatSize * nShapeVerxComp) glVertexArrayVertexBuffer shPosVAOname 0 (shVBO ^. vboName) 0 (fromIntegral $ floatSize * nShapeVerxComp)
setupVertexAttribPointer shPosVAOname 0 4 0 setupVertexAttribPointer shPosVAOname 0 4 0
glVertexArrayElementBuffer shPosVAOname shEBOname
let shPosVAO = VAO{_vaoName = shPosVAOname} let shPosVAO = VAO{_vaoName = shPosVAOname}
--setup silhouette edge VAO --setup silhouette edge VAO
shEBO' <- setupEBO shPosVAO
shEdgeVAOname <- mglCreate glCreateVertexArrays shEdgeVAOname <- mglCreate glCreateVertexArrays
glBindVertexArray shEdgeVAOname glBindVertexArray shEdgeVAOname
glVertexArrayVertexBuffer shEdgeVAOname 0 (shVBO ^. vboName) 0 (fromIntegral $ floatSize * nShapeVerxComp) glVertexArrayVertexBuffer shEdgeVAOname 0 (shVBO ^. vboName) 0 (fromIntegral $ floatSize * nShapeVerxComp)
@@ -133,7 +125,8 @@ preloadRender = do
-- 2D draw shaders -- 2D draw shaders
bslist <- makeShader "dualTwoD/basic" [vert, frag] [3, 4] ETriangles bslist <- makeShader "dualTwoD/basic" [vert, frag] [3, 4] ETriangles
bslista <- makeShader4 "shape/basic" [vert, frag] shapeVerxSizes nShapeVerxComp ETriangles shVBO bslista <- makeShader4 "shape/basic" [vert, frag] shapeVerxSizes nShapeVerxComp ETriangles shVBO
glVertexArrayElementBuffer (bslista ^. shadVAO . vaoName) shEBOname glVertexArrayElementBuffer (bslista ^. shadVAO . vaoName) (shEBO' ^. eboName)
--glVertexArrayElementBuffer (bslista ^. shadVAO . vaoName) shEBOname
aslist <- makeShader "dualTwoD/arc" [vert, frag] [3, 4, 3] ETriangles aslist <- makeShader "dualTwoD/arc" [vert, frag] [3, 4, 3] ETriangles
eslist <- makeShader "dualTwoD/ellipse" [vert, geom, frag] [3, 4] ETriangles eslist <- makeShader "dualTwoD/ellipse" [vert, geom, frag] [3, 4] ETriangles
bezierQuadShader <- makeShader "dualTwoD/bezierQuad" [vert, frag] [3, 4, 4] ETriangleStrip bezierQuadShader <- makeShader "dualTwoD/bezierQuad" [vert, frag] [3, 4, 4] ETriangleStrip
@@ -172,9 +165,9 @@ preloadRender = do
let cloudverxsizes = [4,4,4,4] let cloudverxsizes = [4,4,4,4]
cloudvbo <- setupVBO (sum cloudverxsizes) cloudvbo <- setupVBO (sum cloudverxsizes)
(cloudshader, cloudebo) (cloudshader, cloudebo)
<- makeShaderEBO "floor/arrayPos" [vert, frag] cloudverxsizes (sum cloudverxsizes) <- makeShaderEBO "cloud/basic" [vert, frag] cloudverxsizes (sum cloudverxsizes)
GL_TRIANGLES floorvbo GL_TRIANGLES cloudvbo
-- bind fixed vertex data -- bind fixed vertex data
bufferPokedVBO (snd fsShad) 4 bufferPokedVBO (snd fsShad) 4
framebuf2 <- setupTextureFramebuffer 800 600 framebuf2 <- setupTextureFramebuffer 800 600
@@ -188,7 +181,7 @@ preloadRender = do
600 600
fboBaseName <- setupFramebuffer3GivenStencil rboBaseBloomName fboBaseName <- setupFramebuffer3GivenStencil rboBaseBloomName
fboCloudName <- setupFramebuffer2GivenStencil rboBaseBloomName fboCloudName <- setupFramebuffer3GivenStencil rboBaseBloomName
fboBloomName <- setupFramebufferGivenStencil rboBaseBloomName fboBloomName <- setupFramebufferGivenStencil rboBaseBloomName
fboPosName <- setupFramebufferGivenStencil rboBaseBloomName fboPosName <- setupFramebufferGivenStencil rboBaseBloomName
fboLightingName <- setupFramebufferGivenStencil rboBaseBloomName fboLightingName <- setupFramebufferGivenStencil rboBaseBloomName
@@ -218,7 +211,7 @@ preloadRender = do
RenderData RenderData
{ _pictureShaders = shadV { _pictureShaders = shadV
, _shapeShader = bslista -- & shadVAO' .~ shPosColVAO , _shapeShader = bslista -- & shadVAO' .~ shPosColVAO
, _shapeEBO = shEBO , _shapeEBO = shEBO'
, _silhouetteEBO = silEBO , _silhouetteEBO = silEBO
, _lightingCapShader = lightingCapShad , _lightingCapShader = lightingCapShad
, _lightingLineShadowShader = lightingLineShadowShad , _lightingLineShadowShader = lightingLineShadowShad
+7 -4
View File
@@ -43,9 +43,13 @@ createLightMap ::
ObjectShadows -> ObjectShadows ->
-- | the texture object giving positions -- | the texture object giving positions
TO -> TO ->
(Point3 -> Float -> IO ()) -> -- attempt at drawing shadow not using geo shader -- | the texture object giving normals
TO ->
IO () IO ()
createLightMap cfig pdata lightPoints nWalls nSils nCaps shadsdrawtype toPos drawCPUShadows = case shadsdrawtype of createLightMap cfig pdata lightPoints nWalls nSils nCaps shadsdrawtype
toPos
normaltexture
= case shadsdrawtype of
InstancingShads -> instanceLightMap cfig pdata lightPoints nWalls nSils nCaps toPos InstancingShads -> instanceLightMap cfig pdata lightPoints nWalls nSils nCaps toPos
NoShadows -> do NoShadows -> do
glBindFramebuffer GL_FRAMEBUFFER (_unFBO (fst (_fboLighting pdata))) glBindFramebuffer GL_FRAMEBUFFER (_unFBO (fst (_fboLighting pdata)))
@@ -183,14 +187,13 @@ createLightMap cfig pdata lightPoints nWalls nSils nCaps shadsdrawtype toPos dra
GL_UNSIGNED_SHORT GL_UNSIGNED_SHORT
nullPtr nullPtr
glDisable GL_DEPTH_CLAMP glDisable GL_DEPTH_CLAMP
CPUObjShads -> drawCPUShadows (V3 x y z) rad
NoObjShads -> return () NoObjShads -> return ()
--draw lightmap itself --draw lightmap itself
glDepthFunc GL_ALWAYS glDepthFunc GL_ALWAYS
-- bind world position texture -- bind world position texture
glDisable GL_CULL_FACE glDisable GL_CULL_FACE
bindTO toPos bindTO toPos
glBindTextureUnit 1 (pdata ^. fboBase . _2 . _3 . unTO) glBindTextureUnit 1 (normaltexture ^. unTO)
glColorMask GL_TRUE GL_TRUE GL_TRUE GL_TRUE glColorMask GL_TRUE GL_TRUE GL_TRUE GL_TRUE
glStencilFunc GL_EQUAL 0 255 glStencilFunc GL_EQUAL 0 255
glUseProgram (ltextShad ^. shadName) --Just (_shadProg ltextShad) glUseProgram (ltextShad ^. shadName) --Just (_shadProg ltextShad)
+1
View File
@@ -8,6 +8,7 @@ module Shader.Compile (
makeShaderSized, makeShaderSized,
makeShaderUsingVAO, makeShaderUsingVAO,
setupVAO, setupVAO,
setupEBO,
setupVertexAttribPointer, setupVertexAttribPointer,
) where ) where
+2 -2
View File
@@ -10,8 +10,8 @@ import Graphics.GL.Core45
pokeCloud :: Ptr Float -> Ptr GLushort -> (Int, Int) -> Cloud -> IO (Int, Int) pokeCloud :: Ptr Float -> Ptr GLushort -> (Int, Int) -> Cloud -> IO (Int, Int)
pokeCloud vptr iptr (nv,ni) cl = do pokeCloud vptr iptr (nv,ni) cl = do
UV.imapM_ (pokeCloudVerx vptr cl nv) $ UV.fromList [(1, 1), (1, -1), (-1, -1), (-1, 1)] UV.imapM_ (pokeCloudVerx vptr cl nv) $ UV.fromList [(1, 1), (-1, 1), (-1, -1), (1, -1)]
UV.imapM_ (pokeCloudIndex iptr nv ni) $ UV.fromList [0, 1, 2, 2, 1, 3] UV.imapM_ (pokeCloudIndex iptr nv ni) $ UV.fromList [0, 1, 2, 2, 0, 3]
return (nv + 4, ni + 6) return (nv + 4, ni + 6)
pokeCloudVerx :: Ptr Float -> Cloud -> Int -> Int -> (Float, Float) -> IO () pokeCloudVerx :: Ptr Float -> Cloud -> Int -> Int -> (Float, Float) -> IO ()