From d2fbcccd01880fc190d36109e246d824f8ee0230 Mon Sep 17 00:00:00 2001 From: Shinovon Date: Sun, 3 May 2026 07:14:41 +0500 Subject: [PATCH] Completely remove dynamic lights --- group/shaders.mk | 6 +- vendor/librw/src/gl/gl3device.cpp | 72 ------------------- vendor/librw/src/gl/gl3render.cpp | 33 ++------- vendor/librw/src/gl/shaders/default.vert | 1 - vendor/librw/src/gl/shaders/default_vs_gl.inc | 1 - vendor/librw/src/gl/shaders/header.vert | 65 ----------------- vendor/librw/src/gl/shaders/header_vs.inc | 65 ----------------- vendor/librw/src/gl/shaders/matfx_env.vert | 1 - vendor/librw/src/gl/shaders/matfx_gl.inc | 1 - vendor/librw/src/world.cpp | 28 -------- 10 files changed, 9 insertions(+), 264 deletions(-) diff --git a/group/shaders.mk b/group/shaders.mk index 43bec97..7e321f2 100644 --- a/group/shaders.mk +++ b/group/shaders.mk @@ -5,8 +5,7 @@ do_nothing : MAKMAKE: do_nothing -BLD: - $(MAKE) -C ../vendor/librw/src/gl/shaders/ -f Makefile all +BLD: do_nothing CLEAN: rm ../vendor/librw/src/gl/shaders/*.inc @@ -15,7 +14,8 @@ LIB: do_nothing CLEANLIB: do_nothing -RESOURCE: do_nothing +RESOURCE: + $(MAKE) -C ../vendor/librw/src/gl/shaders/ -f Makefile all FREEZE: do_nothing diff --git a/vendor/librw/src/gl/gl3device.cpp b/vendor/librw/src/gl/gl3device.cpp index 0f67de3..68c72c4 100644 --- a/vendor/librw/src/gl/gl3device.cpp +++ b/vendor/librw/src/gl/gl3device.cpp @@ -50,21 +50,10 @@ struct UniformScene float32 view[16]; }; -#define MAX_LIGHTS 4 - struct UniformObject { RawMatrix world; RGBAf ambLight; - struct { - float type; - float radius; - float minusCosAngle; - float hardSpot; - } lightParams[MAX_LIGHTS]; - V4d lightPosition[MAX_LIGHTS]; - V4d lightDirection[MAX_LIGHTS]; - RGBAf lightColor[MAX_LIGHTS]; }; const char *shaderDecl120 = @@ -127,10 +116,6 @@ int32 u_view; // Object int32 u_world; int32 u_ambLight; -int32 u_lightParams; -int32 u_lightPosition; -int32 u_lightDirection; -int32 u_lightColor; #endif int32 u_matColor; @@ -1013,60 +998,7 @@ setLights(WorldLights *lightData) if(lightData->numAmbients) bits |= VSLIGHT_AMBIENT; - n = 0; - for(i = 0; i < lightData->numDirectionals && i < 8; i++){ - l = lightData->directionals[i]; - uniformObject.lightParams[n].type = 1.0f; - uniformObject.lightColor[n] = l->color; - memcpy(&uniformObject.lightDirection[n], &l->getFrame()->getLTM()->at, sizeof(V3d)); - bits |= VSLIGHT_DIRECT; - n++; - if(n >= MAX_LIGHTS) - goto out; - } - - for(i = 0; i < lightData->numLocals; i++){ - Light *l = lightData->locals[i]; - - switch(l->getType()){ - case Light::POINT: - uniformObject.lightParams[n].type = 2.0f; - uniformObject.lightParams[n].radius = l->radius; - uniformObject.lightColor[n] = l->color; - memcpy(&uniformObject.lightPosition[n], &l->getFrame()->getLTM()->pos, sizeof(V3d)); - bits |= VSLIGHT_POINT; - n++; - if(n >= MAX_LIGHTS) - goto out; - break; - case Light::SPOT: - case Light::SOFTSPOT: - uniformObject.lightParams[n].type = 3.0f; - uniformObject.lightParams[n].minusCosAngle = l->minusCosAngle; - uniformObject.lightParams[n].radius = l->radius; - uniformObject.lightColor[n] = l->color; - memcpy(&uniformObject.lightPosition[n], &l->getFrame()->getLTM()->pos, sizeof(V3d)); - memcpy(&uniformObject.lightDirection[n], &l->getFrame()->getLTM()->at, sizeof(V3d)); - // lower bound of falloff - if(l->getType() == Light::SOFTSPOT) - uniformObject.lightParams[n].hardSpot = 0.0f; - else - uniformObject.lightParams[n].hardSpot = 1.0f; - bits |= VSLIGHT_SPOT; - n++; - if(n >= MAX_LIGHTS) - goto out; - break; - } - } - - uniformObject.lightParams[n].type = 0.0f; - setUniform(u_ambLight, &uniformObject.ambLight); - setUniform(u_lightParams, uniformObject.lightParams); - setUniform(u_lightPosition, uniformObject.lightPosition); - setUniform(u_lightDirection, uniformObject.lightDirection); - setUniform(u_lightColor, uniformObject.lightColor); out: objectDirty = 1; return bits; @@ -1895,10 +1827,6 @@ initOpenGL(void) u_view = registerUniform("u_view", UNIFORM_MAT4); u_world = registerUniform("u_world", UNIFORM_MAT4); u_ambLight = registerUniform("u_ambLight", UNIFORM_VEC4); - u_lightParams = registerUniform("u_lightParams", UNIFORM_VEC4, MAX_LIGHTS); - u_lightPosition = registerUniform("u_lightPosition", UNIFORM_VEC4, MAX_LIGHTS); - u_lightDirection = registerUniform("u_lightDirection", UNIFORM_VEC4, MAX_LIGHTS); - u_lightColor = registerUniform("u_lightColor", UNIFORM_VEC4, MAX_LIGHTS); lastShaderUploaded = nil; #else registerBlock("Scene"); diff --git a/vendor/librw/src/gl/gl3render.cpp b/vendor/librw/src/gl/gl3render.cpp index c8a6aca..f7f3d2e 100644 --- a/vendor/librw/src/gl/gl3render.cpp +++ b/vendor/librw/src/gl/gl3render.cpp @@ -19,8 +19,6 @@ namespace rw { namespace gl3 { -#define MAX_LIGHTS - extern "C" int draw; extern "C" int render; @@ -28,7 +26,6 @@ void drawInst_simple(InstanceDataHeader *header, InstanceData *inst) { draw++; - flushCache(); glDrawElements(header->primType, inst->numIndex, GL_UNSIGNED_SHORT, ((uint8*) header->indexBuffer) + inst->offset); } @@ -113,20 +110,9 @@ int32 lightingCB(Atomic *atomic) { WorldLights lightData; - Light *directionals[8]; - Light *locals[8]; - lightData.directionals = directionals; - lightData.numDirectionals = 0; // 8; - lightData.locals = locals; - lightData.numLocals = 0; // 8; if(atomic->geometry->flags & rw::Geometry::LIGHT){ ((World*)engine->currentWorld)->enumerateLights(atomic, &lightData); - if((atomic->geometry->flags & rw::Geometry::NORMALS) == 0){ - // Get rid of lights that need normals when we don't have any - lightData.numDirectionals = 0; - lightData.numLocals = 0; - } return setLights(&lightData); }else{ memset(&lightData, 0, sizeof(lightData)); @@ -142,12 +128,17 @@ defaultRenderCB(Atomic *atomic, InstanceDataHeader *header) uint32 flags = atomic->geometry->flags; setWorldMatrix(atomic->getFrame()->getLTM()); - int32 vsBits = lightingCB(atomic); + lightingCB(atomic); setupVertexInput(header); InstanceData *inst = header->inst; int32 n = header->numMeshes; + + if(getAlphaTest()) + defaultShader->use(); + else + defaultShader_noAT->use(); while(n--){ m = inst->material; @@ -158,18 +149,6 @@ defaultRenderCB(Atomic *atomic, InstanceDataHeader *header) rw::SetRenderState(VERTEXALPHA, inst->vertexAlpha || m->color.alpha != 0xFF); -// if((vsBits & VSLIGHT_MASK) == 0){ - if(getAlphaTest()) - defaultShader->use(); - else - defaultShader_noAT->use(); -// }else{ -// if(getAlphaTest()) -// defaultShader_fullLight->use(); -// else -// defaultShader_fullLight_noAT->use(); -// } - drawInst(header, inst); inst++; } diff --git a/vendor/librw/src/gl/shaders/default.vert b/vendor/librw/src/gl/shaders/default.vert index 06002a6..f22e7e5 100644 --- a/vendor/librw/src/gl/shaders/default.vert +++ b/vendor/librw/src/gl/shaders/default.vert @@ -14,7 +14,6 @@ main(void) v_color = in_color; v_color.rgb += u_ambLight.rgb*surfAmbient; - v_color.rgb += DoDynamicLight(Vertex.xyz, Normal)*surfDiffuse; v_color = clamp(v_color, 0.0, 1.0); v_color *= u_matColor; diff --git a/vendor/librw/src/gl/shaders/default_vs_gl.inc b/vendor/librw/src/gl/shaders/default_vs_gl.inc index 3303d6d..fb55d8e 100644 --- a/vendor/librw/src/gl/shaders/default_vs_gl.inc +++ b/vendor/librw/src/gl/shaders/default_vs_gl.inc @@ -15,7 +15,6 @@ const char *default_vert_src = " v_color = in_color;\n" " v_color.rgb += u_ambLight.rgb*surfAmbient;\n" -" v_color.rgb += DoDynamicLight(Vertex.xyz, Normal)*surfDiffuse;\n" " v_color = clamp(v_color, 0.0, 1.0);\n" " v_color *= u_matColor;\n" diff --git a/vendor/librw/src/gl/shaders/header.vert b/vendor/librw/src/gl/shaders/header.vert index 6be1772..fdb73e7 100644 --- a/vendor/librw/src/gl/shaders/header.vert +++ b/vendor/librw/src/gl/shaders/header.vert @@ -49,26 +49,8 @@ uniform mat4 u_proj; uniform mat4 u_view; #endif -#define MAX_LIGHTS 4 - -#ifdef USE_UBOS -layout(std140) uniform Object -{ - mat4 u_world; - vec4 u_ambLight; - vec4 u_lightParams[MAX_LIGHTS]; // type, radius, minusCosAngle, hardSpot - vec4 u_lightPosition[MAX_LIGHTS]; - vec4 u_lightDirection[MAX_LIGHTS]; - vec4 u_lightColor[MAX_LIGHTS]; -}; -#else uniform mat4 u_world; uniform vec4 u_ambLight; -uniform vec4 u_lightParams[MAX_LIGHTS]; // type, radius, minusCosAngle, hardSpot -uniform vec4 u_lightPosition[MAX_LIGHTS]; -uniform vec4 u_lightDirection[MAX_LIGHTS]; -uniform vec4 u_lightColor[MAX_LIGHTS]; -#endif uniform vec4 u_matColor; uniform vec4 u_surfProps; // amb, spec, diff, extra @@ -77,53 +59,6 @@ uniform vec4 u_surfProps; // amb, spec, diff, extra #define surfSpecular (u_surfProps.y) #define surfDiffuse (u_surfProps.z) -vec3 DoDynamicLight(vec3 V, vec3 N) -{ - vec3 color = vec3(0.0, 0.0, 0.0); -/* - for(int i = 0; i < MAX_LIGHTS; i++){ - if(u_lightParams[i].x == 0.0) - break; -#ifdef DIRECTIONALS - if(u_lightParams[i].x == 1.0){ - // direct - float l = max(0.0, dot(N, -u_lightDirection[i].xyz)); - color += l*u_lightColor[i].rgb; - }else -#endif -#ifdef POINTLIGHTS - if(u_lightParams[i].x == 2.0){ - // point - vec3 dir = V - u_lightPosition[i].xyz; - float dist = length(dir); - float atten = max(0.0, (1.0 - dist/u_lightParams[i].y)); - float l = max(0.0, dot(N, -normalize(dir))); - color += l*u_lightColor[i].rgb*atten; - }else -#endif -#ifdef SPOTLIGHTS - if(u_lightParams[i].x == 3.0){ - // spot - vec3 dir = V - u_lightPosition[i].xyz; - float dist = length(dir); - float atten = max(0.0, (1.0 - dist/u_lightParams[i].y)); - dir /= dist; - float l = max(0.0, dot(N, -dir)); - float pcos = dot(dir, u_lightDirection[i].xyz); // cos to point - float ccos = -u_lightParams[i].z; - float falloff = (pcos-ccos)/(1.0-ccos); - if(falloff < 0.0) // outside of cone - l = 0.0; - l *= max(falloff, u_lightParams[i].w); - return l*u_lightColor[i].rgb*atten; - }else -#endif - ; - } -*/ - return color; -} - float DoFog(float w) { return clamp((w - u_fogEnd)*u_fogRange, u_fogDisable, 1.0); diff --git a/vendor/librw/src/gl/shaders/header_vs.inc b/vendor/librw/src/gl/shaders/header_vs.inc index c2a9969..3a1a2f5 100644 --- a/vendor/librw/src/gl/shaders/header_vs.inc +++ b/vendor/librw/src/gl/shaders/header_vs.inc @@ -50,26 +50,8 @@ const char *header_vert_src = "uniform mat4 u_view;\n" "#endif\n" -"#define MAX_LIGHTS 4\n" - -"#ifdef USE_UBOS\n" -"layout(std140) uniform Object\n" -"{\n" -" mat4 u_world;\n" -" vec4 u_ambLight;\n" -" vec4 u_lightParams[MAX_LIGHTS]; // type, radius, minusCosAngle, hardSpot\n" -" vec4 u_lightPosition[MAX_LIGHTS];\n" -" vec4 u_lightDirection[MAX_LIGHTS];\n" -" vec4 u_lightColor[MAX_LIGHTS];\n" -"};\n" -"#else\n" "uniform mat4 u_world;\n" "uniform vec4 u_ambLight;\n" -"uniform vec4 u_lightParams[MAX_LIGHTS]; // type, radius, minusCosAngle, hardSpot\n" -"uniform vec4 u_lightPosition[MAX_LIGHTS];\n" -"uniform vec4 u_lightDirection[MAX_LIGHTS];\n" -"uniform vec4 u_lightColor[MAX_LIGHTS];\n" -"#endif\n" "uniform vec4 u_matColor;\n" "uniform vec4 u_surfProps; // amb, spec, diff, extra\n" @@ -78,53 +60,6 @@ const char *header_vert_src = "#define surfSpecular (u_surfProps.y)\n" "#define surfDiffuse (u_surfProps.z)\n" -"vec3 DoDynamicLight(vec3 V, vec3 N)\n" -"{\n" -" vec3 color = vec3(0.0, 0.0, 0.0);\n" -"/*\n" -" for(int i = 0; i < MAX_LIGHTS; i++){\n" -" if(u_lightParams[i].x == 0.0)\n" -" break;\n" -"#ifdef DIRECTIONALS\n" -" if(u_lightParams[i].x == 1.0){\n" -" // direct\n" -" float l = max(0.0, dot(N, -u_lightDirection[i].xyz));\n" -" color += l*u_lightColor[i].rgb;\n" -" }else\n" -"#endif\n" -"#ifdef POINTLIGHTS\n" -" if(u_lightParams[i].x == 2.0){\n" -" // point\n" -" vec3 dir = V - u_lightPosition[i].xyz;\n" -" float dist = length(dir);\n" -" float atten = max(0.0, (1.0 - dist/u_lightParams[i].y));\n" -" float l = max(0.0, dot(N, -normalize(dir)));\n" -" color += l*u_lightColor[i].rgb*atten;\n" -" }else\n" -"#endif\n" -"#ifdef SPOTLIGHTS\n" -" if(u_lightParams[i].x == 3.0){\n" -" // spot\n" -" vec3 dir = V - u_lightPosition[i].xyz;\n" -" float dist = length(dir);\n" -" float atten = max(0.0, (1.0 - dist/u_lightParams[i].y));\n" -" dir /= dist;\n" -" float l = max(0.0, dot(N, -dir));\n" -" float pcos = dot(dir, u_lightDirection[i].xyz); // cos to point\n" -" float ccos = -u_lightParams[i].z;\n" -" float falloff = (pcos-ccos)/(1.0-ccos);\n" -" if(falloff < 0.0) // outside of cone\n" -" l = 0.0;\n" -" l *= max(falloff, u_lightParams[i].w);\n" -" return l*u_lightColor[i].rgb*atten;\n" -" }else\n" -"#endif\n" -" ;\n" -" }\n" -"*/\n" -" return color;\n" -"}\n" - "float DoFog(float w)\n" "{\n" " return clamp((w - u_fogEnd)*u_fogRange, u_fogDisable, 1.0);\n" diff --git a/vendor/librw/src/gl/shaders/matfx_env.vert b/vendor/librw/src/gl/shaders/matfx_env.vert index 1af311d..6593ffb 100644 --- a/vendor/librw/src/gl/shaders/matfx_env.vert +++ b/vendor/librw/src/gl/shaders/matfx_env.vert @@ -21,7 +21,6 @@ main(void) v_color = in_color; v_color.rgb += u_ambLight.rgb*surfAmbient; - v_color.rgb += DoDynamicLight(Vertex.xyz, Normal)*surfDiffuse; v_color = clamp(v_color, 0.0, 1.0); v_envColor = max(v_color, u_colorClamp) * u_envColor; v_color *= u_matColor; diff --git a/vendor/librw/src/gl/shaders/matfx_gl.inc b/vendor/librw/src/gl/shaders/matfx_gl.inc index e20ee2e..51154f7 100644 --- a/vendor/librw/src/gl/shaders/matfx_gl.inc +++ b/vendor/librw/src/gl/shaders/matfx_gl.inc @@ -22,7 +22,6 @@ const char *matfx_env_vert_src = " v_color = in_color;\n" " v_color.rgb += u_ambLight.rgb*surfAmbient;\n" -" v_color.rgb += DoDynamicLight(Vertex.xyz, Normal)*surfDiffuse;\n" " v_color = clamp(v_color, 0.0, 1.0);\n" " v_envColor = max(v_color, u_colorClamp) * u_envColor;\n" " v_color *= u_matColor;\n" diff --git a/vendor/librw/src/world.cpp b/vendor/librw/src/world.cpp index 2a3b11a..e98d813 100644 --- a/vendor/librw/src/world.cpp +++ b/vendor/librw/src/world.cpp @@ -144,9 +144,6 @@ World::enumerateLights(Atomic *atomic, WorldLights *lightData) { int32 maxDirectionals, maxLocals; - maxDirectionals = lightData->numDirectionals; - maxLocals = lightData->numLocals; - lightData->numDirectionals = 0; lightData->numLocals = 0; lightData->numAmbients = 0; @@ -166,33 +163,8 @@ World::enumerateLights(Atomic *atomic, WorldLights *lightData) lightData->ambient.green += l->color.green; lightData->ambient.blue += l->color.blue; lightData->numAmbients++; - }else if(normals && l->getType() == Light::DIRECTIONAL){ - if(lightData->numDirectionals < maxDirectionals) - lightData->directionals[lightData->numDirectionals++] = l; } } - - if(atomic->world != this) - return; - - if(!normals) - return; - - Sphere *atomsphere = atomic->getWorldBoundingSphere(); - // TODO: for this we would use an atomic's world sectors, but we don't have those yet - FORLIST(lnk, this->localLights){ - if(lightData->numLocals >= maxLocals) - return; - - Light *l = Light::fromWorld(lnk); - if((l->getFlags() & Light::LIGHTATOMICS) == 0) - continue; - - // check if spheres are intersecting - V3d dist = sub(l->getFrame()->getLTM()->pos, atomsphere->center); - if(length(dist) < atomsphere->radius + l->radius) - lightData->locals[lightData->numLocals++] = l; - } } }