| 437 | } |
| 438 | |
| 439 | void ShaderTextEditor::_code_complete_script(const String &p_code, List<ScriptLanguage::CodeCompletionOption> *r_options) { |
| 440 | List<ScriptLanguage::CodeCompletionOption> pp_options; |
| 441 | List<ScriptLanguage::CodeCompletionOption> pp_defines; |
| 442 | ShaderPreprocessor preprocessor; |
| 443 | String code; |
| 444 | String resource_path = (shader.is_valid() ? shader->get_path() : shader_inc->get_path()); |
| 445 | complete_from_path = resource_path.get_base_dir(); |
| 446 | if (!complete_from_path.ends_with("/")) { |
| 447 | complete_from_path += "/"; |
| 448 | } |
| 449 | preprocessor.preprocess(p_code, resource_path, code, nullptr, nullptr, nullptr, nullptr, &pp_options, &pp_defines, _complete_include_paths); |
| 450 | complete_from_path = String(); |
| 451 | if (pp_options.size()) { |
| 452 | for (const ScriptLanguage::CodeCompletionOption &E : pp_options) { |
| 453 | r_options->push_back(E); |
| 454 | } |
| 455 | return; |
| 456 | } |
| 457 | for (const ScriptLanguage::CodeCompletionOption &E : pp_defines) { |
| 458 | r_options->push_back(E); |
| 459 | } |
| 460 | |
| 461 | ShaderLanguage sl; |
| 462 | String calltip; |
| 463 | ShaderLanguage::ShaderCompileInfo comp_info; |
| 464 | comp_info.global_shader_uniform_type_func = _get_global_shader_uniform_type; |
| 465 | |
| 466 | if (shader.is_null()) { |
| 467 | comp_info.is_include = true; |
| 468 | |
| 469 | sl.complete(code, comp_info, r_options, calltip); |
| 470 | get_text_editor()->set_code_hint(calltip); |
| 471 | return; |
| 472 | } |
| 473 | _check_shader_mode(); |
| 474 | comp_info.functions = ShaderTypes::get_singleton()->get_functions(RenderingServer::ShaderMode(shader->get_mode())); |
| 475 | comp_info.render_modes = ShaderTypes::get_singleton()->get_modes(RenderingServer::ShaderMode(shader->get_mode())); |
| 476 | comp_info.stencil_modes = ShaderTypes::get_singleton()->get_stencil_modes(RenderingServer::ShaderMode(shader->get_mode())); |
| 477 | comp_info.shader_types = ShaderTypes::get_singleton()->get_types(); |
| 478 | |
| 479 | sl.complete(code, comp_info, r_options, calltip); |
| 480 | get_text_editor()->set_code_hint(calltip); |
| 481 | } |
| 482 | |
| 483 | void ShaderTextEditor::_validate_script() { |
| 484 | emit_signal(CoreStringName(script_changed)); // Ensure to notify that it changed, so it is applied |
nothing calls this directly
no test coverage detected