Add AT_LIGHT_PASS builtin to canvas shaders
This one allows for complex shaders paired with a simple lighting shader to skip code that would otherwise be pointlessly (and wastefully) run during the light pass. Depending on your game (number of items and lights), this can yield some performance gain.
This commit is contained in:
parent
4d90750729
commit
93ffd9023f
@ -668,6 +668,7 @@ ShaderCompilerGLES3::ShaderCompilerGLES3() {
|
|||||||
actions[VS::SHADER_CANVAS_ITEM].renames["PROJECTION_MATRIX"] = "projection_matrix";
|
actions[VS::SHADER_CANVAS_ITEM].renames["PROJECTION_MATRIX"] = "projection_matrix";
|
||||||
actions[VS::SHADER_CANVAS_ITEM].renames["EXTRA_MATRIX"] == "extra_matrix";
|
actions[VS::SHADER_CANVAS_ITEM].renames["EXTRA_MATRIX"] == "extra_matrix";
|
||||||
actions[VS::SHADER_CANVAS_ITEM].renames["TIME"] = "time";
|
actions[VS::SHADER_CANVAS_ITEM].renames["TIME"] = "time";
|
||||||
|
actions[VS::SHADER_CANVAS_ITEM].renames["AT_LIGHT_PASS"] = "at_light_pass";
|
||||||
|
|
||||||
actions[VS::SHADER_CANVAS_ITEM].renames["COLOR"] = "color";
|
actions[VS::SHADER_CANVAS_ITEM].renames["COLOR"] = "color";
|
||||||
actions[VS::SHADER_CANVAS_ITEM].renames["NORMAL"] = "normal";
|
actions[VS::SHADER_CANVAS_ITEM].renames["NORMAL"] = "normal";
|
||||||
|
@ -59,6 +59,9 @@ out vec4 local_rot;
|
|||||||
out highp vec2 pos;
|
out highp vec2 pos;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
const bool at_light_pass = true;
|
||||||
|
#else
|
||||||
|
const bool at_light_pass = false;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
@ -191,6 +194,9 @@ in highp vec2 pos;
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
const bool at_light_pass = true;
|
||||||
|
#else
|
||||||
|
const bool at_light_pass = false;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
uniform mediump vec4 final_modulate;
|
uniform mediump vec4 final_modulate;
|
||||||
|
@ -153,6 +153,7 @@ ShaderTypes::ShaderTypes() {
|
|||||||
shader_modes[VS::SHADER_CANVAS_ITEM].functions["vertex"]["EXTRA_MATRIX"] = ShaderLanguage::TYPE_MAT4;
|
shader_modes[VS::SHADER_CANVAS_ITEM].functions["vertex"]["EXTRA_MATRIX"] = ShaderLanguage::TYPE_MAT4;
|
||||||
shader_modes[VS::SHADER_CANVAS_ITEM].functions["vertex"]["TIME"] = ShaderLanguage::TYPE_FLOAT;
|
shader_modes[VS::SHADER_CANVAS_ITEM].functions["vertex"]["TIME"] = ShaderLanguage::TYPE_FLOAT;
|
||||||
shader_modes[VS::SHADER_CANVAS_ITEM].functions["vertex"]["PARTICLE_CUSTOM"] = ShaderLanguage::TYPE_VEC4;
|
shader_modes[VS::SHADER_CANVAS_ITEM].functions["vertex"]["PARTICLE_CUSTOM"] = ShaderLanguage::TYPE_VEC4;
|
||||||
|
shader_modes[VS::SHADER_CANVAS_ITEM].functions["vertex"]["AT_LIGHT_PASS"] = ShaderLanguage::TYPE_BOOL;
|
||||||
|
|
||||||
shader_modes[VS::SHADER_CANVAS_ITEM].functions["fragment"]["SRC_COLOR"] = ShaderLanguage::TYPE_VEC4;
|
shader_modes[VS::SHADER_CANVAS_ITEM].functions["fragment"]["SRC_COLOR"] = ShaderLanguage::TYPE_VEC4;
|
||||||
shader_modes[VS::SHADER_CANVAS_ITEM].functions["fragment"]["POSITION"] = ShaderLanguage::TYPE_VEC2;
|
shader_modes[VS::SHADER_CANVAS_ITEM].functions["fragment"]["POSITION"] = ShaderLanguage::TYPE_VEC2;
|
||||||
@ -166,6 +167,7 @@ ShaderTypes::ShaderTypes() {
|
|||||||
shader_modes[VS::SHADER_CANVAS_ITEM].functions["fragment"]["SCREEN_UV"] = ShaderLanguage::TYPE_VEC2;
|
shader_modes[VS::SHADER_CANVAS_ITEM].functions["fragment"]["SCREEN_UV"] = ShaderLanguage::TYPE_VEC2;
|
||||||
shader_modes[VS::SHADER_CANVAS_ITEM].functions["fragment"]["POINT_COORD"] = ShaderLanguage::TYPE_VEC2;
|
shader_modes[VS::SHADER_CANVAS_ITEM].functions["fragment"]["POINT_COORD"] = ShaderLanguage::TYPE_VEC2;
|
||||||
shader_modes[VS::SHADER_CANVAS_ITEM].functions["fragment"]["TIME"] = ShaderLanguage::TYPE_FLOAT;
|
shader_modes[VS::SHADER_CANVAS_ITEM].functions["fragment"]["TIME"] = ShaderLanguage::TYPE_FLOAT;
|
||||||
|
shader_modes[VS::SHADER_CANVAS_ITEM].functions["fragment"]["AT_LIGHT_PASS"] = ShaderLanguage::TYPE_BOOL;
|
||||||
|
|
||||||
shader_modes[VS::SHADER_CANVAS_ITEM].functions["light"]["POSITION"] = ShaderLanguage::TYPE_VEC2;
|
shader_modes[VS::SHADER_CANVAS_ITEM].functions["light"]["POSITION"] = ShaderLanguage::TYPE_VEC2;
|
||||||
shader_modes[VS::SHADER_CANVAS_ITEM].functions["light"]["NORMAL"] = ShaderLanguage::TYPE_VEC3;
|
shader_modes[VS::SHADER_CANVAS_ITEM].functions["light"]["NORMAL"] = ShaderLanguage::TYPE_VEC3;
|
||||||
|
Loading…
Reference in New Issue
Block a user