diff options
| author | xolatile | 2025-07-16 23:07:43 +0200 |
|---|---|---|
| committer | xolatile | 2025-07-16 23:07:43 +0200 |
| commit | 7256502afa0babe60fcafbd2888cd3e33c3f9b6b (patch) | |
| tree | 8a8495662a69bdadc4b5d9152656b9f02a44d668 /src/engine/glare.cpp | |
| parent | bc596ac9d4cdd00abf537b88d3c544be161330cc (diff) | |
| download | xolatile-badassbug-7256502afa0babe60fcafbd2888cd3e33c3f9b6b.tar.xz xolatile-badassbug-7256502afa0babe60fcafbd2888cd3e33c3f9b6b.tar.zst | |
Source code, broken...
Diffstat (limited to 'src/engine/glare.cpp')
| -rw-r--r-- | src/engine/glare.cpp | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/src/engine/glare.cpp b/src/engine/glare.cpp new file mode 100644 index 0000000..dc639ad --- /dev/null +++ b/src/engine/glare.cpp @@ -0,0 +1,71 @@ +#include "engine.h" +#include "rendertarget.h" + +static struct glaretexture : rendertarget +{ + bool dorender() + { + extern void drawglare(); + drawglare(); + return true; + } +} glaretex; + +void cleanupglare() +{ + glaretex.cleanup(true); +} + +VARFP(glaresize, 6, 8, 10, cleanupglare()); +VARP(glare, 0, 0, 1); +VARP(blurglare, 0, 4, 7); +VARP(blurglareaspect, 0, 1, 1); +VARP(blurglaresigma, 1, 50, 200); + +VAR(debugglare, 0, 0, 1); + +void viewglaretex() +{ + if(!glare) return; + glaretex.debug(); +} + +bool glaring = false; + +void drawglaretex() +{ + if(!glare) return; + + int w = 1<<glaresize, h = 1<<glaresize, blury = blurglare; + if(blurglare && blurglareaspect) + { + while(h > (1<<5) && (screenw*h)/w >= (screenh*4)/3) h /= 2; + blury = ((1 + 4*blurglare)*(screenw*h)/w + screenh*2)/(screenh*4); + blury = clamp(blury, 1, MAXBLURRADIUS); + } + + glaretex.render(w, h, blurglare, blurglaresigma/100.0f, blury); +} + +FVAR(glaremod, 0.5f, 0.75f, 1); +FVARP(glarescale, 0, 1, 8); + +void addglare() +{ + if(!glare) return; + + glEnable(GL_BLEND); + glBlendFunc(GL_ONE, GL_ONE); + + SETSHADER(screenrect); + + glBindTexture(GL_TEXTURE_2D, glaretex.rendertex); + + float g = glarescale*glaremod; + gle::colorf(g, g, g); + + screenquad(1, 1); + + glDisable(GL_BLEND); +} + |
