Remove unnecessary uniforms
This commit is contained in:
@@ -3,11 +3,9 @@ layout (points) in;
|
||||
layout (triangle_strip, max_vertices = 11) out;
|
||||
|
||||
uniform vec2 lightPos;
|
||||
uniform mat4 perpMat;
|
||||
uniform mat4 worldMat;
|
||||
uniform float facesToDraw;
|
||||
|
||||
vec2 lightPosa = ( perpMat * vec4(lightPos,0,1) ).xy;
|
||||
vec2 lightPosa = ( worldMat * vec4(lightPos,0,1) ).xy;
|
||||
|
||||
vec4 shift (vec4 p)
|
||||
{ return vec4 (p.xy + (200 * (p.xy-lightPos)), 0 , 1);
|
||||
@@ -30,19 +28,14 @@ vec4 p6 = shift(p2);
|
||||
vec4 p7 = vec4 (p6.xy,-0.5,1);
|
||||
vec4 p8 = vec4 (p5.xy,-0.5,1);
|
||||
|
||||
vec4 a1 = perpMat * p1;
|
||||
vec4 a2 = perpMat * p2;
|
||||
vec4 a3 = perpMat * p3;
|
||||
vec4 a4 = perpMat * p4;
|
||||
vec4 a5 = perpMat * p5;
|
||||
vec4 a6 = perpMat * p6;
|
||||
vec4 a7 = perpMat * p7;
|
||||
vec4 a8 = perpMat * p8;
|
||||
|
||||
// gl_Position = a1; EmitVertex();
|
||||
// gl_Position = a5; EmitVertex();
|
||||
// gl_Position = a2; EmitVertex();
|
||||
// gl_Position = a6; EmitVertex();
|
||||
vec4 a1 = worldMat * p1;
|
||||
vec4 a2 = worldMat * p2;
|
||||
vec4 a3 = worldMat * p3;
|
||||
vec4 a4 = worldMat * p4;
|
||||
vec4 a5 = worldMat * p5;
|
||||
vec4 a6 = worldMat * p6;
|
||||
vec4 a7 = worldMat * p7;
|
||||
vec4 a8 = worldMat * p8;
|
||||
|
||||
gl_Position = a4; EmitVertex();
|
||||
gl_Position = a3; EmitVertex();
|
||||
@@ -59,35 +52,3 @@ vec4 a8 = perpMat * p8;
|
||||
EndPrimitive();
|
||||
} else {}
|
||||
}
|
||||
|
||||
// // void main()
|
||||
// // {
|
||||
// // vec4 frontL4 = worldMat * vec4(gl_in[0].gl_Position.xy, 0 ,1);
|
||||
// // vec4 frontR4 = worldMat * vec4(gl_in[0].gl_Position.zw, 0 ,1);
|
||||
// // vec2 frontL = frontL4.xy;
|
||||
// // vec2 frontR = frontR4.xy;
|
||||
// //
|
||||
// // emitLine (frontR);
|
||||
// // emitLine (frontL);
|
||||
// // EndPrimitive();
|
||||
// // }
|
||||
// gl_Position = perspective * worldMat * p4; EmitVertex();
|
||||
// gl_Position = perspective * worldMat * p3; EmitVertex();
|
||||
// gl_Position = perspective * worldMat * p7; EmitVertex();
|
||||
// gl_Position = perspective * worldMat * p8; EmitVertex();
|
||||
// gl_Position = perspective * worldMat * p5; EmitVertex();
|
||||
// gl_Position = perspective * worldMat * p3; EmitVertex();
|
||||
// gl_Position = perspective * worldMat * p1; EmitVertex();
|
||||
// gl_Position = perspective * worldMat * p4; EmitVertex();
|
||||
// gl_Position = perspective * worldMat * p2; EmitVertex();
|
||||
// gl_Position = perspective * worldMat * p7; EmitVertex();
|
||||
// gl_Position = perspective * worldMat * p6; EmitVertex();
|
||||
// gl_Position = perspective * worldMat * p5; EmitVertex();
|
||||
//void emitLine (vec2 pa)
|
||||
//{
|
||||
// gl_Position = vec4 (pa, 0, 1);
|
||||
// EmitVertex();
|
||||
// gl_Position = shift (vec4 (pa,0,1)); //vec4 (pa + (200 * (pa - lightPosa)), 0 , 1);
|
||||
// EmitVertex();
|
||||
//}
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ out vec3 dField;
|
||||
out float lum;
|
||||
|
||||
uniform vec2 lightPos;
|
||||
uniform mat4 perpMat;
|
||||
uniform mat4 worldMat;
|
||||
uniform vec2 radLum;
|
||||
|
||||
float isLHS (vec2 startV, vec2 testV)
|
||||
@@ -31,10 +31,10 @@ if (isLHS (p1.xy - lightPos, p2.xy - lightPos) < 0)
|
||||
vec2 d1 = p1.xy - lightPos;
|
||||
vec2 d2 = p2.xy - lightPos;
|
||||
|
||||
vec4 a1 = shiftCloser( perpMat * p1 );
|
||||
vec4 a2 = shiftCloser( perpMat * p2 );
|
||||
vec4 a3 = shiftCloser( perpMat * p3 );
|
||||
vec4 a4 = shiftCloser( perpMat * p4 );
|
||||
vec4 a1 = shiftCloser( worldMat * p1 );
|
||||
vec4 a2 = shiftCloser( worldMat * p2 );
|
||||
vec4 a3 = shiftCloser( worldMat * p3 );
|
||||
vec4 a4 = shiftCloser( worldMat * p4 );
|
||||
|
||||
dField = vec3( d1.x/rad, d1.y/rad, 0);
|
||||
gl_Position = a1;
|
||||
|
||||
@@ -5,7 +5,7 @@ layout (triangle_strip, max_vertices = 4) out;
|
||||
in vec4 vColor [];
|
||||
out vec4 gColor;
|
||||
|
||||
uniform mat4 perpMat;
|
||||
uniform mat4 worldMat;
|
||||
|
||||
// consider using isLHS to check if the wall is facing the center
|
||||
// this needs the view from point
|
||||
@@ -21,16 +21,16 @@ void main()
|
||||
vec4 p1 = vec4 (gl_in[0].gl_Position.xy,0,1);
|
||||
vec4 p2 = vec4 (gl_in[0].gl_Position.zw,0,1);
|
||||
|
||||
vec4 a1 = perpMat * p1;
|
||||
vec4 a2 = perpMat * p2;
|
||||
vec4 a1 = worldMat * p1;
|
||||
vec4 a2 = worldMat * p2;
|
||||
|
||||
// if (0 > isLHS (a1.xy - a2.xy, a1.xy - "viewFromPoint")) {
|
||||
|
||||
vec4 p3 = vec4 (p1.xy,-0.5,1);
|
||||
vec4 p4 = vec4 (p2.xy,-0.5,1);
|
||||
|
||||
vec4 a3 = perpMat * p3;
|
||||
vec4 a4 = perpMat * p4;
|
||||
vec4 a3 = worldMat * p3;
|
||||
vec4 a4 = worldMat * p4;
|
||||
|
||||
gl_Position = a1; EmitVertex();
|
||||
gl_Position = a3; EmitVertex();
|
||||
|
||||
@@ -6,7 +6,7 @@ in vec4 vColor [];
|
||||
out vec4 gColor;
|
||||
out vec2 tPos;
|
||||
|
||||
uniform mat4 perpMat;
|
||||
uniform mat4 worldMat;
|
||||
|
||||
// consider using isLHS to check if the wall is facing the center
|
||||
float isLHS (vec2 startV, vec2 testV)
|
||||
@@ -23,10 +23,10 @@ vec4 p2 = vec4 (gl_in[0].gl_Position.zw,0,1);
|
||||
vec4 p3 = vec4 (p1.xy,-0.3,1);
|
||||
vec4 p4 = vec4 (p2.xy,-0.3,1);
|
||||
|
||||
vec4 a1 = perpMat * p1;
|
||||
vec4 a2 = perpMat * p2;
|
||||
vec4 a3 = perpMat * p3;
|
||||
vec4 a4 = perpMat * p4;
|
||||
vec4 a1 = worldMat * p1;
|
||||
vec4 a2 = worldMat * p2;
|
||||
vec4 a3 = worldMat * p3;
|
||||
vec4 a4 = worldMat * p4;
|
||||
|
||||
tPos = vec2 ( 1,-1) ; gl_Position = a1; EmitVertex();
|
||||
tPos = vec2 ( 1, 1) ; gl_Position = a3; EmitVertex();
|
||||
|
||||
+2
-2
@@ -138,7 +138,7 @@ renderBlankWalls pdata wps pmat = do
|
||||
n <- F.foldM (pokeShader $ _wallBlankShader pdata) wps
|
||||
bindShaderBuffers [_wallBlankShader pdata] [n]
|
||||
currentProgram $= Just (_shaderProgram $ _wallBlankShader pdata)
|
||||
uniform (head ( _shaderCustomUnis $ _wallBlankShader pdata) )
|
||||
uniform (( _shaderMatrixUniform $ _wallBlankShader pdata) )
|
||||
$= pmat
|
||||
cullFace $= Just Back
|
||||
drawShader (_wallBlankShader pdata) n
|
||||
@@ -153,7 +153,7 @@ renderTextureWalls pdata wps pmat = do
|
||||
n <- F.foldM (pokeShader $ _wallTextureShader pdata) wps
|
||||
bindShaderBuffers [_wallTextureShader pdata] [n]
|
||||
currentProgram $= Just (_shaderProgram $ _wallTextureShader pdata)
|
||||
uniform (head ( _shaderCustomUnis $ _wallTextureShader pdata) )
|
||||
uniform (( _shaderMatrixUniform $ _wallTextureShader pdata) )
|
||||
$= pmat
|
||||
cullFace $= Just Back
|
||||
drawShader (_wallTextureShader pdata) n
|
||||
|
||||
+28
-5
@@ -1,5 +1,6 @@
|
||||
module MatrixHelper
|
||||
( perspectiveMatrix
|
||||
, isoMatrix
|
||||
) where
|
||||
import Geometry
|
||||
|
||||
@@ -25,11 +26,6 @@ perspectiveMatrix rot zoom (tranx,trany) (winx,winy) (viewFromx,viewFromy) =
|
||||
(V4 (sin rot) (cos rot) 0 0)
|
||||
(V4 0 0 1 0)
|
||||
(V4 0 0 0 1)
|
||||
--tranMat3 = Linear.Matrix.transpose $
|
||||
-- V4 (V4 1 0 0 0)
|
||||
-- (V4 0 1 0 0)
|
||||
-- (V4 0 0 1 0)
|
||||
-- (V4 (-tranx) (-trany) 0 1)
|
||||
tranMat2 = Linear.Matrix.transpose $
|
||||
V4 (V4 1 0 0 0)
|
||||
(V4 0 1 0 0)
|
||||
@@ -48,3 +44,30 @@ perspectiveMatrix rot zoom (tranx,trany) (winx,winy) (viewFromx,viewFromy) =
|
||||
wmat = scalMat !*! rotMat !*! tranMat2 !*! perMat !*! tranMat1
|
||||
vToL (V4 a b c d) = [a,b,c,d]
|
||||
in concatMap vToL $ vToL wmat
|
||||
{- | A matrix that gives a top down view with no perspective. -}
|
||||
isoMatrix
|
||||
:: Float -- ^ Rotation
|
||||
-> Float -- ^ Zoom
|
||||
-> Point2 -- ^ Translation
|
||||
-> Point2 -- ^ Window size
|
||||
-> Point2 -- ^ View froms
|
||||
-> [GLfloat]
|
||||
isoMatrix rot czoom (tranx,trany) (winx,winy) _ =
|
||||
let scalMat = Linear.Matrix.transpose $
|
||||
V4 (V4 (2*czoom/winx) 0 0 (0::GLfloat))
|
||||
(V4 0 (2*czoom/winy) 0 0)
|
||||
(V4 0 0 1 0)
|
||||
(V4 0 0 0 1)
|
||||
rotMat = Linear.Matrix.transpose $
|
||||
V4 (V4 (cos rot) (sin (-rot)) 0 0)
|
||||
(V4 (sin rot) (cos rot) 0 0)
|
||||
(V4 0 0 1 0)
|
||||
(V4 0 0 0 1)
|
||||
tranMat = Linear.Matrix.transpose $
|
||||
V4 (V4 1 0 0 0)
|
||||
(V4 0 1 0 0)
|
||||
(V4 0 0 1 0)
|
||||
(V4 (-tranx) (-trany) 0 1)
|
||||
wmat = scalMat !*! rotMat !*! tranMat
|
||||
vToL (V4 a b c d) = [a,b,c,d]
|
||||
in concatMap vToL $ vToL wmat
|
||||
|
||||
@@ -40,10 +40,10 @@ preloadRender = do
|
||||
lsShad <- makeShader "lighting/floor" [vert,geom,frag] [(0,4)] Points
|
||||
(return . return . flat4)
|
||||
wsShad <- makeShader "lighting/occlude" [vert,geom,frag] [(0,4)] Points pokeWPStrat
|
||||
>>= addUniforms ["lightPos","perpMat","facesToDraw"]
|
||||
>>= addUniforms ["lightPos"]
|
||||
wlLightShad
|
||||
<- makeShader "lighting/wall" [vert,geom,frag] [(0,4)] Points pokeWPStrat
|
||||
>>= addUniforms ["lightPos","perpMat","radLum"]
|
||||
>>= addUniforms ["lightPos","radLum"]
|
||||
-- 2D draw shaders
|
||||
bslist <- makeShader "twoD/basic" [vert,frag] [(0,3),(1,4)] Triangles pokeTriStrat
|
||||
lslist <- makeShader "twoD/basic" [vert,frag] [(0,3),(1,4)] Lines pokeLineStrat
|
||||
@@ -82,12 +82,9 @@ preloadRender = do
|
||||
-- >>= addTexture "data/texture/smudgedDirt.png"
|
||||
-- blank wallShader
|
||||
wlBlank <- makeShader "wall/blank" [vert,geom,frag] [(0,4),(1,4)] Points pokeWPColStrat
|
||||
-- >>= addTexture "data/texture/grayscaleDirt.png"
|
||||
>>= addUniforms ["perpMat"]
|
||||
-- textured wallShader
|
||||
wlTexture <- makeShader "wall/texture" [vert,geom,frag] [(0,4),(1,4)] Points pokeWPColStrat
|
||||
>>= addTexture "data/texture/grayscaleDirt.png"
|
||||
>>= addUniforms ["perpMat"]
|
||||
-- framebuffer for lighting
|
||||
(fbo,fboTO,fboRBO) <- setupFramebufferWithStencil
|
||||
framebuf2 <- setupFramebufferWithStencil
|
||||
|
||||
+7
-10
@@ -38,12 +38,11 @@ setWallDepth pdata wallPoints (viewFromx,viewFromy) pmat = do
|
||||
bindShaderBuffers [_lightingOccludeShader pdata] [nWalls]
|
||||
|
||||
currentProgram $= Just (_shaderProgram $ _lightingOccludeShader pdata)
|
||||
uniform (head $ _shaderCustomUnis $ _lightingOccludeShader pdata)
|
||||
-- reseting this uniform appears to be necessary
|
||||
uniform (head $ _shaderCustomUnis $ _lightingOccludeShader pdata)
|
||||
$= Vector2 viewFromx viewFromy
|
||||
uniform ( (_shaderCustomUnis $ _lightingOccludeShader pdata) !! 1)
|
||||
$= pmat
|
||||
uniform ( (_shaderCustomUnis $ _lightingOccludeShader pdata) !! 2)
|
||||
$= (0 :: Float)
|
||||
-- uniform ( (_shaderMatrixUniform $ _lightingOccludeShader pdata))
|
||||
-- $= pmat
|
||||
-- cullFace $= Just Front
|
||||
drawShader (_lightingOccludeShader pdata) nWalls
|
||||
colorMask $= Color4 Enabled Enabled Enabled Enabled
|
||||
@@ -81,7 +80,7 @@ createLightMap pdata resDiv wallPoints lightPoints (viewFromx,viewFromy) pmat _
|
||||
bindShaderBuffers [_lightingOccludeShader pdata] [nWalls]
|
||||
-- set uniforms for shader that draws lights
|
||||
currentProgram $= Just (_shaderProgram $ _lightingWallShader pdata)
|
||||
uniform ( (_shaderCustomUnis $ _lightingWallShader pdata) !! 1)
|
||||
uniform (_shaderMatrixUniform $ _lightingWallShader pdata)
|
||||
$= pmat
|
||||
-- clear buffer to full alpha and furthest depth
|
||||
clearColor $= Color4 0 0 0 1
|
||||
@@ -93,10 +92,8 @@ createLightMap pdata resDiv wallPoints lightPoints (viewFromx,viewFromy) pmat _
|
||||
currentProgram $= Just (_shaderProgram $ _lightingOccludeShader pdata)
|
||||
uniform (head $ _shaderCustomUnis $ _lightingOccludeShader pdata)
|
||||
$= Vector2 viewFromx viewFromy
|
||||
uniform ( (_shaderCustomUnis $ _lightingOccludeShader pdata) !! 1)
|
||||
uniform ( (_shaderMatrixUniform $ _lightingOccludeShader pdata))
|
||||
$= pmat
|
||||
uniform ( (_shaderCustomUnis $ _lightingOccludeShader pdata) !! 2)
|
||||
$= (0 :: Float)
|
||||
cullFace $= Just Back
|
||||
drawShader (_lightingOccludeShader pdata) nWalls
|
||||
|
||||
@@ -142,7 +139,7 @@ createLightMap pdata resDiv wallPoints lightPoints (viewFromx,viewFromy) pmat _
|
||||
currentProgram $= Just (_shaderProgram $ _lightingWallShader pdata)
|
||||
uniform (head $ _shaderCustomUnis $ _lightingWallShader pdata)
|
||||
$= Vector2 x y
|
||||
uniform ((_shaderCustomUnis $ _lightingWallShader pdata) !! 2)
|
||||
uniform (_shaderCustomUnis (_lightingWallShader pdata) !! 1)
|
||||
$= Vector2 r lum
|
||||
drawShader (_lightingWallShader pdata) nWallLights
|
||||
cullFace $= Nothing
|
||||
|
||||
+4
-6
@@ -37,7 +37,7 @@ import Linear.Matrix
|
||||
import Linear.V4
|
||||
|
||||
extractProgAndUnis :: FullShader a -> (Program,UniformLocation)
|
||||
extractProgAndUnis s = (_shaderProgram s, _shaderUniform s)
|
||||
extractProgAndUnis s = (_shaderProgram s, _shaderMatrixUniform s)
|
||||
|
||||
pokeShaders :: [FullShader a] -> F.FoldM IO a [Int]
|
||||
pokeShaders = traverse pokeShader
|
||||
@@ -124,7 +124,7 @@ makeShader s shaderlist alocs pm renStrat = do
|
||||
(prog,unis) <- makeSourcedShader s shaderlist
|
||||
vaob <- setupVAO alocs
|
||||
return $ FullShader { _shaderProgram = prog
|
||||
, _shaderUniform = unis
|
||||
, _shaderMatrixUniform = unis
|
||||
, _shaderVAO = vaob
|
||||
, _shaderPokeStrategy = renStrat
|
||||
, _shaderDrawPrimitive = pm
|
||||
@@ -184,7 +184,6 @@ addUniforms uniStrings shad = do
|
||||
uniLocs <- mapM (uniformLocation $ _shaderProgram shad) uniStrings
|
||||
return $ shad & shaderCustomUnis %~ (++ uniLocs)
|
||||
|
||||
|
||||
shaderTypeExt :: ShaderType -> String
|
||||
shaderTypeExt VertexShader = ".vert"
|
||||
shaderTypeExt GeometryShader = ".geom"
|
||||
@@ -202,7 +201,6 @@ makeShaderProgram str sources = do
|
||||
unless linkingSuccess $ do
|
||||
infoLog <- get (programInfoLog theShaderProgram)
|
||||
putStrLn $ str ++ ": Program Linking" ++ infoLog
|
||||
|
||||
return theShaderProgram
|
||||
|
||||
compileAndCheckShader :: String -> (ShaderType,BS.ByteString) -> IO Shader
|
||||
@@ -217,8 +215,8 @@ compileAndCheckShader str (theShaderType,sourceCode) = do
|
||||
return theShader
|
||||
|
||||
resetShaderUniforms :: [(Program, UniformLocation)] -> IO ()
|
||||
resetShaderUniforms = setShaderUniforms 0 1 (0,0) (2,2)
|
||||
{-# INLINE resetShaderUniforms #-}
|
||||
resetShaderUniforms = setShaderUniforms 0 1 (0,0) (2,2)
|
||||
|
||||
setShaderUniforms :: Float -> Float -> Point2 -> Point2 -> [(Program,UniformLocation)] -> IO ()
|
||||
{-# INLINE setShaderUniforms #-}
|
||||
@@ -257,7 +255,7 @@ setPerpMatUniform
|
||||
setPerpMatUniform rot czoom trans wins vFrom shad = do
|
||||
pmat <- (newMatrix RowMajor $ perspectiveMatrix rot czoom trans wins vFrom) :: IO (GLmatrix GLfloat)
|
||||
currentProgram $= Just (_shaderProgram shad)
|
||||
uniform (_shaderUniform shad) $= pmat
|
||||
uniform (_shaderMatrixUniform shad) $= pmat
|
||||
return ()
|
||||
|
||||
freeShaderPointers :: FullShader a -> IO ()
|
||||
|
||||
+2
-2
@@ -11,7 +11,7 @@ module Shader.Data
|
||||
, vaoBufferTargets
|
||||
|
||||
, shaderProgram
|
||||
, shaderUniform
|
||||
, shaderMatrixUniform
|
||||
, shaderVAO
|
||||
, shaderPokeStrategy
|
||||
, shaderDrawPrimitive
|
||||
@@ -32,7 +32,7 @@ data VAO = VAO
|
||||
{- | Datatype containing the necessary information for a single shader. -}
|
||||
data FullShader a = FullShader
|
||||
{ _shaderProgram :: Program
|
||||
, _shaderUniform :: UniformLocation
|
||||
, _shaderMatrixUniform :: UniformLocation
|
||||
, _shaderVAO :: VAO
|
||||
, _shaderPokeStrategy :: a -> [[[Float]]]-- -> F.FoldM IO RenderType Int
|
||||
, _shaderDrawPrimitive :: PrimitiveMode
|
||||
|
||||
Reference in New Issue
Block a user