From 757096e7df15c14b9b10352fa91663483f9e34f8 Mon Sep 17 00:00:00 2001 From: xolatile Date: Sun, 10 Aug 2025 00:19:46 +0200 Subject: all --- src/engine/shader.cpp | 65 ++++----------------------------------------------- 1 file changed, 4 insertions(+), 61 deletions(-) (limited to 'src/engine/shader.cpp') diff --git a/src/engine/shader.cpp b/src/engine/shader.cpp index 86e4546..eb10720 100644 --- a/src/engine/shader.cpp +++ b/src/engine/shader.cpp @@ -445,7 +445,7 @@ void Shader::cleanup(bool invalid) { bool Shader::isnull(const Shader *s) { return !s; } -static void genattriblocs(Shader &s, const char *vs, const char *ps, Shader *reusevs, Shader *reuseps) { +static void genattriblocs(Shader &s, const char *vs, Shader *reusevs) { static int len = strlen("//:attrib"); string name; int loc; @@ -457,7 +457,7 @@ static void genattriblocs(Shader &s, const char *vs, const char *ps, Shader *reu } } -static void genuniformlocs(Shader &s, const char *vs, const char *ps, Shader *reusevs, Shader *reuseps) { +static void genuniformlocs(Shader &s, const char *vs, Shader *reusevs) { static int len = strlen("//:uniform"); string name, blockname; int binding, stride; @@ -503,8 +503,8 @@ Shader *newshader(int type, const char *name, const char *vs, const char *ps, Sh else loopv(slotparams) s.defaultparams.add(slotparams[i]); s.attriblocs.setsize(0); s.uniformlocs.setsize(0); - genattriblocs(s, vs, ps, s.reusevs, s.reuseps); - genuniformlocs(s, vs, ps, s.reusevs, s.reuseps); + genattriblocs(s, vs, s.reusevs); + genuniformlocs(s, vs, s.reusevs); if(!s.compile()) { s.cleanup(true); if(variant) shaders.remove(rname); @@ -622,60 +622,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); } -bool minimizedynlighttcusage() { return glversion < 300 && maxvaryings < 48; } - -static void gendynlightvariant(Shader &s, const char *sname, const char *vs, const char *ps, int row = 0) { - int numlights = minimizedynlighttcusage() ? 1 : MAXDYNLIGHTS; - const char *vspragma = strstr(vs, "//:dynlight"), *pspragma = strstr(ps, "//:dynlight"); - if(!vspragma || !pspragma) return; - string pslight; - vspragma += strcspn(vspragma, "\n"); - if(*vspragma) vspragma++; - if(sscanf(pspragma, "//:dynlight %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 vsdl, psdl; - loopi(MAXDYNLIGHTS) { - vsdl.setsize(0); - psdl.setsize(0); - if(vsmain >= vs) vsdl.put(vs, vsmain - vs); - if(psmain >= ps) psdl.put(ps, psmain - ps); - defformatstring(pos, "uniform vec4 dynlightpos[%d];\n", i+1); - vsdl.put(pos, strlen(pos)); - psdl.put(pos, strlen(pos)); - defformatstring(color, "uniform vec3 dynlightcolor[%d];\n", i+1); - psdl.put(color, strlen(color)); - loopk(min(i+1, numlights)) { - defformatstring(dir, "%sdynlight%ddir%s", !k ? "varying vec3 " : " ", k, k==i || k+1==numlights ? ";\n" : ","); - vsdl.put(dir, strlen(dir)); - psdl.put(dir, strlen(dir)); - } - vsdl.put(vsmain, vspragma-vsmain); - psdl.put(psmain, pspragma-psmain); - loopk(i+1) { - defformatstring(tc, - k%s", i+1, sname); - Shader *variant = newshader(s.type, name, vsdl.getbuf(), psdl.getbuf(), &s, row); - if(!variant) return; - } -} - 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; @@ -724,7 +670,6 @@ static void genshadowmapvariant(Shader &s, const char *sname, const char *vs, co defformatstring(name, "%s", sname); Shader *variant = newshader(s.type, name, vssm.getbuf(), pssm.getbuf(), &s, row); if(!variant) return; - if(strstr(vs, "//:dynlight")) gendynlightvariant(s, name, vssm.getbuf(), pssm.getbuf(), row); } static void genuniformdefs(vector &vsbuf, vector &psbuf, const char *vs, const char *ps, Shader *variant = NULL) { @@ -842,7 +787,6 @@ void shader(int *type, char *name, char *vs, char *ps) { Shader *s = newshader(*type, name, vs, ps); if(s) { if(strstr(vs, "//:shadowmap")) genshadowmapvariant(*s, s->name, vs, ps); - if(strstr(vs, "//:dynlight")) gendynlightvariant(*s, s->name, vs, ps); } slotparams.shrink(0); } @@ -862,7 +806,6 @@ void variantshader(int *type, char *name, int *row, char *vs, char *ps) { GENSHADER(s->defaultparams.length(), genuniformdefs(vsbuf, psbuf, vs, ps, s)); Shader *v = newshader(*type, varname, vs, ps, s, *row); if(v) { - if(strstr(vs, "//:dynlight")) gendynlightvariant(*s, varname, vs, ps, *row); if(strstr(ps, "//:variant") || strstr(vs, "//:variant")) gengenericvariant(*s, varname, vs, ps, *row); } } -- cgit v1.2.3