diff options
author | Rémi Verschelde <rverschelde@gmail.com> | 2020-11-26 15:48:14 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-11-26 15:48:14 +0100 |
commit | 0a54dcb54f7e7855c7eb0b63b3cccf5d9d0251ea (patch) | |
tree | 629b00592dcdc22de5e18afd412ad9cfa60ea7c2 /servers/rendering/shader_types.cpp | |
parent | 4e5625ce30364855075c4ac6b7f12575b2964122 (diff) | |
parent | 1bcf3c305bc3d7b0eb293247c08a1c3917eee9b2 (diff) | |
download | redot-engine-0a54dcb54f7e7855c7eb0b63b3cccf5d9d0251ea.tar.gz |
Merge pull request #43886 from reduz/sdf-2d
Implement Signed Distance Fields for 2D shaders
Diffstat (limited to 'servers/rendering/shader_types.cpp')
-rw-r--r-- | servers/rendering/shader_types.cpp | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/servers/rendering/shader_types.cpp b/servers/rendering/shader_types.cpp index 4d21807735..bd61f2a549 100644 --- a/servers/rendering/shader_types.cpp +++ b/servers/rendering/shader_types.cpp @@ -252,6 +252,27 @@ ShaderTypes::ShaderTypes() { shader_modes[RS::SHADER_CANVAS_ITEM].functions["fragment"].built_ins["SCREEN_TEXTURE"] = constt(ShaderLanguage::TYPE_SAMPLER2D); shader_modes[RS::SHADER_CANVAS_ITEM].functions["fragment"].can_discard = true; + { + ShaderLanguage::StageFunctionInfo func; + func.arguments.push_back(ShaderLanguage::StageFunctionInfo::Argument("sdf_pos", ShaderLanguage::TYPE_VEC2)); + func.return_type = ShaderLanguage::TYPE_FLOAT; //whether it could emit + shader_modes[RS::SHADER_CANVAS_ITEM].functions["fragment"].stage_functions["texture_sdf"] = func; + shader_modes[RS::SHADER_CANVAS_ITEM].functions["light"].stage_functions["texture_sdf"] = func; + func.return_type = ShaderLanguage::TYPE_VEC2; //whether it could emit + shader_modes[RS::SHADER_CANVAS_ITEM].functions["fragment"].stage_functions["sdf_to_screen_uv"] = func; + shader_modes[RS::SHADER_CANVAS_ITEM].functions["light"].stage_functions["sdf_to_screen_uv"] = func; + shader_modes[RS::SHADER_CANVAS_ITEM].functions["fragment"].stage_functions["texture_sdf_normal"] = func; + shader_modes[RS::SHADER_CANVAS_ITEM].functions["light"].stage_functions["texture_sdf_normal"] = func; + } + + { + ShaderLanguage::StageFunctionInfo func; + func.arguments.push_back(ShaderLanguage::StageFunctionInfo::Argument("uv", ShaderLanguage::TYPE_VEC2)); + func.return_type = ShaderLanguage::TYPE_VEC2; //whether it could emit + shader_modes[RS::SHADER_CANVAS_ITEM].functions["fragment"].stage_functions["screen_uv_to_sdf"] = func; + shader_modes[RS::SHADER_CANVAS_ITEM].functions["light"].stage_functions["screen_uv_to_sdf"] = func; + } + shader_modes[RS::SHADER_CANVAS_ITEM].functions["light"].built_ins["FRAGCOORD"] = constt(ShaderLanguage::TYPE_VEC4); shader_modes[RS::SHADER_CANVAS_ITEM].functions["light"].built_ins["NORMAL"] = constt(ShaderLanguage::TYPE_VEC3); shader_modes[RS::SHADER_CANVAS_ITEM].functions["light"].built_ins["COLOR"] = constt(ShaderLanguage::TYPE_VEC4); |