#ifndef SHADERCOMPILERGLES3_H #define SHADERCOMPILERGLES3_H #include "servers/visual/shader_language.h" #include "servers/visual/shader_types.h" #include "servers/visual_server.h" #include "pair.h" class ShaderCompilerGLES3 { public: struct IdentifierActions { Map > render_mode_values; Map render_mode_flags; Map usage_flag_pointers; Map *uniforms; }; struct GeneratedCode { Vector defines; Vector texture_uniforms; Vector texture_hints; 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; }; private: ShaderLanguage parser; struct DefaultIdentifierActions { Map renames; Map render_mode_defines; Map usage_defines; }; void _dump_function_deps(ShaderLanguage::ShaderNode *p_node, const StringName& p_for_func, const Map &p_func_code, String& r_to_add,Set &added); String _dump_node_code(ShaderLanguage::Node *p_node, int p_level, GeneratedCode &r_gen_code, IdentifierActions& p_actions, const DefaultIdentifierActions& p_default_actions); StringName current_func_name; StringName vertex_name; StringName fragment_name; StringName time_name; Set used_name_defines; Set used_rmode_defines; Set internal_functions; DefaultIdentifierActions actions[VS::SHADER_MAX]; public: Error compile(VS::ShaderMode p_mode, const String& p_code, IdentifierActions* p_actions, const String& p_path, GeneratedCode& r_gen_code); ShaderCompilerGLES3(); }; #endif // SHADERCOMPILERGLES3_H