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
|
, _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
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user