From df493b99e8a33ee196b96761074e9f36bd344054 Mon Sep 17 00:00:00 2001 From: xolatile Date: Mon, 21 Jul 2025 00:47:24 +0200 Subject: [PATCH] No need for lens flare... --- .gitignore | 8 +- src/Makefile | 3 +- src/engine/lensflare.h | 193 --------------------------------- src/engine/renderparticles.cpp | 5 - 4 files changed, 5 insertions(+), 204 deletions(-) delete mode 100644 src/engine/lensflare.h diff --git a/.gitignore b/.gitignore index a449597..81006f1 100644 --- a/.gitignore +++ b/.gitignore @@ -1,11 +1,11 @@ src/engine/*.o src/fpsgame/*.o src/shared/*.o -src/engine/engine.gch -src/fpsgame/game.gch +src/engine/engine.h.gch +src/fpsgame/game.h.gch src/shared/cube.h.gch src/sauer_client src/sauer_server -bind_unix/native_client -bind_unix/native_server +bin_unix/native_client +bin_unix/native_server packages/base/*.BAK diff --git a/src/Makefile b/src/Makefile index 3a45f2e..978de06 100644 --- a/src/Makefile +++ b/src/Makefile @@ -368,8 +368,7 @@ engine/renderparticles.o: shared/glexts.h shared/glemu.h shared/iengine.h engine/renderparticles.o: shared/igame.h engine/world.h engine/octa.h engine/renderparticles.o: engine/lightmap.h engine/bih.h engine/texture.h engine/renderparticles.o: engine/model.h engine/rendertarget.h -engine/renderparticles.o: engine/depthfx.h engine/explosion.h -engine/renderparticles.o: engine/lensflare.h engine/lightning.h +engine/renderparticles.o: engine/depthfx.h engine/explosion.h engine/lightning.h engine/rendersky.o: engine/engine.h shared/cube.h shared/tools.h engine/rendersky.o: shared/geom.h shared/ents.h shared/command.h engine/rendersky.o: shared/glexts.h shared/glemu.h shared/iengine.h diff --git a/src/engine/lensflare.h b/src/engine/lensflare.h deleted file mode 100644 index 1618e52..0000000 --- a/src/engine/lensflare.h +++ /dev/null @@ -1,193 +0,0 @@ -static struct flaretype -{ - int type; /* flaretex index, 0..5, -1 for 6+random shine */ - float loc; /* postion on axis */ - float scale; /* texture scaling */ - uchar alpha; /* color alpha */ -} flaretypes[] = -{ - {2, 1.30f, 0.04f, 153}, //flares - {3, 1.00f, 0.10f, 102}, - {1, 0.50f, 0.20f, 77}, - {3, 0.20f, 0.05f, 77}, - {0, 0.00f, 0.04f, 77}, - {5, -0.25f, 0.07f, 127}, - {5, -0.40f, 0.02f, 153}, - {5, -0.60f, 0.04f, 102}, - {5, -1.00f, 0.03f, 51}, - {-1, 1.00f, 0.30f, 255}, //shine - red, green, blue - {-2, 1.00f, 0.20f, 255}, - {-3, 1.00f, 0.25f, 255} -}; - -struct flare -{ - vec o, center; - float size; - bvec color; - bool sparkle; -}; - -VAR(flarelights, 0, 0, 1); -VARP(flarecutoff, 0, 1000, 10000); -VARP(flaresize, 20, 100, 500); - -struct flarerenderer : partrenderer -{ - int maxflares, numflares; - unsigned int shinetime; - flare *flares; - - flarerenderer(const char *texname, int maxflares) - : partrenderer(texname, 3, PT_FLARE|PT_SHADER), maxflares(maxflares), numflares(0), shinetime(0) - { - flares = new flare[maxflares]; - } - ~flarerenderer() - { - delete[] flares; - } - - void reset() - { - numflares = 0; - } - - void newflare(vec &o, const vec ¢er, uchar r, uchar g, uchar b, float mod, float size, bool sun, bool sparkle) - { - if(numflares >= maxflares) return; - vec target; //occlusion check (neccessary as depth testing is turned off) - if(!raycubelos(o, camera1->o, target)) return; - flare &f = flares[numflares++]; - f.o = o; - f.center = center; - f.size = size; - f.color = bvec(uchar(r*mod), uchar(g*mod), uchar(b*mod)); - f.sparkle = sparkle; - } - - void addflare(vec &o, uchar r, uchar g, uchar b, bool sun, bool sparkle) - { - //frustrum + fog check - if(isvisiblesphere(0.0f, o) > (sun?VFC_FOGGED:VFC_FULL_VISIBLE)) return; - //find closest point between camera line of sight and flare pos - vec flaredir = vec(o).sub(camera1->o); - vec center = vec(camdir).mul(flaredir.dot(camdir)).add(camera1->o); - float mod, size; - if(sun) //fixed size - { - mod = 1.0; - size = flaredir.magnitude() * flaresize / 100.0f; - } - else - { - mod = (flarecutoff-vec(o).sub(center).squaredlen())/flarecutoff; - if(mod < 0.0f) return; - size = flaresize / 5.0f; - } - newflare(o, center, r, g, b, mod, size, sun, sparkle); - } - - void makelightflares() - { - numflares = 0; //regenerate flarelist each frame - shinetime = lastmillis/10; - - if(editmode || !flarelights) return; - - const vector &ents = entities::getents(); - extern const vector &checklightcache(int x, int y); - const vector &lights = checklightcache(int(camera1->o.x), int(camera1->o.y)); - loopv(lights) - { - entity &e = *ents[lights[i]]; - if(e.type != ET_LIGHT) continue; - bool sun = (e.attr1==0); - float radius = float(e.attr1); - vec flaredir = vec(e.o).sub(camera1->o); - float len = flaredir.magnitude(); - if(!sun && (len > radius)) continue; - if(isvisiblesphere(0.0f, e.o) > (sun?VFC_FOGGED:VFC_FULL_VISIBLE)) continue; - vec center = vec(camdir).mul(flaredir.dot(camdir)).add(camera1->o); - float mod, size; - if(sun) //fixed size - { - mod = 1.0; - size = len * flaresize / 100.0f; - } - else - { - mod = (radius-len)/radius; - size = flaresize / 5.0f; - } - newflare(e.o, center, e.attr2, e.attr3, e.attr4, mod, size, sun, sun); - } - } - - int count() - { - return numflares; - } - - bool haswork() - { - return (numflares != 0) && !glaring && !reflecting && !refracting; - } - - void render() - { - textureshader->set(); - glDisable(GL_DEPTH_TEST); - if(!tex) tex = textureload(texname); - glBindTexture(GL_TEXTURE_2D, tex->id); - gle::defattrib(gle::ATTRIB_VERTEX, 3, GL_FLOAT); - gle::defattrib(gle::ATTRIB_TEXCOORD0, 2, GL_FLOAT); - gle::defattrib(gle::ATTRIB_COLOR, 4, GL_UNSIGNED_BYTE); - gle::begin(GL_QUADS); - loopi(numflares) - { - const flare &f = flares[i]; - vec center = f.center; - vec axis = vec(f.o).sub(center); - bvec4 color(f.color, 255); - loopj(f.sparkle?12:9) - { - const flaretype &ft = flaretypes[j]; - vec o = vec(axis).mul(ft.loc).add(center); - float sz = ft.scale * f.size; - int tex = ft.type; - if(ft.type < 0) //sparkles - always done last - { - shinetime = (shinetime + 1) % 10; - tex = 6+shinetime; - color.r = 0; - color.g = 0; - color.b = 0; - color[-ft.type-1] = f.color[-ft.type-1]; //only want a single channel - } - color.a = ft.alpha; - const float tsz = 0.25; //flares are aranged in 4x4 grid - float tx = tsz*(tex&0x03), ty = tsz*((tex>>2)&0x03); - gle::attribf(o.x+(-camright.x+camup.x)*sz, o.y+(-camright.y+camup.y)*sz, o.z+(-camright.z+camup.z)*sz); - gle::attribf(tx, ty+tsz); - gle::attrib(color); - gle::attribf(o.x+( camright.x+camup.x)*sz, o.y+( camright.y+camup.y)*sz, o.z+( camright.z+camup.z)*sz); - gle::attribf(tx+tsz, ty+tsz); - gle::attrib(color); - gle::attribf(o.x+( camright.x-camup.x)*sz, o.y+( camright.y-camup.y)*sz, o.z+( camright.z-camup.z)*sz); - gle::attribf(tx+tsz, ty); - gle::attrib(color); - gle::attribf(o.x+(-camright.x-camup.x)*sz, o.y+(-camright.y-camup.y)*sz, o.z+(-camright.z-camup.z)*sz); - gle::attribf(tx, ty); - gle::attrib(color); - } - } - gle::end(); - glEnable(GL_DEPTH_TEST); - } - - //square per round hole - use addflare(..) instead - particle *addpart(const vec &o, const vec &d, int fade, int color, float size, int gravity = 0) { return NULL; } -}; -static flarerenderer flares("packages/particles/lensflares.png", 64); - diff --git a/src/engine/renderparticles.cpp b/src/engine/renderparticles.cpp index 93034a2..8fa2171 100644 --- a/src/engine/renderparticles.cpp +++ b/src/engine/renderparticles.cpp @@ -864,7 +864,6 @@ typedef varenderer trailrenderer; #include "depthfx.h" #include "explosion.h" -#include "lensflare.h" #include "lightning.h" struct softquadrenderer : quadrenderer @@ -925,7 +924,6 @@ static partrenderer *parts[] = &texticons, // text icons &meters, // meter &metervs, // meter vs. - &flares // lens flares - must be done last }; void finddepthfxranges() @@ -1440,7 +1438,6 @@ static void makeparticles(entity &e) case 33: case 34: case 35: - flares.addflare(e.o, e.attr2, e.attr3, e.attr4, (e.attr1&0x02)!=0, (e.attr1&0x01)!=0); break; default: if(!editmode) @@ -1500,8 +1497,6 @@ void updateparticles() } else canemit = false; - flares.makelightflares(); - if(!editmode || showparticles) { int emitted = 0, replayed = 0; -- 2.39.5