#ifndef SHADER_COMPILER_RD_H #define SHADER_COMPILER_RD_H #include "core/pair.h" #include "servers/visual/shader_language.h" #include "servers/visual/shader_types.h" #include "servers/visual_server.h" class ShaderCompilerRD { public: struct IdentifierActions { Map > render_mode_values; Map render_mode_flags; Map usage_flag_pointers; Map write_flag_pointers; Map *uniforms; }; struct GeneratedCode { Vector defines; struct Texture { StringName name; ShaderLanguage::DataType type; ShaderLanguage::ShaderNode::Uniform::Hint hint; ShaderLanguage::TextureFilter filter; ShaderLanguage::TextureRepeat repeat; }; Vector texture_uniforms; Vector uniform_offsets; uint32_t uniform_total_size; String uniforms; String vertex_global; String vertex; String fragment_global; String fragment; String light; bool uses_fragment_time; bool uses_vertex_time; }; struct DefaultIdentifierActions { Map renames; Map render_mode_defines; Map usage_defines; Map custom_samplers; ShaderLanguage::TextureFilter default_filter; ShaderLanguage::TextureRepeat default_repeat; String sampler_array_name; int base_texture_binding_index = 0; int texture_layout_set = 0; String base_uniform_string; uint32_t base_varying_index = 0; }; private: ShaderLanguage parser; String _get_sampler_name(ShaderLanguage::TextureFilter p_filter, ShaderLanguage::TextureRepeat p_repeat); void _dump_function_deps(const ShaderLanguage::ShaderNode *p_node, const StringName &p_for_func, const Map &p_func_code, String &r_to_add, Set &added); String _dump_node_code(const ShaderLanguage::Node *p_node, int p_level, GeneratedCode &r_gen_code, IdentifierActions &p_actions, const DefaultIdentifierActions &p_default_actions, bool p_assigning); const ShaderLanguage::ShaderNode *shader; const ShaderLanguage::FunctionNode *function; StringName current_func_name; StringName vertex_name; StringName fragment_name; StringName light_name; StringName time_name; Set texture_functions; Set used_name_defines; Set used_flag_pointers; Set used_rmode_defines; Set internal_functions; DefaultIdentifierActions actions; public: Error compile(VS::ShaderMode p_mode, const String &p_code, IdentifierActions *p_actions, const String &p_path, GeneratedCode &r_gen_code); void initialize(DefaultIdentifierActions p_actions); ShaderCompilerRD(); }; #endif // SHADERCOMPILERRD_H