Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
90 commits
Select commit Hold shift + click to select a range
3cfc1ea
feat(material): add material graph system
MrChampz Jul 25, 2026
547742a
feat(material): add PBR graph shader template
MrChampz Jul 26, 2026
055cfac
feat(material): compile graphs at runtime
MrChampz Jul 26, 2026
0084560
refactor(vulkan): clarify frame usage reset
MrChampz Jul 27, 2026
b704110
feat(material): expand graph node support
MrChampz Jul 27, 2026
d94e241
refactor(material): validate authored parameter schemas
MrChampz Jul 27, 2026
0644489
refactor(material): compile stable material layouts
MrChampz Jul 27, 2026
2947ac6
fix(material): migrate dissolve graph compilation
MrChampz Jul 27, 2026
83ecde2
refactor(material): connect Aether sprite render data
MrChampz Jul 27, 2026
0088e76
test(aether): remove unused world emitter binding
MrChampz Jul 28, 2026
b46d2d5
refactor(aether): render particle sprite materials
MrChampz Jul 29, 2026
174d7ee
refactor(aether): publish particle material textures safely
MrChampz Jul 30, 2026
7241d9c
feat(aether): publish graph materials to sprite emitters
MrChampz Jul 30, 2026
17f13cb
refactor(aether): remove redundant functional include
MrChampz Jul 30, 2026
00e0496
refactor(material): compile renderer permutations independently
MrChampz Jul 30, 2026
61964c0
feat(material): compile particle ribbon permutations
MrChampz Jul 30, 2026
50dfac1
feat(aether): render ribbon graph materials
MrChampz Jul 31, 2026
0edf108
fix(aether): align ribbon material descriptors
MrChampz Jul 31, 2026
3c59418
feat(aether): render mesh graph materials
MrChampz Jul 31, 2026
6ca40f5
refactor(material): centralize particle frame resources
MrChampz Aug 1, 2026
779088f
refactor(material): centralize particle pass preparation
MrChampz Aug 1, 2026
acc6693
refactor(material): centralize particle draw submission
MrChampz Aug 2, 2026
b913a4b
refactor(material): remove legacy particle graphics paths
MrChampz Aug 2, 2026
2a1a184
refactor(material): resolve particle defaults at effect import
MrChampz Aug 2, 2026
f6ea18d
refactor(material): publish particle material scenes
MrChampz Aug 2, 2026
12cc7a2
refactor(material): execute particle material scenes
MrChampz Aug 3, 2026
1b50263
refactor(material): author particle sprite appearance in materials
MrChampz Aug 3, 2026
8746dae
refactor(material): author particle effect materials from assets
MrChampz Aug 3, 2026
896995a
refactor(material): centralize material system composition
MrChampz Aug 4, 2026
479b0d3
refactor(material): add global material library
MrChampz Aug 4, 2026
d75bf41
fix(material): handle sentinel material usage
MrChampz Aug 4, 2026
e604b78
refactor(aether): centralize particle material resolution
MrChampz Aug 4, 2026
e631953
refactor(material): move compiled cache to renderer
MrChampz Aug 5, 2026
d659fab
refactor(aether): extract effect material resolution
MrChampz Aug 5, 2026
0320d0a
refactor(aether): add effect manager
MrChampz Aug 5, 2026
b8b8f34
refactor(aether): move runtime ownership to manager
MrChampz Aug 5, 2026
3da90af
refactor(aether): centralize system instance ownership
MrChampz Aug 6, 2026
81bc3ba
refactor(aether): expose system instance handles
MrChampz Aug 6, 2026
2edfb3f
refactor(aether): expose system instances
MrChampz Aug 6, 2026
391b03d
fix(vulkan): trim GPU renderer name
MrChampz Aug 6, 2026
f811075
refactor(aether): snapshot system instance state
MrChampz Aug 6, 2026
d695c6e
refactor(aether): snapshot frame submissions
MrChampz Aug 6, 2026
37b7279
style(aether): fix material scene declaration
MrChampz Aug 6, 2026
0e76d97
refactor(aether): publish frame submissions
MrChampz Aug 6, 2026
ae5e00d
refactor(application): prepare frames before rendering
MrChampz Aug 7, 2026
cc1960a
refactor(aether): defer instance retirement
MrChampz Aug 7, 2026
fbfb00e
refactor(aether): hide system instance identity
MrChampz Aug 7, 2026
d9e96b8
refactor(aether): publish system instance render proxies
MrChampz Aug 7, 2026
a96362f
refactor(aether): guard instance publication
MrChampz Aug 7, 2026
83a78ca
test(aether): cover instance frame handoff
MrChampz Aug 7, 2026
4be591a
refactor(aether): make effect loading static
MrChampz Aug 7, 2026
2aa7d92
docs(aether): document runtime entities
MrChampz Aug 9, 2026
fb2c0f7
refactor(aether): organize runtime namespaces
MrChampz Aug 9, 2026
adbc7c1
refactor(aether): rename resource pool
MrChampz Aug 9, 2026
a690633
docs(aether): document renderer responsibilities
MrChampz Aug 9, 2026
a9e9dd6
refactor(aether): separate simulation from rendering
MrChampz Aug 10, 2026
6746405
test(aether): organize tests by runtime module
MrChampz Aug 10, 2026
de210ac
docs(aether): document simulation rendering boundary
MrChampz Aug 11, 2026
7bcf8d9
refactor(aether): remove names from runtime data
MrChampz Aug 11, 2026
cd95faa
refactor(aether): resolve parameters in system instances
MrChampz Aug 11, 2026
adaa90b
refactor(aether): centralize runtime instance management
MrChampz Aug 11, 2026
3040daa
fix(vulkan): stabilize gpu test lifecycle
MrChampz Aug 11, 2026
6fb2aa4
refactor(aether): register persistent system instances
MrChampz Aug 12, 2026
17589cc
refactor(aether): simplify instance registry storage
MrChampz Aug 12, 2026
420d3c2
chore: merge with main
MrChampz Aug 27, 2026
0379a12
fix(aether): offset vortex parameter indices
MrChampz Aug 27, 2026
59d4c91
docs(material): document public material API
MrChampz Aug 30, 2026
b73a366
docs(material): document render material types
MrChampz Aug 30, 2026
6c01453
docs(material): document material registries
MrChampz Aug 30, 2026
902873a
docs(material): document compilation types
MrChampz Aug 30, 2026
067d265
docs(material): document material graph API
MrChampz Aug 30, 2026
fbf24b8
Refactor material graph nodes
MrChampz Aug 31, 2026
ba5f0f0
Complete material graph node refactor
MrChampz Sep 1, 2026
328b011
Extract material parameter types
MrChampz Sep 2, 2026
bd2d8b4
Share material node input definitions
MrChampz Sep 2, 2026
cbf60d0
chore: missing Dissolve changes
MrChampz Sep 2, 2026
05f5de8
fix: adjust to changes that were made
MrChampz Sep 2, 2026
9a24d0f
Fix constexpr material shader marker
MrChampz Sep 2, 2026
0f1b273
Export material emit context
MrChampz Sep 2, 2026
8e2f643
Export material public helpers
MrChampz Sep 2, 2026
b723f97
Reorganize materials module
MrChampz Sep 2, 2026
f5b0154
Centralize material frame preparation
MrChampz Sep 3, 2026
a710963
Track descriptor state per frame slot
MrChampz Sep 3, 2026
952f24d
Integrate material frame rendering
MrChampz Sep 4, 2026
1340739
Split frame slot state tracking
MrChampz Sep 4, 2026
adb5b19
Extract material proxy caching
MrChampz Sep 5, 2026
be01f94
Move material scene recording to renderer
MrChampz Sep 6, 2026
468f220
Expose prepared material scenes
MrChampz Sep 6, 2026
b56eef8
Move material frame resources to renderer
MrChampz Sep 7, 2026
55d968d
Test prepared material scenes
MrChampz Sep 7, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,16 @@
## C++ naming

