diff options
author | George L. Albany <Megacake1234@gmail.com> | 2024-11-11 16:19:19 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-11-11 16:19:19 +0000 |
commit | 5094c2a5f7d506b0e685120f14d1df42e1e9d495 (patch) | |
tree | a10abf56ba93705731da1aaf338f2cf21403c6ad /servers/rendering/shader_preprocessor.cpp | |
parent | e7894c2c4efdd51049a21af4892005381fe57cd6 (diff) | |
parent | 62fbec9f6f0722a1f9825c17f073742932082228 (diff) | |
download | redot-engine-5094c2a5f7d506b0e685120f14d1df42e1e9d495.tar.gz |
Merge pull request #853 from Spartan322/merge/0f5f3bc
Merge commit godotengine/godot@0f5f3bc
Diffstat (limited to 'servers/rendering/shader_preprocessor.cpp')
-rw-r--r-- | servers/rendering/shader_preprocessor.cpp | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/servers/rendering/shader_preprocessor.cpp b/servers/rendering/shader_preprocessor.cpp index 338a43c2eb..4232dad8ed 100644 --- a/servers/rendering/shader_preprocessor.cpp +++ b/servers/rendering/shader_preprocessor.cpp @@ -818,6 +818,11 @@ void ShaderPreprocessor::process_undef(Tokenizer *p_tokenizer) { } if (state->defines.has(label)) { + if (state->defines[label]->is_builtin) { + set_error(vformat(RTR("Cannot use '%s' on built-in define."), "undef"), line); + return; + } + memdelete(state->defines[label]); state->defines.erase(label); } @@ -1326,6 +1331,35 @@ Error ShaderPreprocessor::preprocess(const String &p_code, const String &p_filen pp_state.current_filename = p_filename; pp_state.save_regions = r_regions != nullptr; } + + // Built-in defines. + { + static HashMap<StringName, String> defines; + + if (defines.is_empty()) { + const String rendering_method = OS::get_singleton()->get_current_rendering_method(); + + if (rendering_method == "forward_plus") { + defines["CURRENT_RENDERER"] = _MKSTR(2); + } else if (rendering_method == "mobile") { + defines["CURRENT_RENDERER"] = _MKSTR(1); + } else { // gl_compatibility + defines["CURRENT_RENDERER"] = _MKSTR(0); + } + + defines["RENDERER_COMPATIBILITY"] = _MKSTR(0); + defines["RENDERER_MOBILE"] = _MKSTR(1); + defines["RENDERER_FORWARD_PLUS"] = _MKSTR(2); + } + + for (const KeyValue<StringName, String> &E : defines) { + Define *define = memnew(Define); + define->is_builtin = true; + define->body = E.value; + pp_state.defines[E.key] = define; + } + } + Error err = preprocess(&pp_state, p_code, r_result); if (err != OK) { if (r_error_text) { |