Add wall shadow shaders
This commit is contained in:
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,7 @@
|
||||
#version 430 core
|
||||
out vec4 fColor;
|
||||
|
||||
void main()
|
||||
{
|
||||
fColor = vec4 (0.9,0.9,0,1);
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user