From 5e9d337288b56beeb3215b4ade627d652b29b6bc Mon Sep 17 00:00:00 2001 From: justin Date: Wed, 12 Nov 2025 22:54:43 +0000 Subject: [PATCH] Cleanup shadows --- shader/lighting/cap.geom | 38 -------- shader/lighting/capTest.geom | 57 ------------ shader/lighting/floor.geom | 27 ------ shader/lighting/lineShadow.geom | 80 ----------------- shader/lighting/lineShadow.vert | 39 +++++---- shader/lighting/wallShadow.geom | 92 ------------------- shader/lighting/wallShadow.vert | 16 ++-- src/Data/Preload/Render.hs | 1 + src/Preload/Render.hs | 5 ++ src/Render.hs | 40 ++------- tags | 151 ++++++++++++++++---------------- 11 files changed, 118 insertions(+), 428 deletions(-) delete mode 100644 shader/lighting/cap.geom delete mode 100644 shader/lighting/capTest.geom delete mode 100644 shader/lighting/floor.geom delete mode 100644 shader/lighting/lineShadow.geom delete mode 100644 shader/lighting/wallShadow.geom diff --git a/shader/lighting/cap.geom b/shader/lighting/cap.geom deleted file mode 100644 index 2e7007085..000000000 --- a/shader/lighting/cap.geom +++ /dev/null @@ -1,38 +0,0 @@ -#version 450 core -layout (triangles) in; -layout (triangle_strip, max_vertices = 3) out; -layout (std140, binding = 0) uniform TheMat { mat4 theMat; } ; -layout(location=0)uniform vec3 lightPos; -in float drawbit[]; -// the following code is duplicated in lineShadow.geom, should not be changed on its own -vec4 projNear (vec4 pos) -{ - // note we project to a specific height - // this is quite brittle, not ideal - vec3 dir = pos.xyz - lightPos ; - float a = (100 - pos.z) / dir.z ; - vec2 xy = (pos.xyz + a * dir).xy ; - return vec4 ( xy, 100 , 1) ; -} -void main() -{ - vec4 p0 = gl_in[0].gl_Position ; - vec4 p1 = gl_in[1].gl_Position ; - vec4 p2 = gl_in[2].gl_Position ; - if ( //if Light Source is below all vertices, draw cap - // TODO think about when LS is beside the object - (drawbit[0] == 1) - && ( p0.z - lightPos.z > 0 ) - && ( p1.z - lightPos.z > 0 ) - && ( p2.z - lightPos.z > 0 ) - ) - { - // the front cap - vec4 v1 = vec4 (0,0,1,0) ; - gl_Position = theMat * projNear(p0); EmitVertex(); - gl_Position = theMat * projNear(p2); EmitVertex(); - gl_Position = theMat * projNear(p1); EmitVertex(); - EndPrimitive(); - } - else {} -} diff --git a/shader/lighting/capTest.geom b/shader/lighting/capTest.geom deleted file mode 100644 index 65e88db21..000000000 --- a/shader/lighting/capTest.geom +++ /dev/null @@ -1,57 +0,0 @@ -#version 450 core -// an attempt to test whether a geometry surface occludes the camera from a -// light source -layout (triangles) in; -layout (triangle_strip, max_vertices = 4) out; -layout (std140, binding = 0) uniform TheMat { mat4 theMat; } ; -uniform vec3 lightPos; -uniform vec2 camPos; -void main() -{ - vec3 p0 = gl_in[0].gl_Position.xyz ; - vec3 p1 = gl_in[1].gl_Position.xyz ; - vec3 p2 = gl_in[2].gl_Position.xyz ; - - // first determine intersection point (if any) - - vec3 u = p1 - p0 ; - vec3 v = p2 - p0 ; - vec3 n = cross (u,v) ; - vec3 dir = vec3 (camPos, 100) - lightPos ; - vec3 w0 = p0 - lightPos ; - float a = dot(n, w0) ; - float b = dot(n,dir) ; - if (abs(b) < 0.00001) {} - else { - float r = a / b ; - if (r < 0.0) {} - else { - vec3 ip = lightPos + r * dir ; - float uu, uv, vv, wu, wv, D; - uu = dot(u,u); - uv = dot(u,v); - vv = dot(v,v); - vec3 w = ip - p0; - wu = dot (w,u); - wv = dot (w,v); - D = uv * uv - uu * vv; - //get and test parametric coords - float s, t; - s = (uv * wv - vv * wu) / D; - if (s < 0.0 || s > 1.0) {} - else - { - t = (uv * wu - uu * wv) / D; - if (t < 0.0 || (s + t) > 1.0) {} - else - { - gl_Position = vec4(-1,-1,50,1); EmitVertex(); - gl_Position = vec4(-1, 1,50,1); EmitVertex(); - gl_Position = vec4( 1,-1,50,1); EmitVertex(); - gl_Position = vec4( 1, 1,50,1); EmitVertex(); - EndPrimitive(); - } - } - } - } -} diff --git a/shader/lighting/floor.geom b/shader/lighting/floor.geom deleted file mode 100644 index ca3ce5aa0..000000000 --- a/shader/lighting/floor.geom +++ /dev/null @@ -1,27 +0,0 @@ -#version 450 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; -void main() -{ - lum = gl_in[0].gl_Position.w; - vec4 cenPos = vec4( gl_in[0].gl_Position.xy, 0.1 , 1); - float gRad = gl_in[0].gl_Position.z; - - dField = vec2 ( 1, 1); - gl_Position = theMat * vec4 (cenPos.x + gRad, cenPos.y + gRad, 0.1 , 1); - EmitVertex(); - dField = vec2 (-1, 1); - gl_Position = theMat * vec4 (cenPos.x - gRad, cenPos.y + gRad, 0.1 , 1); - EmitVertex(); - dField = vec2 ( 1,-1); - gl_Position = theMat * vec4 (cenPos.x + gRad, cenPos.y - gRad, 0.1 , 1); - EmitVertex(); - dField = vec2 (-1,-1); - gl_Position = theMat * vec4 (cenPos.x - gRad, cenPos.y - gRad, 0.1 , 1); - EmitVertex(); - - EndPrimitive(); -} diff --git a/shader/lighting/lineShadow.geom b/shader/lighting/lineShadow.geom deleted file mode 100644 index fe83d9fcc..000000000 --- a/shader/lighting/lineShadow.geom +++ /dev/null @@ -1,80 +0,0 @@ -#version 450 core -layout(lines_adjacency) in; -layout(triangle_strip, max_vertices = 4) out; -layout(std140, binding = 0) uniform TheMat { mat4 theMat; }; -layout(location=0) uniform vec3 lightPos; -layout(location=1) uniform float radiusUniform; -float closestPointOnLineParam3 (vec3 a, vec3 b, vec3 p) { - return dot(p - a,b-a) / dot(b-a,b-a); -} -vec3 closestPointOnSeg3 (vec3 a,vec3 b, vec3 p) { - float x = closestPointOnLineParam3(a,b,p); - if (x < 0) { - return a; - } else{ if (x > 1) { return b; } - { return a + (x * (b- a));} - } -} -vec4 shift(vec4 p) { return (vec4(p.xyz + (10000 * (p.xyz - lightPos)), 1)); } -vec4 shiftBy(float x, vec4 p) { - return (vec4(lightPos + (x * normalize(p.xyz - lightPos)), 1)); -} -// copied from lighting/cap.geom, should not be changed on its own -vec4 projNear(vec4 pos) { - // note we project to a specific height - // this is quite brittle, not ideal - vec3 dir = pos.xyz - lightPos; - float a = (100 - pos.z) / dir.z; - vec2 xy = (pos.xyz + a * dir).xy; - return vec4(xy, 100, 1); -} -vec4 shiftNear(vec4 pos) -{ - vec4 sp = shift(pos); - if (sp.z > 100) { - return projNear(pos); - } else { - return sp; - } -} -void main() { - vec4 p0 = gl_in[0].gl_Position; - vec4 p1 = gl_in[1].gl_Position; - vec3 closepoint = closestPointOnSeg3(p0.xyz,p1.xyz,lightPos); - float ru2 = radiusUniform * radiusUniform; - vec4 mid = 0.5 * (p0 + p1); - vec3 n0a = gl_in[2].gl_Position.xyz; - vec3 n1a = gl_in[3].gl_Position.xyz; - vec3 n0 = cross(p1.xyz - p0.xyz, n0a - p0.xyz); - vec3 n1 = cross(p0.xyz - p1.xyz, n1a - p1.xyz); - vec3 lightDir = p0.xyz - lightPos.xyz; - vec3 lightDir2 = p1.xyz - lightPos.xyz; - // first test if the edge is part of the silhouette - // that is, if the normals of the faces connected by the edge point are in - // "different directions" wrt the light direction - if (dot(n0, lightDir) * dot(n1, lightDir) <= 0 && - (dot(lightDir, lightDir) < ru2 || dot(lightDir2, lightDir2) < ru2)) - // using <= rather than < seems to get rid of overlapping shadow - // artefacts - { - vec4 p2 = shiftNear(p0); - vec4 p3 = shiftNear(p1); - gl_Position = theMat * p0; - EmitVertex(); - if (dot(n0, lightDir) > 0) { - gl_Position = theMat * p2; - EmitVertex(); - gl_Position = theMat * p1; - EmitVertex(); - } else { - gl_Position = theMat * p1; - EmitVertex(); - gl_Position = theMat * p2; - EmitVertex(); - } - gl_Position = theMat * p3; - EmitVertex(); - EndPrimitive(); - } else { - } -} diff --git a/shader/lighting/lineShadow.vert b/shader/lighting/lineShadow.vert index b41bf9019..7562f9474 100644 --- a/shader/lighting/lineShadow.vert +++ b/shader/lighting/lineShadow.vert @@ -1,28 +1,29 @@ #version 450 core struct PosColNorm { vec4 pos; vec4 dummy; }; layout (std140, binding = 0) uniform TheMat { mat4 theMat; } ; +layout (std140, binding = 1) uniform TheLight { vec4 lightPos; vec4 colrad; }; layout (std430, binding = 3) readonly buffer Data { PosColNorm data[]; }; layout (std430, binding = 5) readonly buffer Indices { uint indices[]; }; -layout(location=0)uniform vec3 lightPos; -layout(location=1)uniform float radiusUniform; float closestPointOnLineParam3 (vec3 a, vec3 b, vec3 p) { return dot(p - a,b-a) / dot(b-a,b-a); } vec3 closestPointOnSeg3 (vec3 a,vec3 b, vec3 p) { float x = closestPointOnLineParam3(a,b,p); - if (x < 0) { - return a; - } else{ return (x > 1 ? b: a + (x * (b- a))); } + return (x < 0 + ? a + : (x > 1 + ? b + : a + (x * (b- a)))) ; } -vec4 shift(vec4 p) { return (vec4(p.xyz + (10000 * (p.xyz - lightPos)), 1)); } +vec4 shift(vec4 p) { return (vec4(p.xyz + (10000 * (p.xyz - lightPos.xyz)), 1)); } vec4 shiftBy(float x, vec4 p) { - return (vec4(lightPos + (x * normalize(p.xyz - lightPos)), 1)); + return (vec4(lightPos.xyz + (x * normalize(p.xyz - lightPos.xyz)), 1)); } vec4 projNear (vec4 pos) { // note we project to a specific height // this is quite brittle, not ideal - vec3 dir = pos.xyz - lightPos ; + vec3 dir = pos.xyz - lightPos.xyz ; float a = (100 - pos.z) / dir.z ; vec2 xy = (pos.xyz + a * dir).xy ; return vec4 ( xy, 100 , 1) ; @@ -31,11 +32,13 @@ vec4 shiftNear(vec4 pos) { vec4 sp = shift(pos); return (sp.z > 100 ? projNear(pos) : sp); -} -int ks[6] = - {0,1,2 // 2--3 - ,2,1,3 // | | - }; // 0--1 +} +// Output 6 vertices for 4 data inputs +int ks[6] = // Inputdata: n1a Shadow: + {0,1,2 // 2--3 / p2--p3 + ,2,1,3 // | | p0---p1 / | + }; // 0--1 / / | + // n0a p0----p1 void main() { int k = ks[gl_VertexID % 6]; @@ -44,8 +47,8 @@ void main() vec4 p1 = data[indices[i0+1]].pos; vec3 n0a = data[indices[i0+2]].pos.xyz; vec3 n1a = data[indices[i0+3]].pos.xyz; - vec3 closepoint = closestPointOnSeg3(p0.xyz,p1.xyz,lightPos); - float ru2 = radiusUniform * radiusUniform; + vec3 closepoint = closestPointOnSeg3(p0.xyz,p1.xyz,lightPos.xyz); + float ru2 = colrad.w * colrad.w; vec4 mid = 0.5 * (p0 + p1); vec3 n0 = cross(p1.xyz - p0.xyz, n0a - p0.xyz); vec3 n1 = cross(p0.xyz - p1.xyz, n1a - p1.xyz); @@ -53,15 +56,15 @@ void main() vec3 lightDir2 = p1.xyz - lightPos.xyz; vec4 p2 = shiftNear(p0); vec4 p3 = shiftNear(p1); - // first test if the edge is part of the silhouette - // that is, if the normals of the faces connected by the edge point are in + // test if the edge is part of the silhouette + // that is, if the slopes of the faces connected to the edge are in // "different directions" wrt the light direction if (dot(n0, lightDir) * dot(n1, lightDir) <= 0 && (dot(lightDir, lightDir) < ru2 || dot(lightDir2, lightDir2) < ru2)) // using <= rather than < seems to get rid of overlapping shadow // artefacts { - if (dot(n0, lightDir) > 0) + if (dot(n0, lightDir) < 0) { vec4 sp[4] = {p1,p0,p3,p2}; gl_Position = theMat * sp[k];} diff --git a/shader/lighting/wallShadow.geom b/shader/lighting/wallShadow.geom deleted file mode 100644 index 468b5f5eb..000000000 --- a/shader/lighting/wallShadow.geom +++ /dev/null @@ -1,92 +0,0 @@ -#version 450 core -layout(points) in; -//layout(triangle_strip, max_vertices = 18) out; -layout(triangle_strip, max_vertices = 9) out; -layout(std140, binding = 0) uniform TheMat { mat4 theMat; }; -layout(location=0) uniform vec3 lightPos; -layout(location=1) uniform float rad; -//float rad = rad; -// Preprocessed to include ../functions.glsl -float closestPointOnLineParam (vec2 a, vec2 b, vec2 p) { - return dot(p - a,b-a) / dot(b-a,b-a); -} -vec2 closestPointOnSeg (vec2 a,vec2 b, vec2 p) { - float x = closestPointOnLineParam(a,b,p); - if (x < 0) { - return a; - } else{ if (x > 1) { return b; } - { return a + (x * (b- a));} - } -} -// End include 2023-03-13 15:33:44.438312149 UTC -vec2 closestPointOnLine (vec2 a,vec2 b, vec2 p) { - float x = closestPointOnLineParam(a,b,p); - return a + (x * (b- a)); -} -vec2 invclosestPointOnLine (vec2 a,vec2 b, vec2 p) { - float x = dot (p-a,p-a)/ dot(p-a,b-a); - return a + x*(b- a); -} -vec2 shift(vec2 p) { - return vec2(lightPos.xy + (rad * normalize(p - lightPos.xy))); -} -float detV(vec2 p, vec2 q) { - return p.x*q.y - p.y*q.x; -} -float isLHS(vec2 p, vec2 q) { - return sign(-detV(p,q)); -} -// the following does NOT check for division by zero: do not reuse this unless -// you are certain this cannot happen -vec2 intersectLL(vec2 p1,vec2 p2,vec2 q1,vec2 q2){ - float den = detV (p1-p2,q1-q2); - float t = detV (p1-q1,q1-q2); - return p1 + (t/den)*(p2-p1); -} -// constructs a "bridge" shape -void main() { - vec2 p1 = gl_in[0].gl_Position.xy; - vec2 p2 = gl_in[0].gl_Position.zw; - vec2 closepoint = closestPointOnSeg(p1,p2,lightPos.xy); - if (isLHS(p1 - lightPos.xy, p2 - lightPos.xy) < 0 && distance(closepoint,lightPos.xy) < rad) { - vec2 xxxy = p1 + (0.25 * (p2 -p1)); - vec2 xt = shift(xxxy); - vec2 xo = invclosestPointOnLine(lightPos.xy,p1,xt); - vec2 xyyy = p1 + (0.75 * (p2 -p1)); - vec2 yt = shift(xyyy); - vec2 yo = invclosestPointOnLine(lightPos.xy,p2,yt); - - vec2 xoo = (distance(xo, lightPos.xy) < distance(p1, lightPos.xy) - || distance(p1,lightPos.xy)>rad - ? p1 : xo); - vec2 yoo = (distance(yo, lightPos.xy) < distance(p2, lightPos.xy) - || distance(p2,lightPos.xy)>rad - ? p2 : yo); - - vec2 mo = intersectLL(xoo,xt,yoo,yt); - - vec2 closeshift = (rad * normalize(closepoint - lightPos.xy)) + lightPos.xy - closepoint; - vec2 shifto = (rad * normalize(closepoint - lightPos.xy)) + closepoint; - vec2 p1o = vec2( distance(p1,lightPos.xy) > rad ? p1 : shift(p1) ); - //vec2 p1o = xoo; - vec2 p2o = vec2( distance(p2,lightPos.xy) > rad ? p2 : shift(p2) ); - //vec2 p2o = yoo; - - gl_Position = theMat * vec4(p1o,-500,1); EmitVertex(); - gl_Position = theMat * vec4(p1,-500,1); EmitVertex(); - gl_Position = theMat * vec4(p1o,100,1); EmitVertex(); - gl_Position = theMat * vec4(p1,100,1); EmitVertex(); - gl_Position = theMat * vec4(shifto,100,1); EmitVertex(); - //gl_Position = theMat * vec4(xt,100,1); EmitVertex(); - //gl_Position = theMat * vec4(mo,100,1); EmitVertex(); - gl_Position = theMat * vec4(p2,100,1); EmitVertex(); - gl_Position = theMat * vec4(p2o,100,1); EmitVertex(); - gl_Position = theMat * vec4(p2,-500,1); EmitVertex(); - gl_Position = theMat * vec4(p2o,-500,1); EmitVertex(); - EndPrimitive(); - // be carefull with the winding... - - EndPrimitive(); - } else { - } -} diff --git a/shader/lighting/wallShadow.vert b/shader/lighting/wallShadow.vert index 49cde9a6c..2833e3af1 100644 --- a/shader/lighting/wallShadow.vert +++ b/shader/lighting/wallShadow.vert @@ -1,16 +1,16 @@ #version 450 core struct PosTex { vec4 pospos; vec4 texang; }; layout (std140, binding = 0) uniform TheMat { mat4 theMat; } ; +layout (std140, binding = 1) uniform TheLight { vec4 lightPos; vec4 colrad; }; layout (std430, binding = 2) readonly buffer Pos { PosTex data[]; }; -layout(location=0) uniform vec3 lightPos; -layout(location=1) uniform float rad; +float rad = colrad.w; int indices[18] = - {5,1,7 // 6----7 - ,7,1,3 // /| /| - ,7,3,6 // 2-+--3 | - ,6,3,2 // | 4 | 5 - ,6,2,4 // 0 1 - ,4,2,0 + {5,7,1 // 6----7 + ,7,3,1 // /| /| + ,7,6,3 // 2-+--3 | + ,6,2,3 // | 4 | 5 + ,6,4,2 // 0 1 + ,4,0,2 }; vec2 shift(vec2 p) { return vec2(lightPos.xy + (rad * normalize(p - lightPos.xy))); diff --git a/src/Data/Preload/Render.hs b/src/Data/Preload/Render.hs index 7719986e7..d51dd2163 100644 --- a/src/Data/Preload/Render.hs +++ b/src/Data/Preload/Render.hs @@ -42,6 +42,7 @@ data RenderData = RenderData , _fboLighting :: (FBO, TO) , _rboBaseBloom :: GLuint -- RenderbufferObject id , _matUBO :: GLuint -- BufferObject id + , _lightUBO :: GLuint -- BufferObject id -- , _winSSBO :: GLuint -- , _wallSSBO :: GLuint -- , _shapeSSBO :: GLuint diff --git a/src/Preload/Render.hs b/src/Preload/Render.hs index 2433d7dad..8f5efd5d1 100644 --- a/src/Preload/Render.hs +++ b/src/Preload/Render.hs @@ -40,6 +40,10 @@ preloadRender = do glNamedBufferStorage theUBO 64 nullPtr GL_DYNAMIC_STORAGE_BIT glBindBufferBase GL_UNIFORM_BUFFER 0 theUBO + lightubo <- mglCreate glCreateBuffers + glNamedBufferStorage lightubo 32 nullPtr GL_DYNAMIC_STORAGE_BIT + glBindBufferBase GL_UNIFORM_BUFFER 1 lightubo + winssbo <- mglCreate glCreateBuffers let winssbosize = sizeOf (0 :: Float) * 8 * 1024 glNamedBufferStorage winssbo (fromIntegral winssbosize) nullPtr GL_DYNAMIC_STORAGE_BIT @@ -222,6 +226,7 @@ preloadRender = do , _fboPos = fboPosName , _rboBaseBloom = rboBaseBloomName , _matUBO = theUBO + , _lightUBO = lightubo , _vboShapes = shVBO , _floorVBO = floorvbo , _floorShader = floorshader diff --git a/src/Render.hs b/src/Render.hs index bdfe5855c..22a15b10d 100644 --- a/src/Render.hs +++ b/src/Render.hs @@ -158,7 +158,9 @@ renderShadows shadrendertype nWalls nSils nCaps positiontexture normaltexture li -- 2. calculate lighting based on each fragment's position and normal -- TODO stencil out square around light! -- glEnable GL_SCISSOR_TEST + glDisable GL_CULL_FACE flip VFSM.mapM_ (VFSM.fromList lightPoints) $ \(V3 x y z, rad, V3 r g b) -> do + withArray [x,y,z,1,r,g,b,rad] $ glNamedBufferSubData (pdata ^. lightUBO) 0 32 -- note that the stencil shadows rely on the depth buffer -- glScissor 0 0 200 200 glDepthFunc GL_LESS @@ -172,51 +174,25 @@ renderShadows shadrendertype nWalls nSils nCaps positiontexture normaltexture li glDisable GL_CULL_FACE -- the first bit has been used to stencil out "ceilings" under which we never draw glStencilFunc GL_NOTEQUAL 128 255 + glBindVertexArray $ pdata ^. dummyVAO . vaoName --draw wall shadows glUseProgram shadwall - glUniform3f 0 x y z - glUniform1f 1 rad - --glBindVertexArray $ lwallShad ^. shaderVAO . vaoName -- Just (_vao $ _shadVAO lwallShad) - glBindVertexArray $ pdata ^. dummyVAO . vaoName -- Just (_vao $ _shadVAO lwallShad) glDrawArrays GL_TRIANGLES 0 (nWalls * 18) case shadrendertype of GeoObjShads -> do --draw silhouette shadows glEnable GL_DEPTH_CLAMP glUseProgram (_shaderUINT llinesShad) - glUniform3f 0 x y z - glUniform1f 1 rad - --glBindVertexArray (_vaoName $ _shaderVAO llinesShad) - glBindVertexArray (pdata ^. dummyVAO . vaoName) - glDrawArrays - GL_TRIANGLES - 0 - ((fromIntegral nSils * 6) `div` 4) - --glDrawElements - -- (_unPrimitiveMode $ _shaderPrimitive llinesShad) - -- (fromIntegral nSils) - -- GL_UNSIGNED_INT - -- nullPtr + glDrawArrays GL_TRIANGLES 0 ((fromIntegral nSils * 6) `div` 4) --draw caps on the near plane as required glEnable GL_CULL_FACE - glCullFace GL_FRONT + glCullFace GL_BACK glUseProgram (_shaderUINT lcapShad) glUniform3f 0 x y z glUniform4f 1 r g b rad - --glBindVertexArray $ lcapShad ^. shaderVAO . vaoName --Just (_vao $ _shadVAO lcapShad) - glBindVertexArray $ pdata ^. dummyVAO . vaoName - glFrontFace(GL_CW) - glDrawArrays - GL_TRIANGLES - 0 - --3 - (fromIntegral nCaps) - glFrontFace(GL_CCW) - --glDrawElements - -- (_unPrimitiveMode $ _shaderPrimitive lcapShad) - -- (fromIntegral nCaps) - -- GL_UNSIGNED_SHORT - -- nullPtr +-- glFrontFace(GL_CW) + glDrawArrays GL_TRIANGLES 0 (fromIntegral nCaps) +-- glFrontFace(GL_CCW) glDisable GL_DEPTH_CLAMP _ -> return () --draw lightmap itself diff --git a/tags b/tags index 0582b29f2..c2539eed3 100644 --- a/tags +++ b/tags @@ -92,7 +92,6 @@ BLINKERUNSAFE src/Dodge/Data/Item/Combine.hs 178;" C BLOWTORCH src/Dodge/Data/Item/Combine.hs 165;" C BLUE src/Color/Data.hs 14;" C BLUNDERBUSS src/Dodge/Data/Item/Combine.hs 148;" C -BOType src/Shader/Data.hs 86;" t BQuad src/Geometry/Bezier.hs 9;" t BRAINHAT src/Dodge/Data/Item/Combine.hs 125;" C BULLETBELTBRACER src/Dodge/Data/Item/Combine.hs 133;" C @@ -435,7 +434,7 @@ FlechetteTrajectoryType src/Dodge/Data/Bullet.hs 50;" C Flee src/Dodge/Data/ActionPlan.hs 143;" C Flesh src/Dodge/Data/Material.hs 17;" C FloatAbsCheckGreaterLess src/Dodge/Data/FloatFunction.hs 14;" C -FloatBO src/Shader/Data.hs 88;" t +FloatBO src/Shader/Data.hs 86;" t FloatConst src/Dodge/Data/FloatFunction.hs 15;" C FloatDistLinearNearFar src/Dodge/Data/FloatFunction.hs 13;" C FloatFOV src/Dodge/Data/FloatFunction.hs 11;" C @@ -989,7 +988,7 @@ PosInf src/Dodge/Data/CardinalPoint.hs 44;" C PosRooms src/Dodge/Tree/Shift.hs 28;" t Posture src/Dodge/Data/Creature/Stance.hs 33;" t PreloadData src/Data/Preload.hs 10;" t -PrimitiveMode src/Shader/Data.hs 110;" t +PrimitiveMode src/Shader/Data.hs 108;" t PrintMaterial src/Dodge/Data/AmmoType.hs 12;" C Prison src/Dodge/Data/Scenario.hs 65;" C Projectile src/Dodge/Data/Projectile.hs 15;" t @@ -1117,7 +1116,7 @@ SPEEDLEGS src/Dodge/Data/Item/Combine.hs 129;" C SPRING src/Dodge/Data/Item/Combine.hs 53;" C SPic src/ShapePicture/Data.hs 7;" t SQUARE src/Dodge/Data/GenParams.hs 18;" C -SSBO src/Shader/Data.hs 99;" t +SSBO src/Shader/Data.hs 97;" t SString src/ShortShow.hs 16;" C ST src/Dodge/Data/MetaTree.hs 20;" C STEELDRUM src/Dodge/Data/Item/Combine.hs 58;" C @@ -1151,7 +1150,7 @@ SetLSCol src/Dodge/Data/WorldEffect.hs 24;" C SetTrigger src/Dodge/Data/WorldEffect.hs 22;" C ShadNum src/Picture/Data.hs 33;" t Shader src/Shader/Data.hs 51;" t -ShaderTexture src/Shader/Data.hs 105;" t +ShaderTexture src/Shader/Data.hs 103;" t ShadowFidelity src/Shape/Data.hs 19;" t ShadowRendering src/Dodge/Data/Config.hs 103;" t Shape src/Shape/Data.hs 48;" t @@ -1349,7 +1348,7 @@ TwoHandUnder src/Dodge/Data/AimStance.hs 11;" C Typical src/Shape/Data.hs 31;" C UNDERBARRELSLOT src/Dodge/Data/Item/Combine.hs 97;" C UNIGATE src/Dodge/Data/Item/Combine.hs 30;" C -UintBO src/Shader/Data.hs 94;" t +UintBO src/Shader/Data.hs 92;" t UnderBarrelPlatformSF src/Dodge/Data/ComposedItem.hs 16;" C UnderBarrelSlotSF src/Dodge/Data/ComposedItem.hs 15;" C UnderGround src/Dodge/Data/Scenario.hs 78;" C @@ -1459,7 +1458,6 @@ WeaponScopeSF src/Dodge/Data/ComposedItem.hs 19;" C WeaponTargetingSF src/Dodge/Data/ComposedItem.hs 20;" C West src/Dodge/Data/CardinalPoint.hs 10;" C West8 src/Dodge/Data/CardinalPoint.hs 34;" C -WindowPoss src/Shader/Data.hs 86;" C WlID src/Dodge/Data/CrWlID.hs 10;" C Wood src/Dodge/Data/Material.hs 11;" C World src/Dodge/Data/World.hs 34;" t @@ -1538,9 +1536,6 @@ _bmPoints src/Dodge/Data/Beam.hs 22;" f _bmPos src/Dodge/Data/Beam.hs 18;" f _bmRange src/Dodge/Data/Beam.hs 24;" f _bmType src/Dodge/Data/Beam.hs 27;" f -_boName src/Shader/Data.hs 89;" f -_boPtr src/Shader/Data.hs 90;" f -_boType src/Shader/Data.hs 91;" f _boffEff src/Dodge/Data/Button.hs 21;" f _bonEff src/Dodge/Data/Button.hs 20;" f _bounceTolerance src/Dodge/Data/Projectile.hs 46;" f @@ -1593,8 +1588,8 @@ _cdtUp src/Dodge/Data/DoubleTree.hs 92;" f _ceSideEffect src/Dodge/Data/Universe.hs 66;" f _ceString src/Dodge/Data/Universe.hs 67;" f _ceilingStencilShader src/Data/Preload/Render.hs 18;" f -_chasmShader src/Data/Preload/Render.hs 53;" f -_chasmVBO src/Data/Preload/Render.hs 52;" f +_chasmShader src/Data/Preload/Render.hs 54;" f +_chasmVBO src/Data/Preload/Render.hs 53;" f _chasms src/Dodge/Data/CWorld.hs 33;" f _ciFilter src/Dodge/Data/HUD.hs 25;" f _ciInvIDs src/Dodge/Data/Combine.hs 9;" f @@ -1623,8 +1618,8 @@ _clickPos src/Dodge/Data/Input.hs 42;" f _clickWorldPos src/Dodge/Data/Input.hs 44;" f _closeButtons src/Dodge/Data/HUD.hs 36;" f _closeItems src/Dodge/Data/HUD.hs 35;" f -_cloudShader src/Data/Preload/Render.hs 57;" f -_cloudVBO src/Data/Preload/Render.hs 56;" f +_cloudShader src/Data/Preload/Render.hs 58;" f +_cloudVBO src/Data/Preload/Render.hs 57;" f _clouds src/Dodge/Data/LWorld.hs 96;" f _colorBlurShader src/Data/Preload/Render.hs 26;" f _coolEnd src/Dodge/Data/TriggerType.hs 17;" f @@ -1754,7 +1749,7 @@ _dsZoning src/Dodge/Data/World.hs 48;" f _dtLeft src/Dodge/Data/DoubleTree.hs 29;" f _dtRight src/Dodge/Data/DoubleTree.hs 29;" f _dtValue src/Dodge/Data/DoubleTree.hs 29;" f -_dummyVAO src/Data/Preload/Render.hs 60;" f +_dummyVAO src/Data/Preload/Render.hs 61;" f _dusts src/Dodge/Data/LWorld.hs 97;" f _ebID src/Dodge/Data/EnergyBall/Type.hs 13;" f _ebPos src/Dodge/Data/EnergyBall.hs 17;" f @@ -1783,9 +1778,12 @@ _flames src/Dodge/Data/LWorld.hs 105;" f _flankTarget src/Dodge/Data/ActionPlan.hs 129;" f _flares src/Dodge/Data/LWorld.hs 108;" f _flatShieldWlMIX src/Dodge/Data/Item/Params.hs 14;" f +_flboName src/Shader/Data.hs 87;" f +_flboPtr src/Shader/Data.hs 88;" f +_flboStride src/Shader/Data.hs 89;" f _floorItems src/Dodge/Data/LWorld.hs 127;" f -_floorShader src/Data/Preload/Render.hs 51;" f -_floorVBO src/Data/Preload/Render.hs 50;" f +_floorShader src/Data/Preload/Render.hs 52;" f +_floorVBO src/Data/Preload/Render.hs 51;" f _foreShapes src/Dodge/Data/LWorld.hs 132;" f _fsDir src/Dodge/Data/ForegroundShape.hs 14;" f _fsPos src/Dodge/Data/ForegroundShape.hs 13;" f @@ -1907,10 +1905,10 @@ _ldtRight src/Dodge/Data/DoubleTree.hs 35;" f _ldtValue src/Dodge/Data/DoubleTree.hs 33;" f _leadTargetBy src/Dodge/Data/ActionPlan.hs 115;" f _lightSources src/Dodge/Data/LWorld.hs 133;" f +_lightUBO src/Data/Preload/Render.hs 45;" f _lightingCapShader src/Data/Preload/Render.hs 16;" f _lightingLineShadowShader src/Data/Preload/Render.hs 15;" f _lightingTextureShader src/Data/Preload/Render.hs 17;" f -_lightingWallShadShader src/Data/Preload/Render.hs 14;" f _lights src/Dodge/Data/LWorld.hs 134;" f _linearShockwaves src/Dodge/Data/LWorld.hs 116;" f _linkGapEW src/Dodge/Data/Room.hs 36;" f @@ -2191,7 +2189,7 @@ _scOptions src/Dodge/Data/Universe.hs 84;" f _scPositionedMenuOption src/Dodge/Data/Universe.hs 86;" f _scSelectionList src/Dodge/Data/Universe.hs 88;" f _scTitle src/Dodge/Data/Universe.hs 83;" f -_screenTextureVAO src/Data/Preload/Render.hs 59;" f +_screenTextureVAO src/Data/Preload/Render.hs 60;" f _scrollAmount src/Dodge/Data/Input.hs 40;" f _scrollItemID src/Dodge/Data/World.hs 68;" f _scrollItemID src/Dodge/Data/World.hs 77;" f @@ -2218,6 +2216,7 @@ _sfShadowImportance src/Shape/Data.hs 40;" f _sfSize src/Shape/Data.hs 41;" f _sfType src/Shape/Data.hs 37;" f _sfVs src/Shape/Data.hs 38;" f +_shadWallShader src/Data/Preload/Render.hs 14;" f _shaderPrimitive src/Shader/Data.hs 53;" f _shaderUINT src/Shader/Data.hs 52;" f _shaderVAO src/Shader/Data.hs 54;" f @@ -2267,8 +2266,8 @@ _ssItems src/Dodge/Data/SelectionList.hs 30;" f _ssOffset src/Dodge/Data/SelectionList.hs 31;" f _ssShownItems src/Dodge/Data/SelectionList.hs 32;" f _ssShownLength src/Dodge/Data/SelectionList.hs 33;" f -_ssboName src/Shader/Data.hs 100;" f -_ssboPtr src/Shader/Data.hs 101;" f +_ssboName src/Shader/Data.hs 98;" f +_ssboPtr src/Shader/Data.hs 99;" f _strideAmount src/Dodge/Data/Creature/Stance.hs 23;" f _strideLength src/Dodge/Data/Creature/Stance.hs 18;" f _stuckCrID src/Dodge/Data/Projectile.hs 48;" f @@ -2302,7 +2301,7 @@ _terminals src/Dodge/Data/LWorld.hs 122;" f _teslaArcs src/Dodge/Data/LWorld.hs 110;" f _testFloat src/Dodge/Data/World.hs 42;" f _textInput src/Dodge/Data/Input.hs 46;" f -_textureObject src/Shader/Data.hs 106;" f +_textureObject src/Shader/Data.hs 104;" f _tiText src/Dodge/Data/Terminal/Status.hs 14;" f _tileArrayZ src/Data/Tile.hs 24;" f _tilePoly src/Data/Tile.hs 17;" f @@ -2352,15 +2351,15 @@ _uScope src/Dodge/Data/Item/Use.hs 34;" f _uValue src/Dodge/Data/Item/Use.hs 33;" f _uaParams src/Dodge/Data/Item/Use.hs 30;" f _ubMod src/Dodge/Data/Item/Use.hs 35;" f -_uiboName src/Shader/Data.hs 95;" f -_uiboPtr src/Shader/Data.hs 96;" f +_uiboName src/Shader/Data.hs 93;" f +_uiboPtr src/Shader/Data.hs 94;" f _unCombEdge src/Dodge/Combine/Graph.hs 30;" f _unCombNode src/Dodge/Combine/Graph.hs 23;" f _unFBO src/Shader/Data.hs 57;" f _unNInt src/NewInt.hs 16;" f _unNIntMap src/NewInt.hs 22;" f _unNIntSet src/NewInt.hs 19;" f -_unPrimitiveMode src/Shader/Data.hs 110;" f +_unPrimitiveMode src/Shader/Data.hs 108;" f _unPutCrit src/Dodge/Data/GenWorld.hs 32;" f _unST src/Dodge/Data/MetaTree.hs 20;" f _unTO src/Shader/Data.hs 59;" f @@ -2400,7 +2399,7 @@ _vaType src/Shader/Data.hs 68;" f _vaoName src/Shader/Data.hs 64;" f _vboName src/Shader/Data.hs 80;" f _vboPtr src/Shader/Data.hs 81;" f -_vboShapes src/Data/Preload/Render.hs 49;" f +_vboShapes src/Data/Preload/Render.hs 50;" f _vboVertexBytes src/Shader/Data.hs 82;" f _vcCoolDown src/Dodge/Data/Creature/Misc.hs 22;" f _vcMaxCoolDown src/Dodge/Data/Creature/Misc.hs 21;" f @@ -2423,13 +2422,13 @@ _wTime src/Dodge/Data/Item/Params.hs 20;" f _waitThenAction src/Dodge/Data/ActionPlan.hs 76;" f _waitThenTimer src/Dodge/Data/ActionPlan.hs 75;" f _wallDamages src/Dodge/Data/LWorld.hs 119;" f -_wallVBO src/Data/Preload/Render.hs 55;" f +_wallVBO src/Data/Preload/Render.hs 56;" f _walls src/Dodge/Data/LWorld.hs 118;" f _wanID src/Dodge/Data/LWorld.hs 158;" f _wanPos src/Dodge/Data/LWorld.hs 157;" f _warmMax src/Dodge/Data/TriggerType.hs 19;" f _warmStart src/Dodge/Data/TriggerType.hs 15;" f -_winVBO src/Data/Preload/Render.hs 54;" f +_winVBO src/Data/Preload/Render.hs 55;" f _windowPosX src/Dodge/Data/Config.hs 53;" f _windowPosY src/Dodge/Data/Config.hs 54;" f _windowPullShader src/Data/Preload/Render.hs 21;" f @@ -2588,7 +2587,7 @@ attachOnward src/Dodge/Tree/Compose.hs 95;" f attachOnward' src/Dodge/Tree/Compose.hs 98;" f attachTree src/Dodge/Tree/Compose.hs 38;" f attentionViewPoint src/Dodge/Creature/ReaderUpdate.hs 75;" f -attribSize src/Shader/Compile.hs 310;" f +attribSize src/Shader/Compile.hs 320;" f autoAmr src/Dodge/Item/Held/Rod.hs 39;" f autoBS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 488;" f autoCrit src/Dodge/Creature/AutoCrit.hs 10;" f @@ -2642,7 +2641,7 @@ beltMag src/Dodge/Item/Ammo.hs 39;" f bfsThenReturn src/Dodge/Creature/ReaderUpdate.hs 226;" f bgateCalc src/Dodge/Inventory/SelectionList.hs 118;" f bgunSound src/Dodge/HeldUse.hs 514;" f -bindFBO src/Render.hs 270;" f +bindFBO src/Render.hs 248;" f bingate src/Dodge/Item/Scope.hs 109;" f black src/Color.hs 27;" f blank src/Picture/Base.hs 59;" f @@ -2698,7 +2697,7 @@ brightX src/Color.hs 116;" f btSPic src/Dodge/Render/ShapePicture.hs 129;" f btText src/Dodge/Inventory/SelectionList.hs 237;" f bufferEBO src/Shader/Bind.hs 28;" f -bufferPerspectiveMatrixUBO src/Dodge/Render.hs 499;" f +bufferPerspectiveMatrixUBO src/Dodge/Render.hs 454;" f bufferPokedVBO src/Shader/Bind.hs 19;" f bufferShaderLayers src/Shader/Bind.hs 32;" f bulletBeltBracer src/Dodge/Item/Equipment.hs 67;" f @@ -2754,7 +2753,7 @@ checkConnection src/Dodge/Inventory/Swap.hs 66;" f checkDeath src/Dodge/Creature/Update.hs 70;" f checkDeath' src/Dodge/Creature/Update.hs 73;" f checkEndGame src/Dodge/Update.hs 766;" f -checkErrorGL src/Shader/Compile.hs 259;" f +checkErrorGL src/Shader/Compile.hs 267;" f checkFBO src/Framebuffer/Check.hs 6;" f checkGLError src/GLHelp.hs 14;" f checkInvSlotsYou src/Dodge/Inventory/CheckSlots.hs 18;" f @@ -2855,7 +2854,7 @@ compP2A src/Dodge/ShiftPoint.hs 11;" f compactDraw src/Dodge/LevelGen.hs 94;" f compactDraw' src/Dodge/LevelGen.hs 105;" f compactDrawTree src/Dodge/LevelGen.hs 88;" f -compileAndCheckShader src/Shader/Compile.hs 281;" f +compileAndCheckShader src/Shader/Compile.hs 289;" f composeNode src/Dodge/Tree/Compose.hs 76;" f composeTree src/Dodge/Tree/Compose.hs 47;" f computerBeepingS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 640;" f @@ -2876,7 +2875,7 @@ copier src/Dodge/Item/Scope.hs 88;" f copierItemUpdate src/Dodge/Creature/State.hs 131;" f copyItemToFloor src/Dodge/FloorItem.hs 14;" f corDoor src/Dodge/Room/Room.hs 385;" f -cornerList src/Preload/Render.hs 249;" f +cornerList src/Preload/Render.hs 244;" f corpseOrGib src/Dodge/Creature/Update.hs 111;" f corridor src/Dodge/Room/Corridor.hs 17;" f corridorBoss src/Dodge/LockAndKey.hs 133;" f @@ -3169,8 +3168,8 @@ doDebugTestF8 src/Dodge/Update/Input/DebugTest.hs 59;" f doDoorLerp src/Dodge/Door/DoorLerp.hs 8;" f doDoorMount src/Dodge/Door.hs 30;" f doDrag src/Dodge/Update/Input/InGame.hs 127;" f -doDrawing src/Dodge/Render.hs 35;" f -doDrawing' src/Dodge/Render.hs 46;" f +doDrawing src/Dodge/Render.hs 34;" f +doDrawing' src/Dodge/Render.hs 45;" f doFloatFloat src/Dodge/FloatFunction.hs 5;" f doGenFloat src/Dodge/HeldUse.hs 1158;" f doGravityPU src/Dodge/Projectile/Update.hs 35;" f @@ -3193,7 +3192,7 @@ doScopeZoom src/Dodge/Update/Scroll.hs 91;" f doSectionSize src/Dodge/DisplayInventory.hs 211;" f doSideEffects appDodge/Main.hs 125;" f doStrategyActions src/Dodge/Creature/ReaderUpdate.hs 172;" f -doTestDrawing src/Dodge/Render.hs 42;" f +doTestDrawing src/Dodge/Render.hs 41;" f doTextInputOver src/Dodge/Update/Input/Text.hs 15;" f doTextInputOverUniverse src/Dodge/Update/Input/Text.hs 12;" f doThrust src/Dodge/Projectile/Update.hs 129;" f @@ -3503,7 +3502,7 @@ forceSpine src/StrictHelp.hs 4;" f fourEmbossDecoration src/Dodge/Placement/TopDecoration.hs 29;" f fpsText src/Dodge/Render/Picture.hs 59;" f fractionLoadedAmmo src/Dodge/Item/Draw/SPic.hs 145;" f -frag src/Shader/Data.hs 113;" f +frag src/Shader/Data.hs 111;" f freeShaderPointers' src/Shader.hs 37;" f fridgeHumS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 500;" f fromJust' src/MaybeHelp.hs 22;" f @@ -3533,7 +3532,7 @@ generateGraphs src/Dodge/Menu.hs 149;" f generateLayout src/Dodge/Layout/Generate.hs 10;" f generateLevelFromRoomList src/Dodge/Layout.hs 35;" f generateWorldFromSeed src/Dodge/LevelGen.hs 17;" f -geom src/Shader/Data.hs 113;" f +geom src/Shader/Data.hs 111;" f geometryQuickCheckTests test/Spec.hs 55;" f geometryTests test/Spec.hs 17;" f geometryUnitTests test/Spec.hs 22;" f @@ -3552,7 +3551,7 @@ getCrMoveSpeed src/Dodge/Creature/Statistics.hs 50;" f getCrsFromRooms src/Dodge/Room/Tutorial.hs 357;" f getCrsFromRooms' src/Dodge/Room/Tutorial.hs 344;" f getDebugMouseOver src/Dodge/Update.hs 374;" f -getDistortions src/Dodge/Render.hs 505;" f +getDistortions src/Dodge/Render.hs 466;" f getEdgesCrossing src/Dodge/Path.hs 37;" f getGrenadeHitEffect src/Dodge/HeldUse.hs 1264;" f getInventoryPath src/Dodge/Inventory/Path.hs 9;" f @@ -3703,7 +3702,7 @@ initWallZoning src/Dodge/Wall/Zone.hs 12;" f initialRoomTree src/Dodge/Floor.hs 24;" f initialWorld src/Dodge/Initialisation.hs 15;" f initialisePlaying src/Sound.hs 77;" f -initializeGLState src/Preload/Render.hs 267;" f +initializeGLState src/Preload/Render.hs 262;" f initializeOptionMenu src/Dodge/Menu/Option.hs 17;" f initializeOptionMenuBO src/Dodge/Menu/Option.hs 30;" f initializeTexture2D src/Framebuffer/Update.hs 205;" f @@ -4021,7 +4020,7 @@ makeBlockDebris src/Dodge/Block/Debris.hs 36;" f makeBoolOption src/Dodge/Menu/OptionType.hs 8;" f makeBullet src/Dodge/HeldUse.hs 979;" f makeButton src/Dodge/LevelGen/Switch.hs 16;" f -makeByteStringShaderUsingVAO src/Shader/Compile.hs 132;" f +makeByteStringShaderUsingVAO src/Shader/Compile.hs 134;" f makeCloudAt src/Dodge/WorldEvent/Cloud.hs 7;" f makeColorTermLine src/Dodge/Terminal.hs 111;" f makeColorTermPara src/Dodge/Terminal.hs 108;" f @@ -4047,14 +4046,14 @@ makePathBetweenPs src/Dodge/Path.hs 87;" f makePathUsing src/Dodge/Path.hs 51;" f makePoisonExplosionAt src/Dodge/WorldEvent/Explosion.hs 24;" f makeSelectionListPictures src/Dodge/Render/List.hs 66;" f -makeShaderEBO src/Shader/Compile.hs 53;" f -makeShaderProgram src/Shader/Compile.hs 245;" f -makeShaderUsingVAO src/Shader/Compile.hs 150;" f -makeShaderUsingVBO src/Shader/Compile.hs 69;" f -makeShaderVBO src/Shader/Compile.hs 32;" f +makeShaderEBO src/Shader/Compile.hs 54;" f +makeShaderProgram src/Shader/Compile.hs 253;" f +makeShaderUsingVAO src/Shader/Compile.hs 152;" f +makeShaderUsingVBO src/Shader/Compile.hs 70;" f +makeShaderVBO src/Shader/Compile.hs 33;" f makeShockwaveAt src/Dodge/WorldEvent/Shockwave.hs 11;" f makeShrapnelAt src/Dodge/Payload.hs 24;" f -makeSourcedShader src/Shader/Compile.hs 171;" f +makeSourcedShader src/Shader/Compile.hs 173;" f makeSpark src/Dodge/Spark.hs 45;" f makeSubmenuOption src/Dodge/Menu/OptionType.hs 19;" f makeSwitch src/Dodge/LevelGen/Switch.hs 38;" f @@ -4329,7 +4328,7 @@ pincerP src/Dodge/Creature/Boid.hs 63;" f pincerP' src/Dodge/Creature/Boid.hs 96;" f pincerP'' src/Dodge/Creature/Boid.hs 106;" f pincerP''' src/Dodge/Creature/Boid.hs 77;" f -pingPongBetween src/Render.hs 246;" f +pingPongBetween src/Render.hs 224;" f pipe src/Dodge/Item/Craftable.hs 32;" f pistol src/Dodge/Item/Held/Stick.hs 40;" f pistolerRoom src/Dodge/Room/Room.hs 330;" f @@ -4358,16 +4357,16 @@ playSoundAndUpdate src/Sound.hs 54;" f playSoundQueue src/Sound.hs 132;" f playSoundUnlessRewinding appDodge/Main.hs 118;" f plusDecoration src/Dodge/Placement/TopDecoration.hs 35;" f -pmLineLoop src/Shader/Data.hs 118;" f -pmLineStrip src/Shader/Data.hs 118;" f -pmLines src/Shader/Data.hs 118;" f -pmLinesAdjacency src/Shader/Data.hs 118;" f -pmPatches src/Shader/Data.hs 118;" f -pmPoints src/Shader/Data.hs 118;" f -pmQuads src/Shader/Data.hs 118;" f -pmTriangleFan src/Shader/Data.hs 118;" f -pmTriangleStrip src/Shader/Data.hs 118;" f -pmTriangles src/Shader/Data.hs 118;" f +pmLineLoop src/Shader/Data.hs 116;" f +pmLineStrip src/Shader/Data.hs 116;" f +pmLines src/Shader/Data.hs 116;" f +pmLinesAdjacency src/Shader/Data.hs 116;" f +pmPatches src/Shader/Data.hs 116;" f +pmPoints src/Shader/Data.hs 116;" f +pmQuads src/Shader/Data.hs 116;" f +pmTriangleFan src/Shader/Data.hs 116;" f +pmTriangleStrip src/Shader/Data.hs 116;" f +pmTriangles src/Shader/Data.hs 116;" f pnZoneSize src/Dodge/Zoning/Pathing.hs 26;" f pointIfNotClose src/Dodge/LevelGen/StaticWalls/Deprecated.hs 68;" f pointInCircle src/Geometry.hs 209;" f @@ -4449,7 +4448,7 @@ powlistUpToN' src/Multiset.hs 12;" f powlistUpToN'' src/Multiset.hs 31;" f preCritStart src/Dodge/Room/Start.hs 83;" f prePos src/Quaternion.hs 64;" f -preloadRender src/Preload/Render.hs 31;" f +preloadRender src/Preload/Render.hs 32;" f premapMaybe src/FoldlHelp.hs 26;" f prependTwo src/Geometry.hs 177;" f prettyDT src/Dodge/DoubleTree.hs 258;" f @@ -4604,7 +4603,7 @@ renderDataResizeUpdate src/Preload/Update.hs 26;" f renderFlatLighting src/Render.hs 107;" f renderInfoListAt src/Dodge/Render/InfoBox.hs 17;" f renderInfoListsAt src/Dodge/Render/InfoBox.hs 44;" f -renderLayer src/Render.hs 259;" f +renderLayer src/Render.hs 237;" f renderLightingNoShadows src/Render.hs 48;" f renderListAt src/Dodge/Render/List.hs 192;" f renderShadows src/Render.hs 122;" f @@ -4807,7 +4806,7 @@ setRBCreatureTargeting src/Dodge/Creature/State.hs 290;" f setRoomInt src/Dodge/Room/Tutorial.hs 91;" f setSelWhileDragging src/Dodge/Update/Input/InGame.hs 337;" f setSelectionListRestriction src/Dodge/Update/Input/ScreenLayer.hs 87;" f -setShaderSource src/Shader/Compile.hs 294;" f +setShaderSource src/Shader/Compile.hs 302;" f setShadowLimits src/Dodge/Shadows.hs 11;" f setSoundVolume src/Sound.hs 157;" f setTargetMv src/Dodge/Creature/ReaderUpdate.hs 83;" f @@ -4816,29 +4815,29 @@ setTiles src/Dodge/Layout.hs 67;" f setTreeInts src/Dodge/Room/Tutorial.hs 98;" f setViewDistance src/Dodge/Update/Camera.hs 239;" f setViewPos src/Dodge/Creature/ReaderUpdate.hs 69;" f -setViewport src/Dodge/Render.hs 510;" f +setViewport src/Dodge/Render.hs 471;" f setVol src/Dodge/Config.hs 47;" f setWristShieldPos src/Dodge/Equipment.hs 49;" f setWristShieldPos src/Dodge/Euse.hs 38;" f setupConLoop src/Loop.hs 103;" f setupConLoop' src/Loop.hs 193;" f -setupEBO src/Shader/Compile.hs 192;" f +setupEBO src/Shader/Compile.hs 197;" f setupFramebuffer2GivenStencil src/Framebuffer/Setup.hs 46;" f setupFramebuffer3GivenStencil src/Framebuffer/Setup.hs 62;" f setupFramebufferGivenStencil src/Framebuffer/Setup.hs 31;" f setupLoop src/Loop.hs 30;" f setupShadowFramebuffer src/Framebuffer/Setup.hs 24;" f -setupStaticVBOVAO src/Shader/Compile.hs 102;" f -setupVAOUsingVBO src/Shader/Compile.hs 183;" f -setupVBO src/Shader/Compile.hs 83;" f -setupVBOStatic src/Shader/Compile.hs 118;" f -setupVBOVAO src/Shader/Compile.hs 204;" f -setupVertexAttribPointer src/Shader/Compile.hs 228;" f -setupVertexAttribs src/Shader/Compile.hs 222;" f +setupStaticVBOVAO src/Shader/Compile.hs 103;" f +setupVAOUsingVBO src/Shader/Compile.hs 185;" f +setupVBO src/Shader/Compile.hs 84;" f +setupVBOStatic src/Shader/Compile.hs 120;" f +setupVBOVAO src/Shader/Compile.hs 209;" f +setupVertexAttribPointer src/Shader/Compile.hs 234;" f +setupVertexAttribs src/Shader/Compile.hs 228;" f setupWorldBounds src/Dodge/Layout.hs 116;" f sfInvColor src/Dodge/Item/InventoryColor.hs 12;" f shadVBOptr src/Shader.hs 40;" f -shaderTypeExt src/Shader/Compile.hs 176;" f +shaderTypeExt src/Shader/Compile.hs 178;" f shapeBounds src/Dodge/Room/Foreground.hs 147;" f shapePoints src/Dodge/Room/Foreground.hs 144;" f shapeVerxSize src/Shape/Parameters.hs 5;" f @@ -5149,7 +5148,7 @@ toBinary src/Dodge/Inventory/SelectionList.hs 141;" f toBothLnk src/Dodge/RoomLink.hs 136;" f toClosestMultiple src/HelpNum.hs 3;" f toColor8 src/Color.hs 148;" f -toFloatVAs src/Shader/Compile.hs 215;" f +toFloatVAs src/Shader/Compile.hs 220;" f toLabel src/Dodge/Cleat.hs 16;" f toMultiset src/Multiset.hs 64;" f toOnward src/Dodge/Tree/Compose.hs 101;" f @@ -5447,10 +5446,10 @@ vShape src/Dodge/Placement/Instance/LightSource.hs 93;" f vToL src/MatrixHelper.hs 56;" f vToQuat src/Quaternion.hs 42;" f validTerminalCommands src/Dodge/Debug/Terminal.hs 137;" f -vasTightStride src/Shader/Compile.hs 301;" f +vasTightStride src/Shader/Compile.hs 309;" f vecBetweenSpeed src/Dodge/Base.hs 146;" f vecTurnTo src/Dodge/Movement/Turn.hs 19;" f -vert src/Shader/Data.hs 113;" f +vert src/Shader/Data.hs 111;" f vertScale src/MatrixHelper.hs 95;" f vertTrans src/MatrixHelper.hs 103;" f verticalPipe src/Dodge/Picture.hs 19;" f @@ -5515,7 +5514,7 @@ windowLine src/Dodge/Placement/Instance/Wall.hs 59;" f windowXFloat src/Dodge/Data/Config.hs 61;" f windowYFloat src/Dodge/Data/Config.hs 63;" f withAlpha src/Color.hs 10;" f -withByteString src/Shader/Compile.hs 328;" f +withByteString src/Shader/Compile.hs 338;" f wlIXsNearCirc src/Dodge/Zoning/Wall.hs 32;" f wlIXsNearPoint src/Dodge/Zoning/Wall.hs 22;" f wlIXsNearRect src/Dodge/Zoning/Wall.hs 29;" f