Add wall shadow shaders

This commit is contained in:
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 , _arcShader :: Program
, _fadeCircleShader :: Program , _fadeCircleShader :: Program
, _backShader :: Program , _backShader :: Program
, _wallShadowShader :: Program
, _triVAO :: VAO , _triVAO :: VAO
, _lineVAO :: VAO , _lineVAO :: VAO
, _textVAO :: VAO , _textVAO :: VAO
, _circVAO :: VAO , _circVAO :: VAO
, _arcVAO :: VAO , _arcVAO :: VAO
, _backVAO :: VAO , _backVAO :: VAO
, _wallVAO :: VAO
, _posVBO :: BufferObject , _posVBO :: BufferObject
, _colVBO :: BufferObject , _colVBO :: BufferObject
, _texVBO :: BufferObject , _texVBO :: BufferObject
@@ -103,11 +105,13 @@ doPreload' = do
as <- makeArcShader as <- makeArcShader
fcs <- makeFadeShader fcs <- makeFadeShader
bgs <- makeBackgroundShader bgs <- makeBackgroundShader
wss <- makeWallShadowShader
winSizeUni <- GL.uniformLocation cs "winSize" winSizeUni <- GL.uniformLocation cs "winSize"
zoomUni <- GL.uniformLocation cs "zoom" zoomUni <- GL.uniformLocation cs "zoom"
asWinSizeUniLoc <- GL.uniformLocation as "winSize" asWinSizeUniLoc <- GL.uniformLocation as "winSize"
asZoomUniLoc <- GL.uniformLocation as "zoom" asZoomUniLoc <- GL.uniformLocation as "zoom"
wssLightPosUniLoc <- GL.uniformLocation wss "lightPos"
-- get uniform locations -- get uniform locations
--setup vbos --setup vbos
@@ -159,6 +163,7 @@ doPreload' = do
circvao <- setupVAO [(posVBO,0,3),(colVBO,1,4),(texVBO,2,1)] circvao <- setupVAO [(posVBO,0,3),(colVBO,1,4),(texVBO,2,1)]
arcvao <- setupVAO [(posVBO,0,3),(colVBO,1,4),(texVBO,2,4)] arcvao <- setupVAO [(posVBO,0,3),(colVBO,1,4),(texVBO,2,4)]
backgroundvao <- setupVAO [(posVBO,0,4),(colVBO,1,2)] backgroundvao <- setupVAO [(posVBO,0,4),(colVBO,1,2)]
wallvao <- setupVAO [(posVBO,0,4),(colVBO,1,4)]
return $ PreloadData return $ PreloadData
{ -- _charMap = convertRGBA8 cmap { -- _charMap = convertRGBA8 cmap
@@ -169,12 +174,14 @@ doPreload' = do
, _arcShader = as , _arcShader = as
, _fadeCircleShader = fcs , _fadeCircleShader = fcs
, _backShader = bgs , _backShader = bgs
, _wallShadowShader = wss
, _triVAO = trivao , _triVAO = trivao
, _textVAO = textvao , _textVAO = textvao
, _circVAO = circvao , _circVAO = circvao
, _arcVAO = arcvao , _arcVAO = arcvao
, _lineVAO = linevao , _lineVAO = linevao
, _backVAO = backgroundvao , _backVAO = backgroundvao
, _wallVAO = wallvao
, _posVBO = posVBO , _posVBO = posVBO
, _colVBO = colVBO , _colVBO = colVBO
, _texVBO = texVBO , _texVBO = texVBO
+12 -21
View File
@@ -1,14 +1,12 @@
{-# LANGUAGE QuasiQuotes #-} {-# LANGUAGE QuasiQuotes #-}
module Shaders module Shaders
(setupBasicShader (makeTextureShader
,setupFadeShader
,setupShaders
,makeTextureShader
,makeBasicShader ,makeBasicShader
,makeFadeShader ,makeFadeShader
,makeCircleShader ,makeCircleShader
,makeArcShader ,makeArcShader
,makeBackgroundShader ,makeBackgroundShader
,makeWallShadowShader
) )
where where
import Graphics.Rendering.OpenGL import Graphics.Rendering.OpenGL
@@ -16,13 +14,6 @@ import Control.Monad (when)
import Text.RawString.QQ import Text.RawString.QQ
import qualified Data.ByteString as BS 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 :: IO Program
makeBasicShader = do makeBasicShader = do
vsSource <- BS.readFile "shader/basic.vert" vsSource <- BS.readFile "shader/basic.vert"
@@ -32,11 +23,6 @@ makeBasicShader = do
,(FragmentShader, fsSource) ,(FragmentShader, fsSource)
] ]
setupBasicShader :: IO ()
setupBasicShader = do
shaderProgram <- makeBasicShader
currentProgram $= (Just shaderProgram)
makeCircleShader :: IO Program makeCircleShader :: IO Program
makeCircleShader = do makeCircleShader = do
vsSource <- BS.readFile "shader/circle.vert" vsSource <- BS.readFile "shader/circle.vert"
@@ -80,11 +66,16 @@ makeBackgroundShader = do
,(FragmentShader, fsSource ) ,(FragmentShader, fsSource )
] ]
setupFadeShader :: IO Program makeWallShadowShader :: IO Program
setupFadeShader = do makeWallShadowShader = do
shaderProgram <- makeFadeShader vsSource <- BS.readFile "shader/wallShadow.vert"
currentProgram $= (Just shaderProgram) gsSource <- BS.readFile "shader/wallShadow.geom"
return shaderProgram fsSource <- BS.readFile "shader/wallShadow.frag"
makeShaderProgram [(VertexShader, vsSource )
,(GeometryShader, gsSource )
,(FragmentShader, fsSource )
]
makeTextureShader :: IO Program makeTextureShader :: IO Program
makeTextureShader = do makeTextureShader = do