* WIP compressed textures, swizzles, sRGB sampling, ...
* refactor texture type info & fix random bugs
* fix preprocessing of sRGB textures
* handle y-flipped basis textures
* glcommon: better WebGL compat for compressed format detection
* missed WEBGL_compressed_texture_pvrtc
* implement compressed texture xcoding and uploading
* Add basis_universal submodule
* Reorganize texture loader code
Clean up some code
Isolate Basis Universal loader into a separate module
* Add wrapper script for encoding .basis textures
* basisu: honor custom metadata written by the mkbasis.py script
* mkbasis.py: add --incredibly-slow and --dry-run
* Move pixmap code from util/ to pixmap/
* Add an on-disk transcode cache for basis textures to speed up loads
* Compress texture cache with zlib
* Use readable format names for basisu cache filenames
* basisu: mip bias test code
* basisu: small caching cleanup
* add TAISEI_BASISU_MIP_BIAS env variable
* Improve OpenGL format matching heuristics
* Document considerations for compressed format priority
* Remove dead code
* Enable two forgotten formats, BC3_RGBA and ATC_RGBA
Also prefer BC7 over BC1/BC3
* Recognize GL_ANGLE_compressed_texture_etc for ETC2 textures
* Default depth buffers to 24-bit; remove ANGLE hack
* Fix glcommon_check_extension for GLES2/legacy gl
* Add renderer feature bit for texture swizzle masks
* glcommon: Fixup internal formats for GLES2
Sized internal formats are not allowed in GLES2
* Fix emscripten compile errors
* Update basis_universal
* remove more dead code
* revert irrelevant stage4 change
* shut up UBSan
* basisu: shut up some debug spam
* Add normalmap sampling helper to util.glslh
* basisu: add a gray-alpha mode
* mkbasis.py: Abort if image dimansions aren't multiples of 4
* Add basic Basis Universal encoding documentation (WIP)
* doc/basisu: Add paragraph about modes; minor tweaks
* basisu: workarounds for GL texture size requirements
* gles20: fix uncompressed sRGB formats
* Partial workaround for missing swizzles in gles2 and webgl
* remove invalid assertion
* New renderer API to expose glDrawBuffers-like functionality
* stagedraw: disable all color outputs for copy_depth pass
required for WebGL compatibility
* support GL_ANGLE_request_extension
* emscripten: include *.basis in gfx package
Also fix a potential problem when more than one .pkgdir is used to
construct emscripten packages
* Don't rely on emscripten runtime to enable webgl extensions
This replaces the r_mat_foo functions with specialized r_mat_{mv,tex,proj}_foo counterparts that operate explicitly on the modelview, texture, and projection matrix stacks respectively.
* WIP portrait faces
* character expressions for dialogue in first 3 stages (wip)
* dialog: simplified face system, new faces, script revisions (wip)
* fix wrong face name in reimu script
* cirno angry face; elly beaten variant
* render_character_portrait(): fix garbage bg and filter-bleeding
* workaround for incorrect face blending on dialog fade
* render_character_portrait(): fix bogus debug labels
* Replace sprite offsets with the more powerful paddings
* new faces for youmu, wriggle, kurumi; dialogue updates
* fix release build
* Update portraits; add Iku faces and Elly shouting face
* Add Reimu sigh face and Marisa sweat_smile face
* Add Kurumi dissatisfied face
* update Hina
* WIP some projectile effects
* fix segfault
* Laser smoothing and glow via post-processing blur magic
TODO: make it optional
* fix memory corruption
* fix memory corruption for realsies now
* fix color_get_hsl for out-of-range colors
* some more bullet flare tweaks
* some lame clear effect workarounds
* spawn bullet flares after frame 0; looks better and fixes some problems
* New baryon explosion; fix petal_explosion; leanify everything
* Add missing bullet flare sprite, rebuild main atlas
* improve batching efficiency with bullet spawn flares
* forgot git add
* Group projectiles/particles by shader where possible
* Another take on baryon explosion; make fg framebuffers 16bit
* WIP some settings for toasters
* remove stupid debug log
* microoptimization that probably does nothing anyway
* somewhat more intuitive quality settings
* Whitelist more particles (MarisaB is on hold)
* Whitelist (and fix) some more stage6 particles (mostly ToE)
* Add a spell name background
* Experimental radial healthbar for bosses
* healthbar tweaks
* thiccer healthbars in response to feedback
* remove healthbar survival timer; just fade out on survivals
* Add linear healthbars option; WIP other boss HUD tweaks
* Use the proper spell card name format
* New font and some random garbage to go along with it
* Generate static font outlines for use in text shaders
* Use outlines in overlay text shader
* Complete boss HUD/healthbar fading logic
* fix boss timer limit
* stage5 bombs explosion effect
* split PFLAG_NOSPAWNZOOM into PFLAG_NOSPAWNFLARE and PFLAG_NOSPAWNFADE;
introduce PFLAG_NOSPAWNEFFECTS which disables both (it's just the two
values OR'd together)
simplify vampiric vapor bullet spawning effect
* Remove spawn fade-in from super-fast stage5 fairy projectiles (limiters)
* lower particle density in v.vapor in minimal mode
* graze effect tweaks
* fix text shortening, tweak replay menu layout
* stupid debug spam
* revisit grazing effects again
* dumb debug spam again
* improve boss attack timer
* overlay effect for boss deaths (similar to the player one)
* spice up spellcard declaration (HUD)
* don't spawn boss death overlay if fleed
* modify Exo2 font to use tabular figures
* adjust replay menu for the font change
* draw timer & power with standard font (phasing out the numbers font)
* WIP new HUD; random fixes/tweaks
* hud: move difficulty indicator
* hud: move debug stuff around
* preloads, mostly
* fix youmuA batching conflict
* shitty workaround for the shitty screenshake shit
* remove extraspell lag by stopping to draw stagebg sooner
which is possible because extra spells have a different spellcard_intro timing. Fun fact of the day: the duration of spellcard_intro is always ATTACK_START_DELAY_EXTRA even for normal spells!
* new stain particle
* i disabled background rendering…
* "batch" marisa_b masterspark draws
* remove these once a new atlas is generated
* make toe quick again
* hopefully fix all occurences of changed stain and ScaleFade behavior
* tweaking reimu_a and toe boson launch effects
* make lhc fast again
* softer involnerability effect
* fix stage 1 snow on the water bug (and improve performance)
translated the time to the future a bit because it only seemed to be an issue for small time values
* remove unnecessary spawnflare from toe
* tone down extra spell start effect
* experimental ReimuB gap shader optimization
* fix python3 shebangs
* generate simple blur shaders w/ hardcoded kernels
* New loading screen
* lasers: fix incorrect draw hook registration
* add webp support for atlas generator
* Use ImageMagick for atlas composition (adds 16-bit support)
* Atlas maintenance
* make the vampiric vapor bullets less prone to invisibility
* Revert a few particles to the quadratic fade curve
* experimental baryon effect
* improve baryon sprites
* disable the baryon effect on minimal postprocessing setting
* First steps towards shader transpilation
Needs to be manually enabled via -Dshader_transpiler=true.
Requires shaderc. https://github.com/google/shaderc
Not yet functional due to missing SPIRV-Cross integration. SPIRV-Cross
currently does not have an official C API, and crossc is too minimal to
be useful. The current plan is to extend crossc and vendor it, while
also sending PRs upstream.
* Integrate crossc; shader transpilation for GLES now works
* fix leak
* gles30 backend now playable on Mesa with 3.2 context
Some rendering issues are present. Identified so far:
- Marisa's lasers are invisible
- Death effect looks wrong
Also, a small pixmap manipulation library has been written, and the
texture uploading API redesigned around it.
* fix marisa lasers in GLES (uniform name clashed with builtin)
* fix player death effect in GLES (another name clash)
* Dump ANGLE's translated shader code in debug log
* fix screenshots
* Drop support for triangle fans, switch to strips
Fans offer no advantage over strips, and they've been removed in D3D10+,
so ANGLE has to emulate them.
* crude workaround for an ANGLE bug
* Re-enable GL debug labels, fix an issue with them that affected ANGLE (but was always technically a bug)
* fix race condition in shaderc initialization
* New SDL_RWops interface for vertex buffers
* Optimize VBO streaming via buffering updates
Measurable performance improvement even with the main gl33 renderer,
drastic improvement with ANGLE.
* Fix the depth texture binding problem under ANGLE
Apparently it hates GL_DEPTH_COMPONENT16 for some reason. Sized internal
formats are not supported in GLES 2.0 anyway, so not using them is
probably a good idea.
* fix GLES2.0 segfault (the backend still doesn't work, though)
* dump GL extensions at info log level, not debug
* get around a Mesa bug; more correct texture format table for GLES2
* Correct GLES3 texture format table according to the spec
Not a Mesa bug after all
* require crossc>=1.5.0, fallback to subproject
* Request at least 8bit per color channel in GL backends
* Forbid lto for static windows builds with shader_transpiler=true
* fix edge case segfault
* Add basic ANGLE bundling support to the build system
Windows only, and no NSIS support yet
* Fix various windows-related build system and installer brokenness
* Disable gles backends by default
* update documentation
* Refacor uniforms API:
- More complete and consistent
- Type-safety
- Usage correctess assertions missing for now, planned
* Redesign texturing API: texunits gone, assign textures to sampler uniforms directly
r_texture_create now allocates memory and returns an opaque Texture
pointer; similar changes to the other renderer APIs will follow.
* Framebuffers: make _create return an opaque pointer, add debug label APIs (unused for now)
* opaque pointers and debug label APIs for vertex arrays and buffers
* fix null renderer
* Refactor glsl preprocessing into an independent module
* Separate shader resource management from renderer backend
This makes it possible to add more shading languages and/or include a
transpiler, which will be useful for the GLES backend.
* refactor r_clear into a stateless API
* add r_texture_clear API; fix gl33_framebuffer_clear
* Replace deprecated glsl_objects with objects in all *.prog files
* fix missing texture_clear implementation in null renderer
* remove some dead code in null renderer
* fix GLES segfault
* GLES 3.0 actually has glVertexAttribDivisor
* Query GL for supported GLSL versions (preparing to add shader transcompilation)
* Reimu (#101)
* add the reimu
* Add Reimu story
* account for various blunders
* add reimu dialog picture
* Reimu: WIP yin-yang orbs
* reimu: fix up indents
* Reimu: swap the shotmode names to match the kanji order in her Japanese name
* Reimu: compatibility with the latest system
* WIP ReimuA crap
* ReimuA homing trails
* more ReimuA stuff
* more ReimuA adjustments + enhanced DPS stats
* Reimu: stubs for new player animation sequences
* Reimu: occupy the 0th character slot
* Reimu: tweak needle sprite
* Reimu: buff movement speed to better match Touhou
* Reimu: fixup for the recent projectile changes
* ReimuA: make homing shots a bit smaller; give them custom effect on collision
* Reimu: add intermediate frames; move some loose sprites to the atlas
* Reimu: fix compile errors
* replace DBL_MAX by INFINITY
* Don’t draw reimu orbs twice
fixes #127
* add new reimu dialog pic
* ReimuA adjustments (mostly homing); it's still OP
* wip ReimuB gaps
* still not sure where i'm going with these gaps
* meh
* Reimu: premultiplied alpha fixups after rebase
* reimuB shot pattern with basic power scaling (not balanced at all)
* reimuB: some lame-ass particle effects
* ReimuB bomb effect prototype
* reimuA bomb prototype
* fix reimu shots for the new damage system
* Reimu: use the new player_is_bomb_active() function, add placeholder BG for ReimuB
* some reimuB bomb projectiles
* ReimuB bomb bg and some framebuffer utils required to support it.
Might reuse this at least in part for ReimuA unless we come up with
something better.
* hack to fix ReimuB bomb fade; refactoring needed
* reimuA damaging bombs
* fix ub
* prevent nan when reimuA bombs without enemies present
* add a bomb_bg to reimuA
* ...
* various fantasy seal tweaks
* Reimu: placeholder bomb sounds; slight fantasy seal buff
* fix null pointer dereference
* Reimu "balance" adjustments; minor fixes
* putting bandaids over gunshot wounds
* Add aoe damage and bullet cancel to ReimuB's bomb
* more exorcism porn
* make reimu bomb bg runes better visible on dark backgrounds
* More ReimuA shot changes
* WIP premultiplied alpha
* WIP color API rework (doesn't build yet; lots of things left to convert)
* convert everything remaining to new Color api except stage*_event.c files
* convert the stages to new Color api. builds & runs now; still many rendering errors
* fix the bullet shader for premultiplied alpha
* fix masterspark, graphs and stage 1 fog clouds
* fix marisa_b and most of spellcards
* Add deprecation warnings for BLEND_ADD and PFLAG_DRAWADD
* fix a segfault in stage 6
undo accidental earlier change
* fix text_hud.frag.glsl
* fix scuttle bg and remaining stage3 BLEND_ADDs
* fix marisa laser opacity
* hacky fix for myon
The old implementation relied on alpha being stored inside p->color. In
premul alpha this doesn’t work and functions like color_set_opacity
can’t solve this i think.
So I tried messing around with it until it looked somewhat similar.
* fix marisa_b stars
* remove color_set_opacity i overlooked
* more plrmode blending changes
* fixup additive blending in stage 1
* various premultiplied alpha fixups for bosses and enemies
* stage 2 premul alpha fixups
* stage 4 premul alpha fixups
* stage 5 premul alpha fixups
* stage 6 premul alpha fixups
* make lasers also use the PMA blend mode
* remove PFLAG_DRAWADD and PFLAG_DRAWSUB
* fix remaining PMA issues in menus
* lame extraspell bg workaround
* fix item alpha
* make marisaA lasers look somewhat like in master
* fix marisaA bomb background fadeout
* fixup various r_color4 calls
* fix myon
* remove dead code
* fix use of BLEND_ADD in player death effect
* fix myon shot trails (broken on master as well)
* fix myon shot fade-in
* extend the sprite shaders custom parameter to a vec4
* fix youmuB stuff and make it look somewhat better.
the code looks even worse though.
* Renderer: rename render targets to framebuffers
* Refactor framebuffer pair helper and some of the video API
* Remove hardcoded dimensions from draw_framebuffer_tex
* Make viewport a per-framebuffer property rather than a global one
* Handle config updates via the events system. React to viewport fg/bg quality change requests.