diff options
author | Rémi Verschelde <rverschelde@gmail.com> | 2024-02-08 10:53:24 +0100 |
---|---|---|
committer | Rémi Verschelde <rverschelde@gmail.com> | 2024-02-08 10:53:24 +0100 |
commit | 4a30fe5e7c38955f289b9d0e1a945ed206484f27 (patch) | |
tree | 9dca5785caf32537af91ee25b619ad5c5b768d1d /drivers/gles3/storage/material_storage.cpp | |
parent | 35cfbdd840c2025307b83af9ad3475e9cc1750dc (diff) | |
parent | bb83c4adec61d51d72c429c0f4172dc4c6479343 (diff) | |
download | redot-engine-4a30fe5e7c38955f289b9d0e1a945ed206484f27.tar.gz |
Merge pull request #86564 from Giwayume/feature/canvas-item-shader-custom-data
Support CUSTOM shader attributes in 2D
Diffstat (limited to 'drivers/gles3/storage/material_storage.cpp')
-rw-r--r-- | drivers/gles3/storage/material_storage.cpp | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/drivers/gles3/storage/material_storage.cpp b/drivers/gles3/storage/material_storage.cpp index 852327cf30..80a6795ffe 100644 --- a/drivers/gles3/storage/material_storage.cpp +++ b/drivers/gles3/storage/material_storage.cpp @@ -1160,6 +1160,9 @@ MaterialStorage::MaterialStorage() { actions.renames["INSTANCE_ID"] = "gl_InstanceID"; actions.renames["VERTEX_ID"] = "gl_VertexID"; + actions.renames["CUSTOM0"] = "custom0"; + actions.renames["CUSTOM1"] = "custom1"; + actions.renames["LIGHT_POSITION"] = "light_position"; actions.renames["LIGHT_DIRECTION"] = "light_direction"; actions.renames["LIGHT_IS_DIRECTIONAL"] = "is_directional"; @@ -1179,6 +1182,8 @@ MaterialStorage::MaterialStorage() { actions.usage_defines["NORMAL"] = "#define NORMAL_USED\n"; actions.usage_defines["NORMAL_MAP"] = "#define NORMAL_MAP_USED\n"; actions.usage_defines["SPECULAR_SHININESS"] = "#define SPECULAR_SHININESS_USED\n"; + actions.usage_defines["CUSTOM0"] = "#define CUSTOM0_USED\n"; + actions.usage_defines["CUSTOM1"] = "#define CUSTOM1_USED\n"; actions.render_mode_defines["skip_vertex_transform"] = "#define SKIP_TRANSFORM_USED\n"; actions.render_mode_defines["unshaded"] = "#define MODE_UNSHADED\n"; @@ -2537,6 +2542,8 @@ void CanvasShaderData::set_code(const String &p_code) { uses_screen_texture_mipmaps = false; uses_sdf = false; uses_time = false; + uses_custom0 = false; + uses_custom1 = false; if (code.is_empty()) { return; // Just invalid, but no error. @@ -2561,6 +2568,8 @@ void CanvasShaderData::set_code(const String &p_code) { actions.usage_flag_pointers["texture_sdf"] = &uses_sdf; actions.usage_flag_pointers["TIME"] = &uses_time; + actions.usage_flag_pointers["CUSTOM0"] = &uses_custom0; + actions.usage_flag_pointers["CUSTOM1"] = &uses_custom1; actions.uniforms = &uniforms; Error err = MaterialStorage::get_singleton()->shaders.compiler_canvas.compile(RS::SHADER_CANVAS_ITEM, code, &actions, path, gen_code); @@ -2597,6 +2606,10 @@ void CanvasShaderData::set_code(const String &p_code) { MaterialStorage::get_singleton()->shaders.canvas_shader.version_set_code(version, gen_code.code, gen_code.uniforms, gen_code.stage_globals[ShaderCompiler::STAGE_VERTEX], gen_code.stage_globals[ShaderCompiler::STAGE_FRAGMENT], gen_code.defines, texture_uniform_data); ERR_FAIL_COND(!MaterialStorage::get_singleton()->shaders.canvas_shader.version_is_valid(version)); + vertex_input_mask = RS::ARRAY_FORMAT_VERTEX | RS::ARRAY_COLOR | RS::ARRAY_TEX_UV; + vertex_input_mask |= uses_custom0 << RS::ARRAY_CUSTOM0; + vertex_input_mask |= uses_custom1 << RS::ARRAY_CUSTOM1; + ubo_size = gen_code.uniform_total_size; ubo_offsets = gen_code.uniform_offsets; texture_uniforms = gen_code.texture_uniforms; |