Add wall shadow shaders

This commit is contained in:
jgk
2021-02-21 20:51:56 +01:00
parent 2f7ab06aa4
commit 3dc566b6af
7 changed files with 63 additions and 21 deletions
Binary file not shown.
Binary file not shown.
+7
View File
@@ -0,0 +1,7 @@
#version 430 core
out vec4 fColor;
void main()
{
fColor = vec4 (0.9,0.9,0,1);
}
+26
View File
@@ -0,0 +1,26 @@
#version 430 core
layout (points) in;
layout (triangle_strip, max_vertices = 4) out;
in vec4 vBackPoss[];
uniform vec2 lightPos;
void main()
{
vec2 posa = gl_in[0].gl_Position.xy;
vec2 posb = gl_in[0].gl_Position.zw;
vec2 v = normalize( posb - posa);
vec2 off = vec2( -(v.y *0.2)
, v.x *0.2 );
gl_Position = vec4 (posa, 0 , 1);
EmitVertex();
gl_Position = vec4 (posb, 0 , 1);
EmitVertex();
gl_Position = vec4 (posa + off, 0 , 1);
EmitVertex();
gl_Position = vec4 (posb + off, 0 , 1);
EmitVertex();
EndPrimitive();
}
+11
View File
@@ -0,0 +1,11 @@
#version 430 core
layout (location = 0) in vec4 poss;
layout (location = 1) in vec4 backPoss;
out vec4 vBackPoss;
void main()
{
gl_Position = poss;
vBackPoss = backPoss;
}
+7
View File
@@ -25,12 +25,14 @@ data PreloadData = PreloadData
, _arcShader :: Program
, _fadeCircleShader :: Program
, _backShader :: Program
, _wallShadowShader :: Program
, _triVAO :: VAO
, _lineVAO :: VAO
, _textVAO :: VAO
, _circVAO :: VAO
, _arcVAO :: VAO
, _backVAO :: VAO
, _wallVAO :: VAO
, _posVBO :: BufferObject
, _colVBO :: BufferObject
, _texVBO :: BufferObject
@@ -103,11 +105,13 @@ doPreload' = do
as <- makeArcShader
fcs <- makeFadeShader
bgs <- makeBackgroundShader
wss <- makeWallShadowShader
winSizeUni <- GL.uniformLocation cs "winSize"
zoomUni <- GL.uniformLocation cs "zoom"
asWinSizeUniLoc <- GL.uniformLocation as "winSize"
asZoomUniLoc <- GL.uniformLocation as "zoom"
wssLightPosUniLoc <- GL.uniformLocation wss "lightPos"
-- get uniform locations
--setup vbos
@@ -159,6 +163,7 @@ doPreload' = do
circvao <- setupVAO [(posVBO,0,3),(colVBO,1,4),(texVBO,2,1)]
arcvao <- setupVAO [(posVBO,0,3),(colVBO,1,4),(texVBO,2,4)]
backgroundvao <- setupVAO [(posVBO,0,4),(colVBO,1,2)]
wallvao <- setupVAO [(posVBO,0,4),(colVBO,1,4)]
return $ PreloadData
{ -- _charMap = convertRGBA8 cmap
@@ -169,12 +174,14 @@ doPreload' = do
, _arcShader = as
, _fadeCircleShader = fcs
, _backShader = bgs
, _wallShadowShader = wss
, _triVAO = trivao
, _textVAO = textvao
, _circVAO = circvao
, _arcVAO = arcvao
, _lineVAO = linevao
, _backVAO = backgroundvao
, _wallVAO = wallvao
, _posVBO = posVBO
, _colVBO = colVBO
, _texVBO = texVBO
+12 -21
View File
@@ -1,14 +1,12 @@
{-# LANGUAGE QuasiQuotes #-}
module Shaders
(setupBasicShader
,setupFadeShader
,setupShaders
,makeTextureShader
(makeTextureShader
,makeBasicShader
,makeFadeShader
,makeCircleShader
,makeArcShader
,makeBackgroundShader
,makeWallShadowShader
)
where
import Graphics.Rendering.OpenGL
@@ -16,13 +14,6 @@ import Control.Monad (when)
import Text.RawString.QQ
import qualified Data.ByteString as BS
setupShaders :: IO [Program]
setupShaders = do
basicShader <- makeBasicShader
fadeShader <- makeFadeShader
textureShader <- makeTextureShader
return [basicShader,fadeShader,textureShader]
makeBasicShader :: IO Program
makeBasicShader = do
vsSource <- BS.readFile "shader/basic.vert"
@@ -32,11 +23,6 @@ makeBasicShader = do
,(FragmentShader, fsSource)
]
setupBasicShader :: IO ()
setupBasicShader = do
shaderProgram <- makeBasicShader
currentProgram $= (Just shaderProgram)
makeCircleShader :: IO Program
makeCircleShader = do
vsSource <- BS.readFile "shader/circle.vert"
@@ -80,11 +66,16 @@ makeBackgroundShader = do
,(FragmentShader, fsSource )
]
setupFadeShader :: IO Program
setupFadeShader = do
shaderProgram <- makeFadeShader
currentProgram $= (Just shaderProgram)
return shaderProgram
makeWallShadowShader :: IO Program
makeWallShadowShader = do
vsSource <- BS.readFile "shader/wallShadow.vert"
gsSource <- BS.readFile "shader/wallShadow.geom"
fsSource <- BS.readFile "shader/wallShadow.frag"
makeShaderProgram [(VertexShader, vsSource )
,(GeometryShader, gsSource )
,(FragmentShader, fsSource )
]
makeTextureShader :: IO Program
makeTextureShader = do