Replace explicit matrix uniforms with single ubo
This commit is contained in:
@@ -1,7 +1,6 @@
|
||||
#version 430 core
|
||||
layout (location = 0) in vec4 params;
|
||||
layout (location = 1) in vec2 texCoor;
|
||||
uniform mat4 worldMat;
|
||||
void main()
|
||||
{
|
||||
gl_Position = vec4(0,0,0,0);
|
||||
|
||||
@@ -1,11 +1,9 @@
|
||||
#version 430 core
|
||||
layout (points) in;
|
||||
layout (triangle_strip, max_vertices = 4) out;
|
||||
layout (std140, binding = 0) uniform TheMat { mat4 theMat; } ;
|
||||
out float lum;
|
||||
out vec2 dField;
|
||||
|
||||
uniform mat4 worldMat;
|
||||
|
||||
void main()
|
||||
{
|
||||
lum = gl_in[0].gl_Position.w;
|
||||
@@ -13,16 +11,16 @@ void main()
|
||||
float gRad = gl_in[0].gl_Position.z;
|
||||
|
||||
dField = vec2 ( 1, 1);
|
||||
gl_Position = worldMat * vec4 (cenPos.x + gRad, cenPos.y + gRad, -0 , 1);
|
||||
gl_Position = theMat * vec4 (cenPos.x + gRad, cenPos.y + gRad, -0 , 1);
|
||||
EmitVertex();
|
||||
dField = vec2 (-1, 1);
|
||||
gl_Position = worldMat * vec4 (cenPos.x - gRad, cenPos.y + gRad, -0 , 1);
|
||||
gl_Position = theMat * vec4 (cenPos.x - gRad, cenPos.y + gRad, -0 , 1);
|
||||
EmitVertex();
|
||||
dField = vec2 ( 1,-1);
|
||||
gl_Position = worldMat * vec4 (cenPos.x + gRad, cenPos.y - gRad, -0 , 1);
|
||||
gl_Position = theMat * vec4 (cenPos.x + gRad, cenPos.y - gRad, -0 , 1);
|
||||
EmitVertex();
|
||||
dField = vec2 (-1,-1);
|
||||
gl_Position = worldMat * vec4 (cenPos.x - gRad, cenPos.y - gRad, -0 , 1);
|
||||
gl_Position = theMat * vec4 (cenPos.x - gRad, cenPos.y - gRad, -0 , 1);
|
||||
EmitVertex();
|
||||
|
||||
EndPrimitive();
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
#version 430 core
|
||||
layout (location = 0) in vec4 position;
|
||||
uniform mat4 worldMat;
|
||||
void main()
|
||||
{
|
||||
gl_Position = position;
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
#version 430 core
|
||||
out vec4 fColor;
|
||||
|
||||
void main()
|
||||
{
|
||||
fColor = vec4 (0.9,0.5,0,0);
|
||||
|
||||
@@ -1,11 +1,9 @@
|
||||
#version 430 core
|
||||
layout (points) in;
|
||||
layout (triangle_strip, max_vertices = 11) out;
|
||||
|
||||
layout (std140, binding = 0) uniform TheMat { mat4 theMat; } ;
|
||||
uniform vec2 lightPos;
|
||||
uniform mat4 worldMat;
|
||||
|
||||
vec2 lightPosa = ( worldMat * vec4(lightPos,0,1) ).xy;
|
||||
vec2 lightPosa = ( theMat * vec4(lightPos,0,1) ).xy;
|
||||
|
||||
vec4 shift (vec4 p)
|
||||
{ return vec4 (p.xy + (200 * (p.xy-lightPos)), 0 , 1);
|
||||
@@ -28,14 +26,14 @@ vec4 p6 = shift(p2);
|
||||
vec4 p7 = vec4 (p6.xy,-0.5,1);
|
||||
vec4 p8 = vec4 (p5.xy,-0.5,1);
|
||||
|
||||
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;
|
||||
vec4 a1 = theMat * p1;
|
||||
vec4 a2 = theMat * p2;
|
||||
vec4 a3 = theMat * p3;
|
||||
vec4 a4 = theMat * p4;
|
||||
vec4 a5 = theMat * p5;
|
||||
vec4 a6 = theMat * p6;
|
||||
vec4 a7 = theMat * p7;
|
||||
vec4 a8 = theMat * p8;
|
||||
|
||||
gl_Position = a4; EmitVertex();
|
||||
gl_Position = a3; EmitVertex();
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
#version 430 core
|
||||
layout (location = 0) in vec4 poss;
|
||||
|
||||
void main()
|
||||
{
|
||||
gl_Position = poss;
|
||||
|
||||
@@ -1,11 +1,8 @@
|
||||
#version 430 core
|
||||
in vec2 cenPosT;
|
||||
in float lum;
|
||||
|
||||
in vec3 dField;
|
||||
|
||||
out vec4 fColor;
|
||||
|
||||
void main()
|
||||
{
|
||||
float c = pow (1 - min(1, dot(dField,dField)) , 2) * lum ;
|
||||
|
||||
@@ -1,14 +1,11 @@
|
||||
#version 430 core
|
||||
layout (points) in;
|
||||
layout (triangle_strip, max_vertices = 4) out;
|
||||
|
||||
layout (std140, binding = 0) uniform TheMat { mat4 theMat; } ;
|
||||
out vec3 dField;
|
||||
out float lum;
|
||||
|
||||
uniform vec2 lightPos;
|
||||
uniform mat4 worldMat;
|
||||
uniform vec2 radLum;
|
||||
|
||||
float isLHS (vec2 startV, vec2 testV)
|
||||
{
|
||||
return sign( -startV.x * testV.y + startV.y * testV.x);
|
||||
@@ -31,10 +28,10 @@ if (isLHS (p1.xy - lightPos, p2.xy - lightPos) < 0)
|
||||
vec2 d1 = p1.xy - lightPos;
|
||||
vec2 d2 = p2.xy - lightPos;
|
||||
|
||||
vec4 a1 = shiftCloser( worldMat * p1 );
|
||||
vec4 a2 = shiftCloser( worldMat * p2 );
|
||||
vec4 a3 = shiftCloser( worldMat * p3 );
|
||||
vec4 a4 = shiftCloser( worldMat * p4 );
|
||||
vec4 a1 = shiftCloser( theMat * p1 );
|
||||
vec4 a2 = shiftCloser( theMat * p2 );
|
||||
vec4 a3 = shiftCloser( theMat * p3 );
|
||||
vec4 a4 = shiftCloser( theMat * p4 );
|
||||
|
||||
dField = vec3( d1.x/rad, d1.y/rad, 0);
|
||||
gl_Position = a1;
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
#version 430 core
|
||||
layout (location = 0) in vec4 poss;
|
||||
|
||||
void main()
|
||||
{
|
||||
gl_Position = poss;
|
||||
|
||||
@@ -1,9 +1,7 @@
|
||||
#version 430 core
|
||||
in vec3 vTexPos;
|
||||
out vec4 fColor;
|
||||
|
||||
uniform sampler2DArray tilesetSampler;
|
||||
|
||||
void main()
|
||||
{
|
||||
fColor = texture(tilesetSampler, vTexPos);
|
||||
|
||||
@@ -1,12 +1,10 @@
|
||||
#version 430 core
|
||||
layout (location = 0) in vec3 pos;
|
||||
layout (location = 1) in vec3 texPos;
|
||||
layout (std140, binding = 0) uniform TheMat { mat4 theMat; } ;
|
||||
out vec3 vTexPos;
|
||||
|
||||
uniform mat4 worldMat;
|
||||
|
||||
void main()
|
||||
{
|
||||
gl_Position = worldMat * vec4(pos,1.0) ;
|
||||
gl_Position = theMat * vec4(pos,1.0) ;
|
||||
vTexPos = texPos;
|
||||
}
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
layout (location = 0) in vec2 pos;
|
||||
layout (location = 1) in vec2 texPos;
|
||||
out vec2 vTexPos;
|
||||
|
||||
void main()
|
||||
{
|
||||
gl_Position = vec4(pos,0,1);
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
layout (location = 0) in vec2 pos;
|
||||
layout (location = 1) in vec2 texPos;
|
||||
out vec2 vTexPos;
|
||||
|
||||
void main()
|
||||
{
|
||||
gl_Position = vec4(pos,0,1);
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
layout (location = 0) in vec2 pos;
|
||||
layout (location = 1) in vec2 texPos;
|
||||
out vec2 vTexPos;
|
||||
|
||||
void main()
|
||||
{
|
||||
gl_Position = vec4(pos,0,1);
|
||||
|
||||
@@ -1,12 +1,10 @@
|
||||
#version 430 core
|
||||
layout (location = 0) in vec3 pos;
|
||||
layout (location = 1) in vec2 texPos;
|
||||
layout (std140, binding = 0) uniform TheMat { mat4 theMat; } ;
|
||||
out vec2 vTexPos;
|
||||
|
||||
uniform mat4 worldMat;
|
||||
|
||||
void main()
|
||||
{
|
||||
gl_Position = worldMat * vec4(pos,1.0) ;
|
||||
gl_Position = theMat * vec4(pos,1.0) ;
|
||||
vTexPos = texPos;
|
||||
}
|
||||
|
||||
@@ -1,12 +1,9 @@
|
||||
#version 430 core
|
||||
layout (points) in;
|
||||
layout (triangle_strip, max_vertices = 4) out;
|
||||
|
||||
layout (std140, binding = 0) uniform TheMat { mat4 theMat; } ;
|
||||
in vec4 vColor [];
|
||||
out vec4 gColor;
|
||||
|
||||
uniform mat4 worldMat;
|
||||
|
||||
// consider using isLHS to check if the wall is facing the center
|
||||
// this needs the view from point
|
||||
float isLHS (vec2 startV, vec2 testV)
|
||||
@@ -21,16 +18,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 = worldMat * p1;
|
||||
vec4 a2 = worldMat * p2;
|
||||
vec4 a1 = theMat * p1;
|
||||
vec4 a2 = theMat * 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 = worldMat * p3;
|
||||
vec4 a4 = worldMat * p4;
|
||||
vec4 a3 = theMat * p3;
|
||||
vec4 a4 = theMat * p4;
|
||||
|
||||
gl_Position = a1; EmitVertex();
|
||||
gl_Position = a3; EmitVertex();
|
||||
|
||||
@@ -1,9 +1,7 @@
|
||||
#version 430 core
|
||||
layout (location = 0) in vec4 poss;
|
||||
layout (location = 1) in vec4 color;
|
||||
|
||||
out vec4 vColor;
|
||||
|
||||
void main()
|
||||
{
|
||||
gl_Position = poss;
|
||||
|
||||
@@ -1,13 +1,9 @@
|
||||
#version 430 core
|
||||
in vec2 tPos;
|
||||
in vec4 gColor;
|
||||
|
||||
uniform sampler2D tex;
|
||||
|
||||
out vec4 fColor;
|
||||
|
||||
void main()
|
||||
{
|
||||
fColor = gColor * texture(tex,tPos);
|
||||
// fColor = gColor;
|
||||
}
|
||||
|
||||
@@ -1,13 +1,10 @@
|
||||
#version 430 core
|
||||
layout (points) in;
|
||||
layout (triangle_strip, max_vertices = 4) out;
|
||||
|
||||
layout (std140, binding = 0) uniform TheMat { mat4 theMat; } ;
|
||||
in vec4 vColor [];
|
||||
out vec4 gColor;
|
||||
out vec2 tPos;
|
||||
|
||||
uniform mat4 worldMat;
|
||||
|
||||
// consider using isLHS to check if the wall is facing the center
|
||||
float isLHS (vec2 startV, vec2 testV)
|
||||
{
|
||||
@@ -23,10 +20,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 = worldMat * p1;
|
||||
vec4 a2 = worldMat * p2;
|
||||
vec4 a3 = worldMat * p3;
|
||||
vec4 a4 = worldMat * p4;
|
||||
vec4 a1 = theMat * p1;
|
||||
vec4 a2 = theMat * p2;
|
||||
vec4 a3 = theMat * p3;
|
||||
vec4 a4 = theMat * p4;
|
||||
|
||||
tPos = vec2 ( 1,-1) ; gl_Position = a1; EmitVertex();
|
||||
tPos = vec2 ( 1, 1) ; gl_Position = a3; EmitVertex();
|
||||
|
||||
@@ -1,9 +1,7 @@
|
||||
#version 430 core
|
||||
layout (location = 0) in vec4 poss;
|
||||
layout (location = 1) in vec4 color;
|
||||
|
||||
out vec4 vColor;
|
||||
|
||||
void main()
|
||||
{
|
||||
gl_Position = poss;
|
||||
|
||||
+1
-8
@@ -56,6 +56,7 @@ doDrawing pdata w = do
|
||||
pic = worldPictures w
|
||||
wallPoints = map fst wallPointsCol
|
||||
|
||||
-- set the coordinate uniform ready for drawing elements using world coordinates
|
||||
let pmat = perspectiveMatrixb rot camzoom trans wins viewFroms
|
||||
withArray pmat $ \ptr ->
|
||||
bufferData UniformBuffer $=
|
||||
@@ -64,9 +65,6 @@ doDrawing pdata w = do
|
||||
,StreamDraw
|
||||
)
|
||||
|
||||
-- set the coordinate uniforms ready for drawing elements using world coordinates
|
||||
--setIsoMatrixUniforms pdata rot camzoom trans wins
|
||||
setPerpMatrixUniforms pdata rot camzoom trans wins viewFroms
|
||||
depthFunc $= Just Less
|
||||
-- draw the lightmap. Probably changes the bound framebufferObject
|
||||
createLightMap pdata (w ^. config . shadow_resolution) wallPoints lightPoints viewFroms
|
||||
@@ -109,7 +107,6 @@ doDrawing pdata w = do
|
||||
renderBlankWalls pdata windowPoints
|
||||
|
||||
depthMask $= Enabled
|
||||
forM_ (_pictureShaders pdata) $ setPerpMatUniform rot camzoom trans wins viewFroms
|
||||
depthFunc $= Just Lequal
|
||||
_ <- renderFoldable pdata $ picToLTree (Just 0) (foregroundPics w)
|
||||
|
||||
@@ -132,10 +129,6 @@ doDrawing pdata w = do
|
||||
drawShader (_grayscaleShader pdata) 4
|
||||
blend $= Enabled
|
||||
|
||||
-- reset the coordinate uniforms for pictures that are drawn wrt to window
|
||||
-- coordinates
|
||||
resetShaderUniforms (map extractProgAndUnis $ _pictureShaders pdata)
|
||||
|
||||
let pmata = perspectiveMatrixc 0 1 (0,0) (2,2)
|
||||
withArray pmata $ \ptr ->
|
||||
bufferData UniformBuffer $=
|
||||
|
||||
@@ -195,26 +195,6 @@ renderBackground pdata rot camZoom (tranx,trany) (winx,winy) = do
|
||||
textureBinding Texture2D $= _textureObject <$> _shaderTexture (_backgroundShader pdata)
|
||||
drawArrays Points 0 1
|
||||
|
||||
setPerpMatrixUniforms
|
||||
:: RenderData
|
||||
-> Float -- ^ Rotation
|
||||
-> Float -- ^ Zoom
|
||||
-> (Float,Float) -- ^ Translation
|
||||
-> (Float,Float) -- ^ Window size
|
||||
-> (Float,Float) -- ^ ViewFrom
|
||||
-> IO ()
|
||||
setPerpMatrixUniforms pdata rot czoom trans wins vfs = mapM_ (setPerpMatUniform rot czoom trans wins vfs)
|
||||
( _lightingFloorShader pdata
|
||||
: _lightingWallShader pdata
|
||||
: _lightingOccludeShader pdata
|
||||
: _backgroundShader pdata
|
||||
: _textureShader pdata
|
||||
: _textureArrayShader pdata
|
||||
: _wallBlankShader pdata
|
||||
: _wallTextureShader pdata
|
||||
: _pictureShaders pdata
|
||||
)
|
||||
|
||||
renderShader
|
||||
:: Foldable f
|
||||
=> FullShader
|
||||
|
||||
@@ -56,15 +56,12 @@ preloadRender = do
|
||||
-- textured wallShader
|
||||
wlTexture <- makeShader "wall/texture" [vert,geom,frag] [4,4] Points pokeWPColStrat
|
||||
>>= addTexture "data/texture/grayscaleDirt.png"
|
||||
|
||||
---- texture shader
|
||||
textShad <- makeShader "texture/simpleWorld" [vert,frag] [3,2] Triangles poke32
|
||||
>>= addTexture "data/texture/ayene_wooden_floor.png"
|
||||
|
||||
---- texture array shader
|
||||
textArrayShad <- makeShader "texture/array" [vert,frag] [3,3] Triangles poke33
|
||||
>>= addTextureArray "data/texture/ayene_wooden_floor.png"
|
||||
|
||||
-- framebuffer for lighting
|
||||
(fbo,fboTO,fboRBO) <- setupFramebufferWithStencil
|
||||
framebuf2 <- setupFramebufferWithStencil
|
||||
@@ -91,7 +88,6 @@ preloadRender = do
|
||||
, _fbo3 = framebuf3
|
||||
, _matUBO = theUBO
|
||||
}
|
||||
|
||||
cornerList :: [[Float]]
|
||||
cornerList =
|
||||
[[-1, 1,0,1]
|
||||
@@ -99,17 +95,6 @@ cornerList =
|
||||
,[-1,-1,0,0]
|
||||
,[ 1,-1,1,0]
|
||||
]
|
||||
-- potential drawing setup
|
||||
---- swapInterval $= ImmediateUpdates
|
||||
-- GL.blend $= GL.Enabled
|
||||
---- GL.depthMask $= GL.Enabled
|
||||
-- GL.blendEquation $= GL.FuncAdd
|
||||
-- GL.blendFunc $= (GL.SrcAlpha,GL.OneMinusSrcAlpha)
|
||||
-- GL.clearColor $= GL.Color4 0 0.5 0 1
|
||||
-- GL.clearDepth $= (200)
|
||||
-- swapInterval $= ImmediateUpdates
|
||||
-- GL.lineSmooth $= GL.Enabled
|
||||
|
||||
--------------------end preloadRender
|
||||
|
||||
setupFramebufferWithStencil :: IO (FramebufferObject, TextureObject,RenderbufferObject)
|
||||
|
||||
@@ -3,11 +3,7 @@ module Shader
|
||||
, bindShaderBuffers
|
||||
, drawShader
|
||||
, drawShaders
|
||||
, setShaderUniforms
|
||||
, resetShaderUniforms
|
||||
, extractProgAndUnis
|
||||
, freeShaderPointers
|
||||
, setPerpMatUniform
|
||||
) where
|
||||
import Geometry.Data
|
||||
import Shader.Data
|
||||
@@ -21,9 +17,6 @@ import Graphics.Rendering.OpenGL hiding (Point,translate,scale,imageHeight)
|
||||
import Linear.Matrix
|
||||
import Linear.V4
|
||||
|
||||
extractProgAndUnis :: FullShader -> (Program,UniformLocation)
|
||||
extractProgAndUnis s = (_shaderProgram s, _shaderMatrixUniform s)
|
||||
|
||||
bindArrayBuffers :: Int -> VBO -> IO ()
|
||||
bindArrayBuffers numVs theVBO = do
|
||||
bindBuffer ArrayBuffer $= Just (_vbo theVBO)
|
||||
@@ -49,49 +42,5 @@ drawShader fs i = do
|
||||
_ -> return ()
|
||||
drawArrays (_shaderDrawPrimitive fs) 0 (fromIntegral i)
|
||||
|
||||
resetShaderUniforms :: [(Program, UniformLocation)] -> IO ()
|
||||
{-# INLINE resetShaderUniforms #-}
|
||||
resetShaderUniforms = setShaderUniforms 0 1 (0,0) (2,2)
|
||||
|
||||
setShaderUniforms :: Float -> Float -> Point2 -> Point2 -> [(Program,UniformLocation)] -> IO ()
|
||||
{-# INLINE setShaderUniforms #-}
|
||||
setShaderUniforms rot czoom (tranx,trany) (winx,winy) fss = do
|
||||
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)
|
||||
let 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)
|
||||
let 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)
|
||||
let wmat = scalMat !*! rotMat !*! tranMat
|
||||
vToL (V4 a b c d) = [a,b,c,d]
|
||||
wmata <- (newMatrix RowMajor $ concatMap vToL $ vToL wmat) :: IO (GLmatrix GLfloat)
|
||||
-- set common uniforms
|
||||
forM_ fss $ \shad -> do
|
||||
currentProgram $= Just (fst shad)
|
||||
uniform (snd shad) $= wmata
|
||||
|
||||
setPerpMatUniform
|
||||
:: Float -- ^ rotation
|
||||
-> Float -- ^ zoom
|
||||
-> Point2 -- ^ translation
|
||||
-> Point2 -- ^ window size
|
||||
-> Point2 -- ^ viewfrom point
|
||||
-> FullShader
|
||||
-> IO ()
|
||||
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 (_shaderMatrixUniform shad) $= pmat
|
||||
return ()
|
||||
|
||||
freeShaderPointers :: FullShader -> IO ()
|
||||
freeShaderPointers fs = free $ _vboPointer $ _vaoVBO $ _shaderVAO fs
|
||||
|
||||
@@ -25,11 +25,10 @@ makeShader
|
||||
-> (RenderType -> [[Float]]) -- ^ Poke strategy: method for creating a list of vertex data to be bound
|
||||
-> IO FullShader
|
||||
makeShader s shaderlist sizes pm renStrat = do
|
||||
(prog,unis) <- makeSourcedShader s shaderlist
|
||||
vaob <- setupVAO sizes
|
||||
prog <- makeSourcedShader s shaderlist
|
||||
vaob <- setupVAO sizes
|
||||
return $ FullShader
|
||||
{ _shaderProgram = prog
|
||||
, _shaderMatrixUniform = unis
|
||||
, _shaderVAO = vaob
|
||||
, _shaderPokeStrategy = renStrat
|
||||
, _shaderDrawPrimitive = pm
|
||||
@@ -40,12 +39,11 @@ makeShader s shaderlist sizes pm renStrat = do
|
||||
-- | Compile shader and get its uniform locations.
|
||||
-- supposes the shader code is in the shader folder, with the string names
|
||||
-- followed by .vert/.geom/.frag.
|
||||
makeSourcedShader :: String -> [ShaderType] -> IO (Program, UniformLocation)
|
||||
makeSourcedShader :: String -> [ShaderType] -> IO Program
|
||||
makeSourcedShader s sts = do
|
||||
sources <- forM sts $ \st -> BS.readFile ("shader/" ++ s ++ shaderTypeExt st)
|
||||
prog <- makeShaderProgram s $ zip sts sources
|
||||
uniformLocations <- uniformLocation prog "worldMat"
|
||||
return (prog,uniformLocations)
|
||||
return prog
|
||||
|
||||
shaderTypeExt :: ShaderType -> String
|
||||
shaderTypeExt VertexShader = ".vert"
|
||||
|
||||
@@ -12,7 +12,6 @@ module Shader.Data
|
||||
, vaoVBO
|
||||
|
||||
, shaderProgram
|
||||
, shaderMatrixUniform
|
||||
, shaderVAO
|
||||
, shaderPokeStrategy
|
||||
, shaderDrawPrimitive
|
||||
@@ -45,7 +44,6 @@ data VBO = VBO
|
||||
{- | Datatype containing the necessary information for a single shader. -}
|
||||
data FullShader = FullShader
|
||||
{ _shaderProgram :: Program
|
||||
, _shaderMatrixUniform :: UniformLocation
|
||||
, _shaderVAO :: VAO
|
||||
, _shaderPokeStrategy :: RenderType -> [[Float]]-- -> F.FoldM IO RenderType Int
|
||||
, _shaderDrawPrimitive :: PrimitiveMode
|
||||
|
||||
Reference in New Issue
Block a user