summaryrefslogtreecommitdiff
path: root/src/engine/shader.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/engine/shader.cpp')
-rw-r--r--src/engine/shader.cpp54
1 files changed, 0 insertions, 54 deletions
diff --git a/src/engine/shader.cpp b/src/engine/shader.cpp
index eb10720..6d88f9f 100644
--- a/src/engine/shader.cpp
+++ b/src/engine/shader.cpp
@@ -302,7 +302,6 @@ void Shader::allocparams(Slot *slot) {
tmu++;
}
else UNIFORMTEX("lightmap", 1);
- UNIFORMTEX("shadowmap", 7);
int stex = 0;
loopv(slot->sts) {
Slot::Tex &t = slot->sts[i];
@@ -622,56 +621,6 @@ static void gengenericvariant(Shader &s, const char *sname, const char *vs, cons
newshader(s.type, varname, vschanged ? vsv.getbuf() : reuse, pschanged ? psv.getbuf() : reuse, &s, row);
}
-static void genshadowmapvariant(Shader &s, const char *sname, const char *vs, const char *ps, int row = 1) {
- const char *vspragma = strstr(vs, "//:shadowmap"), *pspragma = strstr(ps, "//:shadowmap");
- if(!vspragma || !pspragma) return;
- string pslight;
- vspragma += strcspn(vspragma, "\n");
- if(*vspragma) vspragma++;
- if(sscanf(pspragma, "//:shadowmap %100s", pslight)!=1) return;
- pspragma += strcspn(pspragma, "\n");
- if(*pspragma) pspragma++;
- const char *vsmain = findglslmain(vs), *psmain = findglslmain(ps);
- if(vsmain > vspragma) vsmain = vs;
- if(psmain > pspragma) psmain = ps;
- vector<char> vssm, pssm;
- if(vsmain >= vs) vssm.put(vs, vsmain - vs);
- if(psmain >= ps) pssm.put(ps, psmain - ps);
- const char *vsdecl =
- "uniform mat4 shadowmapproject;\n"
- "varying vec3 shadowmaptc;\n";
- vssm.put(vsdecl, strlen(vsdecl));
- const char *psdecl =
- "uniform sampler2D shadowmap;\n"
- "uniform vec4 shadowmapambient;\n"
- "varying vec3 shadowmaptc;\n";
- pssm.put(psdecl, strlen(psdecl));
- vssm.put(vsmain, vspragma-vsmain);
- pssm.put(psmain, pspragma-psmain);
- extern int smoothshadowmappeel;
- const char *tcgen =
- "shadowmaptc = vec3(shadowmapproject * vvertex);\n";
- vssm.put(tcgen, strlen(tcgen));
- const char *sm =
- smoothshadowmappeel ?
- "vec4 smvals = texture2D(shadowmap, shadowmaptc.xy);\n"
- "vec2 smdiff = clamp(smvals.xz - shadowmaptc.zz*smvals.y, 0.0, 1.0);\n"
- "float shadowed = clamp((smdiff.x > 0.0 ? smvals.w : 0.0) - 8.0*smdiff.y, 0.0, 1.0);\n" :
- "vec4 smvals = texture2D(shadowmap, shadowmaptc.xy);\n"
- "float smtest = shadowmaptc.z*smvals.y;\n"
- "float shadowed = smtest < smvals.x && smtest > smvals.z ? smvals.w : 0.0;\n";
- pssm.put(sm, strlen(sm));
- defformatstring(smlight,
- "%s.rgb -= shadowed*clamp(%s.rgb - shadowmapambient.rgb, 0.0, 1.0);\n",
- pslight, pslight);
- pssm.put(smlight, strlen(smlight));
- vssm.put(vspragma, strlen(vspragma)+1);
- pssm.put(pspragma, strlen(pspragma)+1);
- defformatstring(name, "<shadowmap>%s", sname);
- Shader *variant = newshader(s.type, name, vssm.getbuf(), pssm.getbuf(), &s, row);
- if(!variant) return;
-}
-
static void genuniformdefs(vector<char> &vsbuf, vector<char> &psbuf, const char *vs, const char *ps, Shader *variant = NULL) {
if(variant ? variant->defaultparams.empty() : slotparams.empty()) return;
const char *vsmain = findglslmain(vs), *psmain = findglslmain(ps);
@@ -785,9 +734,6 @@ void shader(int *type, char *name, char *vs, char *ps) {
}
GENSHADER(slotparams.length(), genuniformdefs(vsbuf, psbuf, vs, ps));
Shader *s = newshader(*type, name, vs, ps);
- if(s) {
- if(strstr(vs, "//:shadowmap")) genshadowmapvariant(*s, s->name, vs, ps);
- }
slotparams.shrink(0);
}