Add dependencies, play around with clouds/transparency layer

This commit is contained in:
2021-09-01 03:04:41 +01:00
parent db5c27a3ed
commit 82551328a1
10 changed files with 96 additions and 54 deletions
+16
View File
@@ -0,0 +1,16 @@
#version 430 core
uniform vec3 lightPos;
uniform vec4 lumRad;
uniform sampler2D screenTexture;
in vec2 vTexPos;
out vec4 fColor;
void main()
{
//vec3 dField = ( texture(screenTexture,vTexPos).xyz - lightPos ) / lumRad.a;
//vec3 c = pow (1 - min(1, dot(dField,dField)) , 2) * lumRad.rgb ;
vec3 dField = ( texture(screenTexture,vTexPos).xyz - lightPos ) / lumRad.a;
vec3 c = pow (1 - min(1, dot(dField,dField)) , 2) * lumRad.rgb ;
fColor = vec4(c,0);
//fColor = vec4(lumRad.rgb,0);
//fColor = vec4(1,1,1,0);
}
+9
View File
@@ -0,0 +1,9 @@
#version 430 core
layout (location = 0) in vec2 pos;
layout (location = 1) in vec2 texPos;
out vec2 vTexPos;
void main()
{
gl_Position = vec4(pos,0,1);
vTexPos = texPos;
}
+11
View File
@@ -0,0 +1,11 @@
#version 430 core
in vec3 vTexPos;
in vec3 vPos;
layout (location=0) out vec4 fCol;
layout (location=1) out vec4 fPos;
uniform sampler2DArray tilesetSampler;
void main()
{
fCol = texture(tilesetSampler, vTexPos);
fPos = vec4(vPos,1);
}
+12
View File
@@ -0,0 +1,12 @@
#version 430 core
layout (location = 0) in vec3 pos;
layout (location = 1) in vec3 texPos;
layout (std140, binding = 0) uniform TheMat { mat4 theMat; } ;
out vec3 vTexPos;
out vec3 vPos;
void main()
{
gl_Position = theMat * vec4(pos,1.0) ;
vTexPos = texPos;
vPos = pos;
}
+3 -5
View File
@@ -13,8 +13,8 @@ import Control.Monad.Primitive
data RenderData = RenderData
{ _lightingOccludeShader :: FullShader
, _lightingWallShader :: FullShader
, _lightingSurfaceShader :: FullShader
--, _lightingWallShader :: FullShader
--, _lightingSurfaceShader :: FullShader
, _lightingLineShadowShader :: FullShader
, _lightingCapShader :: FullShader
, _wallBlankShader :: FullShader
@@ -22,8 +22,7 @@ data RenderData = RenderData
, _textureArrayShader :: FullShader
, _fullscreenShader :: FullShader
, _fullLightingShader :: FullShader
, _fullscreenAlphaHalveShader :: FullShader
--, _boxBlurShader :: FullShader
--, _fullscreenAlphaHalveShader :: FullShader
, _bloomBlurShader :: FullShader
, _colorBlurShader :: FullShader
, _barrelShader :: FullShader
@@ -40,7 +39,6 @@ data RenderData = RenderData
, _rboBaseBloom :: RenderbufferObject
, _fboLighting :: (FramebufferObject, TextureObject)
, _fboLightingHigh :: (FramebufferObject, TextureObject)
--, _rboLighting :: RenderbufferObject
, _matUBO :: BufferObject
}
makeLenses ''RenderData
+18 -23
View File
@@ -57,18 +57,14 @@ doDrawing pdata w = do
$
--youSil w ++
_foregroundEdgeVerx w
-- poke foreground geometry and floor
let addC (V2 xx yy) = V3 xx yy 0
nsurfVs <- pokePoint3s (shadVBOptr $ _lightingSurfaceShader pdata)
$
--youBox w ++
concatMap polyToGeoRender (foregroundPics w)
++ polyToTris (map addC $ screenPolygon w)
-- poke foreground geometry for caps
nCaps <- pokePoint3s (shadVBOptr $ _lightingCapShader pdata)
$ concatMap polyToGeoRender (foregroundPics w)
-- bind wall points, silhouette data, surface geometry
uncurry bindShaderBuffers $ unzip
[ ( _wallTextureShader pdata, nWalls)
, (_lightingLineShadowShader pdata, nSils)
, (_lightingSurfaceShader pdata, nsurfVs)
, (_lightingCapShader pdata, nCaps)
]
-- set the coordinate uniform ready for drawing elements using world coordinates
bufferUBO $ perspectiveMatrixb rot camzoom trans wins viewFroms
@@ -79,15 +75,9 @@ doDrawing pdata w = do
clear [ColorBuffer,DepthBuffer]
depthFunc $= Just Less
-- draw wall occlusions from the camera's point of view
currentProgram $= Just (_shaderProgram $ _lightingSurfaceShader pdata)
uniform (head $ _shaderCustomUnis $ _lightingSurfaceShader pdata)
$= viewFrom3d
currentProgram $= Just (_shaderProgram $ _lightingOccludeShader pdata)
uniform (head $ _shaderCustomUnis $ _lightingOccludeShader pdata)
$= viewFrom3d
currentProgram $= Just (_shaderProgram $ _lightingWallShader pdata)
uniform (head $ _shaderCustomUnis $ _lightingWallShader pdata)
$= viewFrom3d
drawShader (_lightingOccludeShader pdata) nWalls
--draw walls onto base buffer
if w ^. config . wall_textured
@@ -124,23 +114,29 @@ doDrawing pdata w = do
viewport $= (Position 0 0
, divideSize (w ^. config . shadow_resolution) $ Size (round $ fstV2 wins) (round $ sndV2 wins))
--
-- depthMask $= Enabled
-- this is not ideal if the original is not divisible by 2
bindFramebuffer Framebuffer $= fst (_fboLighting pdata)
createLightMap pdata lightPoints nWalls nSils
createLightMap pdata lightPoints nWalls nSils nCaps
colorMask $= Color4 Enabled Enabled Enabled Enabled
clearColor $= Color4 0 0 0 0
bindFramebuffer Framebuffer $= fst (_fboColor pdata)
clearColor $= Color4 0 0 0 0
clear [ColorBuffer]
depthFunc $= Just Lequal
depthMask $= Disabled
blendFuncSeparate $= ((SrcAlpha,OneMinusSrcAlpha),(SrcAlpha,One))
--blendFuncSeparate $= ((OneMinusDstAlpha,OneMinusSrcAlpha),(One,OneMinusSrcAlpha))
--blendFunc $= (One,OneMinusSrcAlpha)
--blendFunc $= (SrcAlpha,One)
--blendFunc $= (SrcAlphaSaturate,One)
--blendFunc $= (SrcAlphaSaturate,OneMinusSrcAlpha)
blendColor $= Color4 1 1 1 0.80
blendFuncSeparate $= ((SrcAlphaSaturate,One),(ConstantAlpha,ConstantAlpha))
--blendFunc $= (SrcAlphaSaturate,SrcAlphaSaturate)
clearColor $= Color4 0.5 0.5 0.5 0
clear [ColorBuffer]
blendFunc $= (SrcAlpha,OneMinusSrcAlpha)
blendFuncSeparate $= ((SrcAlpha,OneMinusSrcAlpha),(One,OneMinusSrcAlpha))
--blendFuncSeparate $= ((SrcAlphaSaturate,OneMinusSrcAlpha),(One,OneMinusSrcAlpha))
renderLayer 2 shadV layerCounts
renderWindows pdata windowPoints
clearColor $= Color4 0 0 0 0
depthMask $= Enabled
depthMask $= Disabled
@@ -179,7 +175,6 @@ doDrawing pdata w = do
textureBinding Texture2D $= Just (snd $ _fboColor pdata)
drawShader (_fullscreenShader pdata) 4
--renderLayer 2 shadV layerCounts
renderWindows pdata windowPoints
depthFunc $= Just Lequal
viewport $= (Position 0 0, Size (round $ fstV2 wins) (round $ sndV2 wins))
+1 -1
View File
@@ -281,7 +281,7 @@ makeGasCloud pos vel w = w
theCloud = Cloud
{ _clPos = pos
, _clVel = vel
, _clPict = \_ -> setLayer 2 . setDepth 30 $ color (withAlpha 0.1 col)
, _clPict = \_ -> setLayer 2 . setDepth 30 $ color (withAlpha 0.05 col)
$ circleSolid 20
, _clRad = 10
, _clTimer = 400
+7 -23
View File
@@ -51,18 +51,11 @@ preloadRender = do
setupVertexAttribPointer 1 4 8 4
let wpVAO = VAO {_vao = wpVAOname, _vaoVBO = wpVBO}
wpColVAO = VAO {_vao = wpColVAOname, _vaoVBO = wpVBO}
-- lighting shaders
wsShad <- makeShader "lighting/occlude" [vert,geom,frag] [4] EPoints
>>= addUniforms ["lightPos"]
wlLightShad
<- makeShaderUsingShaderVAO "lighting/wall" [vert,geom,frag] EPoints wsShad
>>= addUniforms ["lightPos","lumRad"]
lightingSurfaceShad
<- makeShader "lighting/surface" [vert,frag] [3] ETriangles
>>= addUniforms ["lightPos","lumRad"]
lightingCapShad
<- makeShaderUsingShaderVAO "lighting/cap" [vert,geom,frag] ETriangles lightingSurfaceShad
<- makeShader "lighting/cap" [vert,geom,frag] [3] ETriangles
>>= addUniforms ["lightPos"]
lightingLineShadowShad
<- makeShader "lighting/lineShadow" [vert,geom,frag] [3] ELinesAdjacency
@@ -77,8 +70,8 @@ preloadRender = do
-- this should really be a 2d texture array
basicTweakZShad <- makeShader "dualTwoD/basicTweakZ" [vert,frag] [4,4] ETriangles
-- fullscreen shaders
fullscreenAlphaHalveShad <- makeShaderSized "fullscreen/alphaHalve" [vert,frag] [2] 4 ETriangleStrip
pokeArray (shadVBOptr fullscreenAlphaHalveShad) $ concat cornerListNoCoord
--fullscreenAlphaHalveShad <- makeShaderSized "fullscreen/alphaHalve" [vert,frag] [2] 4 ETriangleStrip
--pokeArray (shadVBOptr fullscreenAlphaHalveShad) $ concat cornerListNoCoord
-- texture shaders, no textures attached
fsShad <- makeShaderSized "texture/simple" [vert,frag] [2,2] 4 ETriangleStrip
-- note we directly poke the shader vertex data here
@@ -100,7 +93,7 @@ preloadRender = do
>>= addTextureArray "data/texture/ayene_wooden_floor_transformed.png"
-- >>= addTextureArray "data/texture/ayene_wooden_floor.png"
-- bind fixed vertex data
bindShaderBuffers [fsShad,fullscreenAlphaHalveShad] [4,4]
bindShaderBuffers [fsShad] [4,4]
framebuf2 <- setupTextureFramebuffer 800 600
framebuf3 <- setupTextureFramebuffer 800 600
@@ -141,17 +134,17 @@ preloadRender = do
return $ RenderData
{ _pictureShaders = shadV
, _lightingSurfaceShader = lightingSurfaceShad
--, _lightingSurfaceShader = lightingSurfaceShad
, _lightingCapShader = lightingCapShad
, _lightingLineShadowShader = lightingLineShadowShad
, _lightingOccludeShader = wsShad {_shaderVAO = wpVAO}
, _lightingWallShader = wlLightShad {_shaderVAO = wpVAO}
--, _lightingWallShader = wlLightShad {_shaderVAO = wpVAO}
, _wallBlankShader = wlBlank { _shaderVAO = wpColVAO }
, _wallTextureShader = wlTexture { _shaderVAO = wpColVAO }
, _textureArrayShader = textArrayShad
, _fullscreenShader = fsShad
, _fullLightingShader = fullLightingShad
, _fullscreenAlphaHalveShader = fullscreenAlphaHalveShad
--, _fullscreenAlphaHalveShader = fullscreenAlphaHalveShad
, _bloomBlurShader = bloomBlurShad
, _colorBlurShader = colorBlurShad
, _barrelShader = barrelShad
@@ -178,15 +171,6 @@ cornerList =
,[-1,-1,0,0]
,[ 1,-1,1,0]
]
cornerListNoCoord :: [[Float]]
cornerListNoCoord =
[[-1, 1]
,[ 1, 1]
,[-1,-1]
,[ 1,-1]
]
cleanUpRenderPreload :: RenderData -> IO ()
cleanUpRenderPreload pd = do
-- TODO fix this
+3 -2
View File
@@ -36,8 +36,9 @@ createLightMap
-> [(Point3,Float,Point3)] -- Lights
-> Int -- ^ number of walls
-> Int -- ^ number of silhoutte lines to draw
-> Int -- ^ number of "caps" to attempt to draw
-> IO ()
createLightMap pdata lightPoints nWalls nSils = do
createLightMap pdata lightPoints nWalls nSils nCaps = do
-- we assume that the renderbuffer's depth has been correctly set elsewhere
-- we will not be changing that here
depthMask $= Disabled
@@ -74,7 +75,7 @@ createLightMap pdata lightPoints nWalls nSils = do
currentProgram $= Just (_shaderProgram $ _lightingCapShader pdata)
uniform (head $ _shaderCustomUnis $ _lightingCapShader pdata)
$= Vector3 x y z
drawShader (_lightingCapShader pdata) (nSils - 6)
drawShader (_lightingCapShader pdata) nCaps
--draw lightmap itself
depthFunc $= Just Always
cullFace $= Nothing
+16
View File
@@ -0,0 +1,16 @@
module Tuple
( trip1
, trip2
, trip3
)
where
trip1 :: (a,b,c) -> a
{-# INLINE trip1 #-}
trip1 (x,_,_) = x
trip2 :: (a,b,c) -> b
{-# INLINE trip2 #-}
trip2 (_,x,_) = x
trip3 :: (a,b,c) -> c
{-# INLINE trip3 #-}
trip3 (_,_,x) = x