diff options
Diffstat (limited to 'servers/rendering/shader_preprocessor.cpp')
| -rw-r--r-- | servers/rendering/shader_preprocessor.cpp | 23 |
1 files changed, 10 insertions, 13 deletions
diff --git a/servers/rendering/shader_preprocessor.cpp b/servers/rendering/shader_preprocessor.cpp index ff1d55f905..7af326f779 100644 --- a/servers/rendering/shader_preprocessor.cpp +++ b/servers/rendering/shader_preprocessor.cpp @@ -54,9 +54,9 @@ int ShaderPreprocessor::Tokenizer::get_index() const { return index; } -void ShaderPreprocessor::Tokenizer::get_and_clear_generated(Vector<ShaderPreprocessor::Token> *r_out) { - for (int i = 0; i < generated.size(); i++) { - r_out->push_back(generated[i]); +void ShaderPreprocessor::Tokenizer::get_and_clear_generated(LocalVector<char32_t> *r_out) { + for (uint32_t i = 0; i < generated.size(); i++) { + r_out->push_back(generated[i].text); } generated.clear(); } @@ -680,7 +680,7 @@ void ShaderPreprocessor::process_include(Tokenizer *p_tokenizer) { } if (!ResourceLoader::exists(path)) { - set_error(RTR("Shader include file does not exist: ") + path, line); + set_error(RTR("Shader include file does not exist:") + " " + path, line); return; } @@ -700,7 +700,7 @@ void ShaderPreprocessor::process_include(Tokenizer *p_tokenizer) { if (!included.is_empty()) { uint64_t code_hash = included.hash64(); if (state->cyclic_include_hashes.find(code_hash)) { - set_error(RTR("Cyclic include found."), line); + set_error(RTR("Cyclic include found") + ": " + path, line); return; } } @@ -733,7 +733,7 @@ void ShaderPreprocessor::process_include(Tokenizer *p_tokenizer) { FilePosition fp; fp.file = state->current_filename; - fp.line = line; + fp.line = line + 1; state->include_positions.push_back(fp); String result; @@ -1157,6 +1157,7 @@ void ShaderPreprocessor::set_error(const String &p_error, int p_line) { if (state->error.is_empty()) { state->error = p_error; FilePosition fp; + fp.file = state->current_filename; fp.line = p_line + 1; state->include_positions.push_back(fp); } @@ -1206,18 +1207,14 @@ Error ShaderPreprocessor::preprocess(State *p_state, const String &p_code, Strin break; } + // Add autogenerated tokens if there are any. + p_tokenizer.get_and_clear_generated(&output); + if (state->disabled) { // Preprocessor was disabled. // Read the rest of the file into the output. output.push_back(t.text); continue; - } else { - // Add autogenerated tokens. - Vector<Token> generated; - p_tokenizer.get_and_clear_generated(&generated); - for (int i = 0; i < generated.size(); i++) { - output.push_back(generated[i].text); - } } if (t.text == '#') { |
