diff options
author | Rémi Verschelde <remi@verschelde.fr> | 2021-02-11 15:28:14 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-02-11 15:28:14 +0100 |
commit | 68624f32b0b88a6fbcc413bfccbdad4460431e8b (patch) | |
tree | 409d7202f63dc343f2532eaca6ac6a293ac22e64 /servers/rendering/shader_language.h | |
parent | 5f05e5d90458d8fd7408e385a6da86e4f4e11c6c (diff) | |
parent | dd0874e7175974921ddf7ad08aa4e76db999ad80 (diff) | |
download | redot-engine-68624f32b0b88a6fbcc413bfccbdad4460431e8b.tar.gz |
Merge pull request #44698 from Chaosus/shader_varying_fragment_to_light
Allow to pass varying from fragment to light shader function
Diffstat (limited to 'servers/rendering/shader_language.h')
-rw-r--r-- | servers/rendering/shader_language.h | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/servers/rendering/shader_language.h b/servers/rendering/shader_language.h index 27767378f9..14594b039c 100644 --- a/servers/rendering/shader_language.h +++ b/servers/rendering/shader_language.h @@ -41,6 +41,11 @@ class ShaderLanguage { public: + struct TkPos { + int char_idx; + int tk_line; + }; + enum TokenType { TK_EMPTY, TK_IDENTIFIER, @@ -598,10 +603,21 @@ public: }; struct Varying { + enum Stage { + STAGE_UNKNOWN, + STAGE_VERTEX, // transition stage to STAGE_VERTEX_TO_FRAGMENT or STAGE_VERTEX_TO_LIGHT, emits error if they are not used + STAGE_FRAGMENT, // transition stage to STAGE_FRAGMENT_TO_LIGHT, emits error if it's not used + STAGE_VERTEX_TO_FRAGMENT, + STAGE_VERTEX_TO_LIGHT, + STAGE_FRAGMENT_TO_LIGHT, + }; + + Stage stage = STAGE_UNKNOWN; DataType type = TYPE_VOID; DataInterpolation interpolation = INTERPOLATION_FLAT; DataPrecision precision = PRECISION_DEFAULT; int array_size = 0; + TkPos tkpos; Varying() {} }; @@ -780,11 +796,6 @@ private: StringName current_function; bool last_const = false; - struct TkPos { - int char_idx; - int tk_line; - }; - TkPos _get_tkpos() { TkPos tkp; tkp.char_idx = char_idx; @@ -864,6 +875,8 @@ private: bool _parse_function_arguments(BlockNode *p_block, const FunctionInfo &p_function_info, OperatorNode *p_func, int *r_complete_arg = nullptr); bool _propagate_function_call_sampler_uniform_settings(StringName p_name, int p_argument, TextureFilter p_filter, TextureRepeat p_repeat); bool _propagate_function_call_sampler_builtin_reference(StringName p_name, int p_argument, const StringName &p_builtin); + bool _validate_varying_assign(ShaderNode::Varying &p_varying, String *r_message); + bool _validate_varying_using(ShaderNode::Varying &p_varying, String *r_message); Node *_parse_expression(BlockNode *p_block, const FunctionInfo &p_function_info); Node *_parse_array_constructor(BlockNode *p_block, const FunctionInfo &p_function_info, DataType p_type, const StringName &p_struct_name, int p_array_size); |