- Never use `b` as a prefix or suffix to denote a `bool`. Prefer concise names that are clear from their context, such as `Cancelled` or `Completed`; use predicates such as `IsVisible`, `HasFocus`, `CanRender`, or `ShouldUpdate` when needed for clarity.

## C++ documentation

- Write Doxygen documentation in English for public types, public members, and public functions.
- Follow ISO 24495-1 plain-language principles: state the purpose first, use short direct sentences, and use familiar terms.
- Use `@param`, `@return`, `@tparam`, and `@pre` only when they add information needed to use the API correctly.
- Document public data members when their purpose, unit, ownership, valid range, or relationship to another member is not immediately clear.
- Use a short single-sentence comment for private methods. Document private data only when it is necessary to explain an invariant or a non-obvious relationship.

## Validation

- This project targets macOS and Windows. Validate changes for Windows compilation and linking implications even when only macOS is available locally; the CI runs tests on Windows.
- When a public API crosses a shared-library boundary, verify that its out-of-line symbols use `ELIXIR_API` where Windows DLL export and import require it.
3 changes: 3 additions & 0 deletions Assets/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
/Meshes

*.hdr
20 changes: 10 additions & 10 deletions Assets/VFX/FireAndFireworks.json
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@
{
"name": "FlameCore",
"renderMode": "Sprite",
"spriteTexture": "Assets/Textures/SoftGlow.png",
"material": { "color": "$flame_start", "emissive": [1.25, 0.15, 0.01, 0.0], "texture": "Assets/Textures/SoftGlow.png" },
"maxParticles": 2200,
"spawnRate": "$spawn_rate",
"parameters": {
Expand Down Expand Up @@ -138,7 +138,7 @@
{
"name": "EmberSparks",
"renderMode": "Sprite",
"spriteTexture": "Assets/Textures/SoftGlow.png",
"material": { "color": "$ember_start", "emissive": [0.90, 0.08, 0.01, 0.0], "texture": "Assets/Textures/SoftGlow.png" },
"maxParticles": 1200,
"spawnRate": "$spawn_rate",
"parameters": {
Expand Down Expand Up @@ -166,7 +166,7 @@
{
"name": "SmokePlume",
"renderMode": "Sprite",
"spriteTexture": "Assets/Textures/SoftGlow.png",
"material": { "color": "$smoke_start", "texture": "Assets/Textures/SoftGlow.png" },
"maxParticles": 1000,
"spawnRate": "$spawn_rate",
"parameters": {
Expand All @@ -193,7 +193,7 @@
{
"name": "VortexSprites",
"renderMode": "Sprite",
"spriteTexture": "Assets/Textures/SoftGlow.png",
"material": { "color": [0.88, 0.54, 1.00, 0.78], "emissive": [0.40, 0.10, 0.60, 0.0], "texture": "Assets/Textures/SoftGlow.png" },
"maxParticles": 1800,
"spawnRate": "$spawn_rate",
"parameters": {
Expand Down Expand Up @@ -223,7 +223,7 @@
{
"name": "RocketOrange",
"renderMode": "Sprite",
"spriteTexture": "Assets/Textures/SoftGlow.png",
"material": { "color": "$trail_start", "emissive": [0.80, 0.15, 0.02, 0.0], "texture": "Assets/Textures/SoftGlow.png" },
"maxParticles": 220,
"spawnRate": "$spawn_rate",
"burst": { "count": 14, "interval": 1.25 },
Expand Down Expand Up @@ -252,7 +252,7 @@
{
"name": "RocketBlue",
"renderMode": "Sprite",
"spriteTexture": "Assets/Textures/SoftGlow.png",
"material": { "color": "$trail_start", "emissive": [0.05, 0.25, 1.00, 0.0], "texture": "Assets/Textures/SoftGlow.png" },
"maxParticles": 220,
"spawnRate": "$spawn_rate",
"burst": { "count": 14, "interval": 1.55 },
Expand Down Expand Up @@ -281,7 +281,7 @@
{
"name": "RocketGold",
"renderMode": "Sprite",
"spriteTexture": "Assets/Textures/SoftGlow.png",
"material": { "color": "$trail_start", "emissive": [0.80, 0.45, 0.05, 0.0], "texture": "Assets/Textures/SoftGlow.png" },
"maxParticles": 240,
"spawnRate": "$spawn_rate",
"burst": { "count": 16, "interval": 1.85 },
Expand Down Expand Up @@ -310,7 +310,7 @@
{
"name": "BurstOrange",
"renderMode": "Sprite",
"spriteTexture": "Assets/Textures/SoftGlow.png",
"material": { "color": "$burst_a_start", "emissive": [0.80, 0.05, 0.01, 0.0], "texture": "Assets/Textures/SoftGlow.png" },
"maxParticles": 1800,
"spawnRate": "$spawn_rate",
"trigger": { "source": "RocketOrange", "delay": 1.18 },
Expand Down Expand Up @@ -340,7 +340,7 @@
{
"name": "BurstBlue",
"renderMode": "Sprite",
"spriteTexture": "Assets/Textures/SoftGlow.png",
"material": { "color": "$burst_b_start", "emissive": [0.05, 0.30, 1.00, 0.0], "texture": "Assets/Textures/SoftGlow.png" },
"maxParticles": 1800,
"spawnRate": "$spawn_rate",
"trigger": { "source": "RocketBlue", "delay": 1.12 },
Expand Down Expand Up @@ -370,7 +370,7 @@
{
"name": "BurstGold",
"renderMode": "Sprite",
"spriteTexture": "Assets/Textures/SoftGlow.png",
"material": { "color": "$burst_c_start", "emissive": [1.00, 0.50, 0.05, 0.0], "texture": "Assets/Textures/SoftGlow.png" },
"maxParticles": 2000,
"spawnRate": "$spawn_rate",
"trigger": { "source": "RocketGold", "delay": 1.18 },
Expand Down
4 changes: 2 additions & 2 deletions Assets/VFX/RainStorm.json
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@
{
"name": "RainDrops",
"renderMode": "Sprite",
"spriteTexture": "./Assets/Textures/RainDrop.png",
"material": { "color": "$rain_drop_start", "texture": "./Assets/Textures/RainDrop.png" },
"maxParticles": 5600,
"spawnRate": "$spawn_rate",
"parameters": {
Expand Down Expand Up @@ -67,7 +67,7 @@
{
"name": "GroundMist",
"renderMode": "Sprite",
"spriteTexture": "./Assets/Textures/RainDrop.png",
"material": { "color": "$mist_start", "texture": "./Assets/Textures/RainDrop.png" },
"maxParticles": 640,
"spawnRate": "$spawn_rate",
"parameters": {
Expand Down
3 changes: 3 additions & 0 deletions Assets/VFX/RibbonGarden.json
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
{
"name": "PathRibbon",
"renderMode": "Ribbon",
"material": { "color": "$canopy_color_start", "emissive": [0.10, 0.25, 0.50, 0.0] },
"maxParticles": 256,
"spawnRate": "$spawn_rate",
"parameters": {
Expand Down Expand Up @@ -66,6 +67,7 @@
{
"name": "PurpleFountain",
"renderMode": "Sprite",
"material": { "color": "$spark_color_start", "emissive": [0.40, 0.05, 0.60, 0.0] },
"maxParticles": 1600,
"spawnRate": "$spawn_rate",
"parameters": {
Expand Down Expand Up @@ -96,6 +98,7 @@
{
"name": "CrystalShards",
"renderMode": "Mesh",
"material": { "color": [0.86, 0.94, 1.0, 0.62] },
"maxParticles": 220,
"spawnRate": "$spawn_rate",
"parameters": {
Expand Down
5 changes: 4 additions & 1 deletion Assets/VFX/RibbonVortex.json
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
{
"name": "PathRibbon",
"renderMode": "Ribbon",
"material": { "color": "$canopy_color_start", "emissive": [0.10, 0.25, 0.50, 0.0] },
"maxParticles": 256,
"spawnRate": "$spawn_rate",
"parameters": {
Expand Down Expand Up @@ -108,6 +109,7 @@
{
"name": "PurpleFountain",
"renderMode": "Sprite",
"material": { "color": "$spark_color_start", "emissive": [0.40, 0.05, 0.60, 0.0] },
"maxParticles": 1600,
"spawnRate": "$spawn_rate",
"parameters": {
Expand Down Expand Up @@ -189,6 +191,7 @@
{
"name": "CrystalShards",
"renderMode": "Mesh",
"material": { "color": [0.86, 0.94, 1.0, 0.62] },
"maxParticles": 220,
"spawnRate": "$spawn_rate",
"parameters": {
Expand Down Expand Up @@ -274,4 +277,4 @@
]
}
]
}
}
Loading
Loading