Splits shader effects to reuse in material passes

This commit is contained in:
Vladislav Belov
2026-05-10 23:57:23 +02:00
parent 18a16aa135
commit 59e36be140
27 changed files with 236 additions and 197 deletions
@@ -1,23 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<effect>
<technique>
<require context="PASS_REFLECTIONS"/>
<require shaders="glsl"/>
<require shaders="spirv"/>
<pass shader="terrain_base">
<cull mode="FRONT"/>
</pass>
</technique>
<technique>
<require shaders="glsl"/>
<require shaders="spirv"/>
<require context="MODE_WIREFRAME"/>
<pass shader="terrain_base">
<polygon mode="LINE"/>
</pass>
</technique>
<technique>
<require shaders="glsl"/>
<require shaders="spirv"/>
@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<effect>
<technique>
<require shaders="glsl"/>
<require shaders="spirv"/>
<pass shader="terrain_base">
<cull mode="FRONT"/>
</pass>
</technique>
</effect>
@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<effect>
<technique>
<require shaders="glsl"/>
<require shaders="spirv"/>
<pass shader="terrain_base">
<polygon mode="LINE"/>
</pass>
</technique>
</effect>
@@ -1,27 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<effect>
<technique>
<require context="PASS_REFLECTIONS"/>
<require shaders="glsl"/>
<require shaders="spirv"/>
<pass shader="terrain_blend">
<depth mask="false"/>
<cull mode="FRONT"/>
<blend src="src_alpha" dst="one_minus_src_alpha"/>
</pass>
</technique>
<technique>
<require shaders="glsl"/>
<require shaders="spirv"/>
<require context="MODE_WIREFRAME"/>
<pass shader="terrain_blend">
<depth mask="false"/>
<polygon mode="LINE"/>
<blend src="src_alpha" dst="one_minus_src_alpha"/>
</pass>
</technique>
<technique>
<require shaders="glsl"/>
<require shaders="spirv"/>
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<effect>
<technique>
<require shaders="glsl"/>
<require shaders="spirv"/>
<pass shader="terrain_blend">
<depth mask="false"/>
<cull mode="FRONT"/>
<blend src="src_alpha" dst="one_minus_src_alpha"/>
</pass>
</technique>
</effect>
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<effect>
<technique>
<require shaders="glsl"/>
<require shaders="spirv"/>
<pass shader="terrain_blend">
<depth mask="false"/>
<polygon mode="LINE"/>
<blend src="src_alpha" dst="one_minus_src_alpha"/>
</pass>
</technique>
</effect>
@@ -1,27 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<effect>
<technique>
<require context="PASS_REFLECTIONS"/>
<require shaders="glsl"/>
<require shaders="spirv"/>
<pass shader="terrain_decal">
<depth mask="false"/>
<cull mode="FRONT"/>
<blend src="src_alpha" dst="one_minus_src_alpha"/>
</pass>
</technique>
<technique>
<require shaders="glsl"/>
<require shaders="spirv"/>
<require context="MODE_WIREFRAME"/>
<pass shader="terrain_decal">
<depth mask="false"/>
<polygon mode="LINE"/>
<blend src="src_alpha" dst="one_minus_src_alpha"/>
</pass>
</technique>
<technique>
<require shaders="glsl"/>
<require shaders="spirv"/>
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<effect>
<technique>>
<require shaders="glsl"/>
<require shaders="spirv"/>
<pass shader="terrain_decal">
<depth mask="false"/>
<cull mode="FRONT"/>
<blend src="src_alpha" dst="one_minus_src_alpha"/>
</pass>
</technique>
</effect>
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<effect>
<technique>
<require shaders="glsl"/>
<require shaders="spirv"/>
<pass shader="terrain_decal">
<depth mask="false"/>
<polygon mode="LINE"/>
<blend src="src_alpha" dst="one_minus_src_alpha"/>
</pass>
</technique>
</effect>
@@ -1,18 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<effect>
<technique>
<require shaders="glsl"/>
<require shaders="spirv"/>
<require context="MODE_WIREFRAME"/>
<pass shader="dummy">
<polygon mode="LINE"/>
</pass>
</technique>
<technique>
<require shaders="glsl"/>
<require shaders="spirv"/>
<pass shader="dummy"/>
</technique>
</effect>
@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<effect>
<technique>
<require shaders="glsl"/>
<require shaders="spirv"/>
<pass shader="dummy">
<polygon mode="LINE"/>
</pass>
</technique>
</effect>
@@ -1,52 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<effect>
<technique>
<require context="PASS_REFLECTIONS"/>
<require shaders="glsl"/>
<require shaders="spirv"/>
<pass shader="model_common">
<cull mode="FRONT"/>
</pass>
</technique>
<technique>
<require context="MODE_SHADOWCAST || MODE_SILHOUETTEOCCLUDER"/>
<require shaders="glsl"/>
<require shaders="spirv"/>
<pass shader="model_solid">
<color mask_red="FALSE" mask_green="FALSE" mask_blue="FALSE" mask_alpha="FALSE"/>
</pass>
</technique>
<technique>
<require context="MODE_WIREFRAME"/>
<require shaders="glsl"/>
<require shaders="spirv"/>
<pass shader="model_common">
<polygon mode="LINE"/>
</pass>
</technique>
<technique>
<require context="MODE_WIREFRAME_SOLID"/>
<require shaders="glsl"/>
<require shaders="spirv"/>
<pass shader="model_solid_player">
<polygon mode="LINE"/>
</pass>
</technique>
<technique>
<require context="MODE_SILHOUETTEDISPLAY"/>
<require shaders="glsl"/>
<require shaders="spirv"/>
<pass shader="model_solid_player">
<depth func="gequal"/>
<stencil test="TRUE" compare="notequal" reference="1" mask_read="4294967295" pass="REPLACE"/>
<blend src="constant_alpha" dst="one_minus_constant_alpha" constant="0 0 0 191"/>
</pass>
</technique>
<technique>
<require shaders="glsl"/>
<require shaders="spirv"/>
@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<effect>
<technique>
<require shaders="glsl"/>
<require shaders="spirv"/>
<pass shader="model_common">
<cull mode="FRONT"/>
</pass>
</technique>
</effect>
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<effect>
<technique>
<require shaders="glsl"/>
<require shaders="spirv"/>
<pass shader="model_solid_player">
<depth func="gequal"/>
<stencil test="TRUE" compare="notequal" reference="1" mask_read="4294967295" pass="REPLACE"/>
<blend src="constant_alpha" dst="one_minus_constant_alpha" constant="0 0 0 191"/>
</pass>
</technique>
</effect>
@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<effect>
<technique>
<require shaders="glsl"/>
<require shaders="spirv"/>
<pass shader="model_solid">
<color mask_red="FALSE" mask_green="FALSE" mask_blue="FALSE" mask_alpha="FALSE"/>
</pass>
</technique>
</effect>
@@ -1,81 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<effect>
<technique>
<require context="MODE_SHADOWCAST || MODE_SILHOUETTEOCCLUDER"/>
<require shaders="glsl"/>
<require shaders="spirv"/>
<pass shader="model_solid_tex">
<define name="REQUIRE_ALPHA_GEQUAL" value="0.4"/>
<!-- Disable face-culling for two-sided models -->
<cull mode="NONE"/>
<color mask_red="FALSE" mask_green="FALSE" mask_blue="FALSE" mask_alpha="FALSE"/>
</pass>
</technique>
<!--
CRenderer::RenderSilhouettes skips alpha-blended models for
MODE_SILHOUETTEDISPLAY, so do a dummy non-blended behaviour here to
make it obviously buggy if CRenderer is changed to render these models.
-->
<technique>
<require context="MODE_SILHOUETTEDISPLAY"/>
<require shaders="glsl"/>
<require shaders="spirv"/>
<pass shader="model_solid_player">
<depth func="gequal"/>
<stencil test="TRUE" compare="notequal" reference="1" mask_read="4294967295" pass="REPLACE"/>
</pass>
</technique>
<technique>
<require context="MODE_WIREFRAME_SOLID"/>
<require shaders="glsl"/>
<require shaders="spirv"/>
<pass shader="model_solid_player">
<polygon mode="LINE"/>
</pass>
</technique>
<technique>
<require context="MODE_WIREFRAME"/>
<require shaders="glsl"/>
<require shaders="spirv"/>
<pass shader="model_common">
<define name="USE_TRANSPARENT" value="1"/>
<blend src="src_alpha" dst="one_minus_src_alpha"/>
<depth func="less" mask="false"/>
<cull mode="NONE"/>
<polygon mode="LINE"/>
</pass>
</technique>
<technique>
<require context="PASS_REFLECTIONS"/>
<require context="ALPHABLEND_PASS_OPAQUE"/>
<require shaders="glsl"/>
<require shaders="spirv"/>
<pass shader="model_common">
<define name="USE_TRANSPARENT" value="1"/>
<define name="REQUIRE_ALPHA_GEQUAL" value="0.6375"/>
<cull mode="NONE"/>
</pass>
</technique>
<technique>
<require context="PASS_REFLECTIONS"/>
<require context="ALPHABLEND_PASS_BLEND"/>
<require shaders="glsl"/>
<require shaders="spirv"/>
<pass shader="model_common">
<define name="USE_TRANSPARENT" value="1"/>
<define name="REQUIRE_ALPHA_GEQUAL" value="0.05"/>
<blend src="src_alpha" dst="one_minus_src_alpha"/>
<depth func="less" mask="false"/>
<cull mode="NONE"/>
</pass>
</technique>
<technique>
<require context="ALPHABLEND_PASS_OPAQUE"/>
<require shaders="glsl"/>
@@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<effect>
<technique>
<require context="ALPHABLEND_PASS_OPAQUE"/>
<require shaders="glsl"/>
<require shaders="spirv"/>
<pass shader="model_common">
<define name="USE_TRANSPARENT" value="1"/>
<define name="REQUIRE_ALPHA_GEQUAL" value="0.6375"/>
<cull mode="NONE"/>
</pass>
</technique>
<technique>
<require context="ALPHABLEND_PASS_BLEND"/>
<require shaders="glsl"/>
<require shaders="spirv"/>
<pass shader="model_common">
<define name="USE_TRANSPARENT" value="1"/>
<define name="REQUIRE_ALPHA_GEQUAL" value="0.05"/>
<blend src="src_alpha" dst="one_minus_src_alpha"/>
<depth func="less" mask="false"/>
<cull mode="NONE"/>
</pass>
</technique>
</effect>
@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<effect>
<!--
CRenderer::RenderSilhouettes skips alpha-blended models for
MODE_SILHOUETTEDISPLAY, so do a dummy non-blended behaviour here to
make it obviously buggy if CRenderer is changed to render these models.
-->
<technique>
<require shaders="glsl"/>
<require shaders="spirv"/>
<pass shader="model_solid_player">
<depth func="gequal"/>
<stencil test="TRUE" compare="notequal" reference="1" mask_read="4294967295" pass="REPLACE"/>
</pass>
</technique>
</effect>
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<effect>
<technique>
<require shaders="glsl"/>
<require shaders="spirv"/>
<pass shader="model_solid_tex">
<define name="REQUIRE_ALPHA_GEQUAL" value="0.4"/>
<!-- Disable face-culling for two-sided models -->
<cull mode="NONE"/>
<color mask_red="FALSE" mask_green="FALSE" mask_blue="FALSE" mask_alpha="FALSE"/>
</pass>
</technique>
</effect>
@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<effect>
<technique>
<require shaders="glsl"/>
<require shaders="spirv"/>
<pass shader="model_common">
<define name="USE_TRANSPARENT" value="1"/>
<blend src="src_alpha" dst="one_minus_src_alpha"/>
<depth func="less" mask="false"/>
<cull mode="NONE"/>
<polygon mode="LINE"/>
</pass>
</technique>
</effect>
@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<effect>
<technique>
<require shaders="glsl"/>
<require shaders="spirv"/>
<pass shader="model_solid_player">
<polygon mode="LINE"/>
</pass>
</technique>
</effect>
@@ -8,7 +8,6 @@
<define name="USE_TRANSPARENT" value="1"/>
<define name="USE_SPECULAR" value="1"/>
<define name="USE_NORMAL_MAP" value="1"/>
<define name="USE_INSTANCING" value="1"/>
<define name="REQUIRE_ALPHA_GEQUAL" value="0.05"/>
<blend src="src_alpha" dst="one_minus_src_alpha"/>
<depth func="less" mask="true"/>
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<effect>
<technique>
<require shaders="glsl"/>
<require shaders="spirv"/>
<pass shader="model_water">
<define name="USE_TRANSPARENT" value="1"/>
<define name="USE_SPECULAR" value="1"/>
<define name="USE_NORMAL_MAP" value="1"/>
<define name="REQUIRE_ALPHA_GEQUAL" value="0.05"/>
<blend src="src_alpha" dst="one_minus_src_alpha"/>
<depth func="less" mask="true"/>
</pass>
</technique>
</effect>
@@ -6,7 +6,6 @@
<sort_by_distance/>
<pass shader="model_waterfall">
<define name="USE_TRANSPARENT" value="1"/>
<define name="USE_INSTANCING" value="1"/>
<blend src="src_alpha" dst="one_minus_src_alpha"/>
<depth func="lequal" mask="true"/>
</pass>
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<effect>
<technique>
<require shaders="glsl"/>
<require shaders="spirv"/>
<pass shader="model_waterfall">
<define name="USE_TRANSPARENT" value="1"/>
<blend src="src_alpha" dst="one_minus_src_alpha"/>
<depth func="lequal" mask="true"/>
</pass>
</technique>
</effect>
@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<effect>
<technique>
<require shaders="glsl"/>
<require shaders="spirv"/>
<pass shader="model_common">
<polygon mode="LINE"/>
</pass>
</technique>
</effect>
@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<effect>
<technique>
<require shaders="glsl"/>
<require shaders="spirv"/>
<pass shader="model_solid_player">
<polygon mode="LINE"/>
</pass>
</technique>
</effect>