diff --git a/editor/debugger/editor_debugger_plugin.h b/editor/debugger/editor_debugger_plugin.h index 1cc4a54e71..bb07757df2 100644 --- a/editor/debugger/editor_debugger_plugin.h +++ b/editor/debugger/editor_debugger_plugin.h @@ -30,6 +30,8 @@ #pragma once +#include "core/object/ref_counted.h" +#include "core/object/script_language.h" #include "scene/gui/control.h" class ScriptEditorDebugger; diff --git a/editor/doc/editor_help_search.h b/editor/doc/editor_help_search.h index b330c5c6c2..f034e26aa9 100644 --- a/editor/doc/editor_help_search.h +++ b/editor/doc/editor_help_search.h @@ -30,6 +30,7 @@ #pragma once +#include "core/doc_data.h" #include "core/templates/rb_set.h" #include "editor/plugins/editor_plugin.h" #include "scene/gui/dialogs.h" diff --git a/servers/register_server_types.cpp b/servers/register_server_types.cpp index 723554826d..e53d52975f 100644 --- a/servers/register_server_types.cpp +++ b/servers/register_server_types.cpp @@ -70,6 +70,7 @@ #include "rendering/rendering_server.h" #include "rendering/shader_include_db.h" #include "rendering/storage/render_data.h" +#include "rendering/storage/render_data_extension.h" #include "rendering/storage/render_scene_buffers.h" #include "rendering/storage/render_scene_data.h" #include "servers/rendering/shader_types.h" diff --git a/servers/rendering/dummy/rasterizer_dummy.cpp b/servers/rendering/dummy/rasterizer_dummy.cpp new file mode 100644 index 0000000000..83f4908668 --- /dev/null +++ b/servers/rendering/dummy/rasterizer_dummy.cpp @@ -0,0 +1,109 @@ +/**************************************************************************/ +/* rasterizer_dummy.cpp */ +/**************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/**************************************************************************/ +/* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */ +/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. */ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/**************************************************************************/ + +#include "rasterizer_dummy.h" + +#include "servers/display/display_server.h" +#include "servers/rendering/dummy/environment/fog.h" +#include "servers/rendering/dummy/environment/gi.h" +#include "servers/rendering/dummy/rasterizer_canvas_dummy.h" +#include "servers/rendering/dummy/rasterizer_scene_dummy.h" +#include "servers/rendering/dummy/storage/light_storage.h" +#include "servers/rendering/dummy/storage/material_storage.h" +#include "servers/rendering/dummy/storage/mesh_storage.h" +#include "servers/rendering/dummy/storage/particles_storage.h" +#include "servers/rendering/dummy/storage/texture_storage.h" +#include "servers/rendering/dummy/storage/utilities.h" + +void RasterizerDummy::end_frame(bool p_present) { + if (p_present) { + DisplayServer::get_singleton()->swap_buffers(); + } +} + +RendererCanvasRender *RasterizerDummy::get_canvas() { + return canvas; +} +RendererSceneRender *RasterizerDummy::get_scene() { + return scene; +} + +RendererFog *RasterizerDummy::get_fog() { + return fog; +} +RendererGI *RasterizerDummy::get_gi() { + return gi; +} +RendererLightStorage *RasterizerDummy::get_light_storage() { + return light_storage; +} +RendererMaterialStorage *RasterizerDummy::get_material_storage() { + return material_storage; +} +RendererMeshStorage *RasterizerDummy::get_mesh_storage() { + return mesh_storage; +} +RendererParticlesStorage *RasterizerDummy::get_particles_storage() { + return particles_storage; +} +RendererTextureStorage *RasterizerDummy::get_texture_storage() { + return texture_storage; +} +RendererUtilities *RasterizerDummy::get_utilities() { + return utilities; +} + +RasterizerDummy::RasterizerDummy() { + canvas = memnew(RasterizerCanvasDummy); + scene = memnew(RasterizerSceneDummy); + + fog = memnew(RendererDummy::Fog); + gi = memnew(RendererDummy::GI); + light_storage = memnew(RendererDummy::LightStorage); + material_storage = memnew(RendererDummy::MaterialStorage); + mesh_storage = memnew(RendererDummy::MeshStorage); + particles_storage = memnew(RendererDummy::ParticlesStorage); + texture_storage = memnew(RendererDummy::TextureStorage); + utilities = memnew(RendererDummy::Utilities); +} + +RasterizerDummy::~RasterizerDummy() { + memdelete(canvas); + memdelete(scene); + + memdelete(fog); + memdelete(gi); + memdelete(light_storage); + memdelete(material_storage); + memdelete(mesh_storage); + memdelete(particles_storage); + memdelete(texture_storage); + memdelete(utilities); +} diff --git a/servers/rendering/dummy/rasterizer_dummy.h b/servers/rendering/dummy/rasterizer_dummy.h index e800f40bd7..397fc23649 100644 --- a/servers/rendering/dummy/rasterizer_dummy.h +++ b/servers/rendering/dummy/rasterizer_dummy.h @@ -30,20 +30,23 @@ #pragma once -#include "servers/display/display_server.h" -#include "servers/rendering/dummy/environment/fog.h" -#include "servers/rendering/dummy/environment/gi.h" -#include "servers/rendering/dummy/rasterizer_canvas_dummy.h" -#include "servers/rendering/dummy/rasterizer_scene_dummy.h" -#include "servers/rendering/dummy/storage/light_storage.h" -#include "servers/rendering/dummy/storage/material_storage.h" -#include "servers/rendering/dummy/storage/mesh_storage.h" -#include "servers/rendering/dummy/storage/particles_storage.h" -#include "servers/rendering/dummy/storage/texture_storage.h" -#include "servers/rendering/dummy/storage/utilities.h" #include "servers/rendering/renderer_compositor.h" #include "servers/rendering/rendering_server_enums.h" +class RasterizerCanvasDummy; +class RasterizerSceneDummy; + +namespace RendererDummy { +class Fog; +class GI; +class LightStorage; +class MaterialStorage; +class MeshStorage; +class ParticlesStorage; +class TextureStorage; +class Utilities; +} //namespace RendererDummy + class RasterizerDummy : public RendererCompositor { private: uint64_t frame = 1; @@ -51,29 +54,30 @@ private: double time = 0.0; protected: - RasterizerCanvasDummy canvas; - RasterizerSceneDummy scene; + RasterizerCanvasDummy *canvas = nullptr; + RasterizerSceneDummy *scene = nullptr; - RendererDummy::Fog fog; - RendererDummy::GI gi; - RendererDummy::LightStorage light_storage; - RendererDummy::MaterialStorage material_storage; - RendererDummy::MeshStorage mesh_storage; - RendererDummy::ParticlesStorage particles_storage; - RendererDummy::TextureStorage texture_storage; - RendererDummy::Utilities utilities; + RendererDummy::Fog *fog = nullptr; + RendererDummy::GI *gi = nullptr; + RendererDummy::LightStorage *light_storage = nullptr; + RendererDummy::MaterialStorage *material_storage = nullptr; + RendererDummy::MeshStorage *mesh_storage = nullptr; + RendererDummy::ParticlesStorage *particles_storage = nullptr; + RendererDummy::TextureStorage *texture_storage = nullptr; + RendererDummy::Utilities *utilities = nullptr; public: - RendererUtilities *get_utilities() override { return &utilities; } - RendererLightStorage *get_light_storage() override { return &light_storage; } - RendererMaterialStorage *get_material_storage() override { return &material_storage; } - RendererMeshStorage *get_mesh_storage() override { return &mesh_storage; } - RendererParticlesStorage *get_particles_storage() override { return &particles_storage; } - RendererTextureStorage *get_texture_storage() override { return &texture_storage; } - RendererGI *get_gi() override { return &gi; } - RendererFog *get_fog() override { return &fog; } - RendererCanvasRender *get_canvas() override { return &canvas; } - RendererSceneRender *get_scene() override { return &scene; } + RendererCanvasRender *get_canvas() override; + RendererSceneRender *get_scene() override; + + RendererFog *get_fog() override; + RendererGI *get_gi() override; + RendererLightStorage *get_light_storage() override; + RendererMaterialStorage *get_material_storage() override; + RendererMeshStorage *get_mesh_storage() override; + RendererParticlesStorage *get_particles_storage() override; + RendererTextureStorage *get_texture_storage() override; + RendererUtilities *get_utilities() override; void set_boot_image_with_stretch(const Ref &p_image, const Color &p_color, RSE::SplashStretchMode p_stretch_mode, bool p_use_filter = true) override {} @@ -89,11 +93,7 @@ public: bool is_opengl() override { return false; } void gl_end_frame(bool p_swap_buffers) override {} - void end_frame(bool p_present) override { - if (p_present) { - DisplayServer::get_singleton()->swap_buffers(); - } - } + void end_frame(bool p_present) override; void finalize() override {} @@ -111,6 +111,6 @@ public: double get_total_time() const override { return time; } bool can_create_resources_async() const override { return false; } - RasterizerDummy() {} - ~RasterizerDummy() {} + RasterizerDummy(); + ~RasterizerDummy(); }; diff --git a/servers/rendering/dummy/rasterizer_scene_dummy.cpp b/servers/rendering/dummy/rasterizer_scene_dummy.cpp new file mode 100644 index 0000000000..3b79e67271 --- /dev/null +++ b/servers/rendering/dummy/rasterizer_scene_dummy.cpp @@ -0,0 +1,57 @@ +/**************************************************************************/ +/* rasterizer_scene_dummy.cpp */ +/**************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/**************************************************************************/ +/* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */ +/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. */ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/**************************************************************************/ + +#include "rasterizer_scene_dummy.h" + +#include "core/io/image.h" +#include "core/variant/typed_array.h" +#include "servers/rendering/rendering_server_globals.h" + +TypedArray RasterizerSceneDummy::bake_render_uv2(RID p_base, const TypedArray &p_material_overrides, const Size2i &p_image_size) { + return TypedArray(); +} + +bool RasterizerSceneDummy::free(RID p_rid) { + if (is_environment(p_rid)) { + environment_free(p_rid); + return true; + } else if (is_compositor(p_rid)) { + compositor_free(p_rid); + return true; + } else if (is_compositor_effect(p_rid)) { + compositor_effect_free(p_rid); + return true; + } else if (RSG::camera_attributes->owns_camera_attributes(p_rid)) { + RSG::camera_attributes->camera_attributes_free(p_rid); + return true; + } else { + return false; + } +} diff --git a/servers/rendering/dummy/rasterizer_scene_dummy.h b/servers/rendering/dummy/rasterizer_scene_dummy.h index bfc74bea80..17dc40b67a 100644 --- a/servers/rendering/dummy/rasterizer_scene_dummy.h +++ b/servers/rendering/dummy/rasterizer_scene_dummy.h @@ -33,7 +33,11 @@ #include "core/templates/paged_allocator.h" #include "servers/rendering/dummy/storage/utilities.h" #include "servers/rendering/renderer_scene_render.h" -#include "servers/rendering/rendering_server_globals.h" + +class Image; + +template +class TypedArray; class RasterizerSceneDummy : public RendererSceneRender { public: @@ -173,25 +177,9 @@ public: void sub_surface_scattering_set_quality(RSE::SubSurfaceScatteringQuality p_quality) override {} void sub_surface_scattering_set_scale(float p_scale, float p_depth_scale) override {} - TypedArray bake_render_uv2(RID p_base, const TypedArray &p_material_overrides, const Size2i &p_image_size) override { return TypedArray(); } + TypedArray bake_render_uv2(RID p_base, const TypedArray &p_material_overrides, const Size2i &p_image_size) override; - bool free(RID p_rid) override { - if (is_environment(p_rid)) { - environment_free(p_rid); - return true; - } else if (is_compositor(p_rid)) { - compositor_free(p_rid); - return true; - } else if (is_compositor_effect(p_rid)) { - compositor_effect_free(p_rid); - return true; - } else if (RSG::camera_attributes->owns_camera_attributes(p_rid)) { - RSG::camera_attributes->camera_attributes_free(p_rid); - return true; - } else { - return false; - } - } + bool free(RID p_rid) override; void update() override {} void sdfgi_set_debug_probe_select(const Vector3 &p_position, const Vector3 &p_dir) override {} diff --git a/servers/rendering/renderer_scene_render.h b/servers/rendering/renderer_scene_render.h index 165c823da5..136472317d 100644 --- a/servers/rendering/renderer_scene_render.h +++ b/servers/rendering/renderer_scene_render.h @@ -36,7 +36,7 @@ #include "servers/rendering/rendering_method.h" #include "servers/rendering/storage/compositor_storage.h" #include "servers/rendering/storage/environment_storage.h" -#include "storage/render_scene_buffers.h" +#include "servers/rendering/storage/render_scene_buffers.h" class RendererSceneRender { private: diff --git a/servers/rendering/storage/light_storage.h b/servers/rendering/storage/light_storage.h index 18781ff678..fb7af2dc94 100644 --- a/servers/rendering/storage/light_storage.h +++ b/servers/rendering/storage/light_storage.h @@ -30,8 +30,8 @@ #pragma once -#include "render_scene_buffers.h" #include "servers/rendering/rendering_server_enums.h" +#include "servers/rendering/storage/render_scene_buffers.h" class RendererLightStorage { public: diff --git a/servers/rendering/storage/render_data.cpp b/servers/rendering/storage/render_data.cpp index fa00a5c672..fca19d7292 100644 --- a/servers/rendering/storage/render_data.cpp +++ b/servers/rendering/storage/render_data.cpp @@ -36,34 +36,3 @@ void RenderData::_bind_methods() { ClassDB::bind_method(D_METHOD("get_environment"), &RenderData::get_environment); ClassDB::bind_method(D_METHOD("get_camera_attributes"), &RenderData::get_camera_attributes); } - -void RenderDataExtension::_bind_methods() { - GDVIRTUAL_BIND(_get_render_scene_buffers); - GDVIRTUAL_BIND(_get_render_scene_data) - GDVIRTUAL_BIND(_get_environment) - GDVIRTUAL_BIND(_get_camera_attributes) -} - -Ref RenderDataExtension::get_render_scene_buffers() const { - Ref ret; - GDVIRTUAL_CALL(_get_render_scene_buffers, ret); - return ret; -} - -RenderSceneData *RenderDataExtension::get_render_scene_data() const { - RenderSceneData *ret = nullptr; - GDVIRTUAL_CALL(_get_render_scene_data, ret); - return ret; -} - -RID RenderDataExtension::get_environment() const { - RID ret; - GDVIRTUAL_CALL(_get_environment, ret); - return ret; -} - -RID RenderDataExtension::get_camera_attributes() const { - RID ret; - GDVIRTUAL_CALL(_get_camera_attributes, ret); - return ret; -} diff --git a/servers/rendering/storage/render_data.h b/servers/rendering/storage/render_data.h index 6afe4dc019..25bddc23f7 100644 --- a/servers/rendering/storage/render_data.h +++ b/servers/rendering/storage/render_data.h @@ -31,8 +31,8 @@ #pragma once #include "core/object/object.h" -#include "render_scene_buffers.h" -#include "render_scene_data.h" +#include "servers/rendering/storage/render_scene_buffers.h" +#include "servers/rendering/storage/render_scene_data.h" class RenderData : public Object { GDCLASS(RenderData, Object); @@ -47,21 +47,3 @@ public: virtual RID get_environment() const = 0; virtual RID get_camera_attributes() const = 0; }; - -class RenderDataExtension : public RenderData { - GDCLASS(RenderDataExtension, RenderData); - -protected: - static void _bind_methods(); - - virtual Ref get_render_scene_buffers() const override; - virtual RenderSceneData *get_render_scene_data() const override; - - virtual RID get_environment() const override; - virtual RID get_camera_attributes() const override; - - GDVIRTUAL0RC(Ref, _get_render_scene_buffers) - GDVIRTUAL0RC(RenderSceneData *, _get_render_scene_data) - GDVIRTUAL0RC(RID, _get_environment) - GDVIRTUAL0RC(RID, _get_camera_attributes) -}; diff --git a/servers/rendering/storage/render_data_extension.cpp b/servers/rendering/storage/render_data_extension.cpp new file mode 100644 index 0000000000..a5b5054bba --- /dev/null +++ b/servers/rendering/storage/render_data_extension.cpp @@ -0,0 +1,144 @@ +/**************************************************************************/ +/* render_data_extension.cpp */ +/**************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/**************************************************************************/ +/* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */ +/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. */ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/**************************************************************************/ + +#include "render_data_extension.h" + +#include "servers/rendering/rendering_server.h" // IWYU pragma: Needed to bind RSE enums. + +// RenderSceneBuffersExtension + +void RenderSceneBuffersExtension::_bind_methods() { + GDVIRTUAL_BIND(_configure, "config"); + GDVIRTUAL_BIND(_set_fsr_sharpness, "fsr_sharpness"); + GDVIRTUAL_BIND(_set_texture_mipmap_bias, "texture_mipmap_bias"); + GDVIRTUAL_BIND(_set_anisotropic_filtering_level, "anisotropic_filtering_level"); + GDVIRTUAL_BIND(_set_use_debanding, "use_debanding"); +} + +void RenderSceneBuffersExtension::configure(const RenderSceneBuffersConfiguration *p_config) { + GDVIRTUAL_CALL(_configure, p_config); +} + +void RenderSceneBuffersExtension::set_fsr_sharpness(float p_fsr_sharpness) { + GDVIRTUAL_CALL(_set_fsr_sharpness, p_fsr_sharpness); +} + +void RenderSceneBuffersExtension::set_texture_mipmap_bias(float p_texture_mipmap_bias) { + GDVIRTUAL_CALL(_set_texture_mipmap_bias, p_texture_mipmap_bias); +} + +void RenderSceneBuffersExtension::set_anisotropic_filtering_level(RSE::ViewportAnisotropicFiltering p_anisotropic_filtering_level) { + GDVIRTUAL_CALL(_set_anisotropic_filtering_level, p_anisotropic_filtering_level); +} + +void RenderSceneBuffersExtension::set_use_debanding(bool p_use_debanding) { + GDVIRTUAL_CALL(_set_use_debanding, p_use_debanding); +} + +// RenderSceneDataExtension + +void RenderSceneDataExtension::_bind_methods() { + GDVIRTUAL_BIND(_get_cam_transform); + GDVIRTUAL_BIND(_get_cam_projection); + GDVIRTUAL_BIND(_get_view_count); + GDVIRTUAL_BIND(_get_view_eye_offset, "view"); + GDVIRTUAL_BIND(_get_view_projection, "view"); + + GDVIRTUAL_BIND(_get_uniform_buffer); +} + +Transform3D RenderSceneDataExtension::get_cam_transform() const { + Transform3D ret; + GDVIRTUAL_CALL(_get_cam_transform, ret); + return ret; +} + +Projection RenderSceneDataExtension::get_cam_projection() const { + Projection ret; + GDVIRTUAL_CALL(_get_cam_projection, ret); + return ret; +} + +uint32_t RenderSceneDataExtension::get_view_count() const { + uint32_t ret = 0; + GDVIRTUAL_CALL(_get_view_count, ret); + return ret; +} + +Vector3 RenderSceneDataExtension::get_view_eye_offset(uint32_t p_view) const { + Vector3 ret; + GDVIRTUAL_CALL(_get_view_eye_offset, p_view, ret); + return ret; +} + +Projection RenderSceneDataExtension::get_view_projection(uint32_t p_view) const { + Projection ret; + GDVIRTUAL_CALL(_get_view_projection, p_view, ret); + return ret; +} + +RID RenderSceneDataExtension::get_uniform_buffer() const { + RID ret; + GDVIRTUAL_CALL(_get_uniform_buffer, ret); + return ret; +} + +// RenderDataExtension + +void RenderDataExtension::_bind_methods() { + GDVIRTUAL_BIND(_get_render_scene_buffers); + GDVIRTUAL_BIND(_get_render_scene_data) + GDVIRTUAL_BIND(_get_environment) + GDVIRTUAL_BIND(_get_camera_attributes) +} + +Ref RenderDataExtension::get_render_scene_buffers() const { + Ref ret; + GDVIRTUAL_CALL(_get_render_scene_buffers, ret); + return ret; +} + +RenderSceneData *RenderDataExtension::get_render_scene_data() const { + RenderSceneData *ret = nullptr; + GDVIRTUAL_CALL(_get_render_scene_data, ret); + return ret; +} + +RID RenderDataExtension::get_environment() const { + RID ret; + GDVIRTUAL_CALL(_get_environment, ret); + return ret; +} + +RID RenderDataExtension::get_camera_attributes() const { + RID ret; + GDVIRTUAL_CALL(_get_camera_attributes, ret); + return ret; +} diff --git a/servers/rendering/storage/render_data_extension.h b/servers/rendering/storage/render_data_extension.h new file mode 100644 index 0000000000..11556f5f54 --- /dev/null +++ b/servers/rendering/storage/render_data_extension.h @@ -0,0 +1,103 @@ +/**************************************************************************/ +/* render_data_extension.h */ +/**************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/**************************************************************************/ +/* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */ +/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. */ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/**************************************************************************/ + +#pragma once + +#include "core/object/gdvirtual.gen.h" +#include "servers/rendering/storage/render_data.h" +#include "servers/rendering/storage/render_scene_buffers.h" +#include "servers/rendering/storage/render_scene_data.h" + +class RenderSceneBuffersExtension : public RenderSceneBuffers { + GDCLASS(RenderSceneBuffersExtension, RenderSceneBuffers); + +protected: + static void _bind_methods(); + + GDVIRTUAL1(_configure, const RenderSceneBuffersConfiguration *) + GDVIRTUAL1(_set_fsr_sharpness, float) + GDVIRTUAL1(_set_texture_mipmap_bias, float) + GDVIRTUAL1(_set_anisotropic_filtering_level, int) + GDVIRTUAL1(_set_use_debanding, bool) + +public: + virtual ~RenderSceneBuffersExtension() {} + + virtual void configure(const RenderSceneBuffersConfiguration *p_config) override; + + virtual void set_fsr_sharpness(float p_fsr_sharpness) override; + virtual void set_texture_mipmap_bias(float p_texture_mipmap_bias) override; + virtual void set_anisotropic_filtering_level(RSE::ViewportAnisotropicFiltering p_anisotropic_filtering_level) override; + virtual void set_use_debanding(bool p_use_debanding) override; +}; + +class RenderSceneDataExtension : public RenderSceneData { + GDCLASS(RenderSceneDataExtension, RenderSceneData); + +protected: + static void _bind_methods(); + +public: + virtual Transform3D get_cam_transform() const override; + virtual Projection get_cam_projection() const override; + + virtual uint32_t get_view_count() const override; + virtual Vector3 get_view_eye_offset(uint32_t p_view) const override; + virtual Projection get_view_projection(uint32_t p_view) const override; + + virtual RID get_uniform_buffer() const override; + + GDVIRTUAL0RC(Transform3D, _get_cam_transform) + GDVIRTUAL0RC(Projection, _get_cam_projection) + + GDVIRTUAL0RC(uint32_t, _get_view_count) + GDVIRTUAL1RC(Vector3, _get_view_eye_offset, uint32_t) + GDVIRTUAL1RC(Projection, _get_view_projection, uint32_t) + + GDVIRTUAL0RC(RID, _get_uniform_buffer) +}; + +class RenderDataExtension : public RenderData { + GDCLASS(RenderDataExtension, RenderData); + +protected: + static void _bind_methods(); + + virtual Ref get_render_scene_buffers() const override; + virtual RenderSceneData *get_render_scene_data() const override; + + virtual RID get_environment() const override; + virtual RID get_camera_attributes() const override; + + GDVIRTUAL0RC(Ref, _get_render_scene_buffers) + GDVIRTUAL0RC(RenderSceneData *, _get_render_scene_data) + GDVIRTUAL0RC(RID, _get_environment) + GDVIRTUAL0RC(RID, _get_camera_attributes) +}; diff --git a/servers/rendering/storage/render_scene_buffers.cpp b/servers/rendering/storage/render_scene_buffers.cpp index 4e356fe36c..c8da5f49fd 100644 --- a/servers/rendering/storage/render_scene_buffers.cpp +++ b/servers/rendering/storage/render_scene_buffers.cpp @@ -77,31 +77,3 @@ void RenderSceneBuffersConfiguration::_bind_methods() { void RenderSceneBuffers::_bind_methods() { ClassDB::bind_method(D_METHOD("configure", "config"), &RenderSceneBuffers::configure); } - -void RenderSceneBuffersExtension::_bind_methods() { - GDVIRTUAL_BIND(_configure, "config"); - GDVIRTUAL_BIND(_set_fsr_sharpness, "fsr_sharpness"); - GDVIRTUAL_BIND(_set_texture_mipmap_bias, "texture_mipmap_bias"); - GDVIRTUAL_BIND(_set_anisotropic_filtering_level, "anisotropic_filtering_level"); - GDVIRTUAL_BIND(_set_use_debanding, "use_debanding"); -} - -void RenderSceneBuffersExtension::configure(const RenderSceneBuffersConfiguration *p_config) { - GDVIRTUAL_CALL(_configure, p_config); -} - -void RenderSceneBuffersExtension::set_fsr_sharpness(float p_fsr_sharpness) { - GDVIRTUAL_CALL(_set_fsr_sharpness, p_fsr_sharpness); -} - -void RenderSceneBuffersExtension::set_texture_mipmap_bias(float p_texture_mipmap_bias) { - GDVIRTUAL_CALL(_set_texture_mipmap_bias, p_texture_mipmap_bias); -} - -void RenderSceneBuffersExtension::set_anisotropic_filtering_level(RSE::ViewportAnisotropicFiltering p_anisotropic_filtering_level) { - GDVIRTUAL_CALL(_set_anisotropic_filtering_level, p_anisotropic_filtering_level); -} - -void RenderSceneBuffersExtension::set_use_debanding(bool p_use_debanding) { - GDVIRTUAL_CALL(_set_use_debanding, p_use_debanding); -} diff --git a/servers/rendering/storage/render_scene_buffers.h b/servers/rendering/storage/render_scene_buffers.h index 0394fd1408..c67a022bf4 100644 --- a/servers/rendering/storage/render_scene_buffers.h +++ b/servers/rendering/storage/render_scene_buffers.h @@ -30,7 +30,6 @@ #pragma once -#include "core/object/gdvirtual.gen.h" #include "core/object/ref_counted.h" #include "servers/rendering/rendering_server_enums.h" @@ -116,26 +115,3 @@ public: virtual void set_anisotropic_filtering_level(RSE::ViewportAnisotropicFiltering p_anisotropic_filtering_level) = 0; virtual void set_use_debanding(bool p_use_debanding) = 0; }; - -class RenderSceneBuffersExtension : public RenderSceneBuffers { - GDCLASS(RenderSceneBuffersExtension, RenderSceneBuffers); - -protected: - static void _bind_methods(); - - GDVIRTUAL1(_configure, const RenderSceneBuffersConfiguration *) - GDVIRTUAL1(_set_fsr_sharpness, float) - GDVIRTUAL1(_set_texture_mipmap_bias, float) - GDVIRTUAL1(_set_anisotropic_filtering_level, int) - GDVIRTUAL1(_set_use_debanding, bool) - -public: - virtual ~RenderSceneBuffersExtension() {} - - virtual void configure(const RenderSceneBuffersConfiguration *p_config) override; - - virtual void set_fsr_sharpness(float p_fsr_sharpness) override; - virtual void set_texture_mipmap_bias(float p_texture_mipmap_bias) override; - virtual void set_anisotropic_filtering_level(RSE::ViewportAnisotropicFiltering p_anisotropic_filtering_level) override; - virtual void set_use_debanding(bool p_use_debanding) override; -}; diff --git a/servers/rendering/storage/render_scene_data.cpp b/servers/rendering/storage/render_scene_data.cpp index a1d8f524b4..0140fd3ad1 100644 --- a/servers/rendering/storage/render_scene_data.cpp +++ b/servers/rendering/storage/render_scene_data.cpp @@ -30,6 +30,8 @@ #include "render_scene_data.h" +#include "core/object/class_db.h" + void RenderSceneData::_bind_methods() { ClassDB::bind_method(D_METHOD("get_cam_transform"), &RenderSceneData::get_cam_transform); ClassDB::bind_method(D_METHOD("get_cam_projection"), &RenderSceneData::get_cam_projection); @@ -40,49 +42,3 @@ void RenderSceneData::_bind_methods() { ClassDB::bind_method(D_METHOD("get_uniform_buffer"), &RenderSceneData::get_uniform_buffer); } - -void RenderSceneDataExtension::_bind_methods() { - GDVIRTUAL_BIND(_get_cam_transform); - GDVIRTUAL_BIND(_get_cam_projection); - GDVIRTUAL_BIND(_get_view_count); - GDVIRTUAL_BIND(_get_view_eye_offset, "view"); - GDVIRTUAL_BIND(_get_view_projection, "view"); - - GDVIRTUAL_BIND(_get_uniform_buffer); -} - -Transform3D RenderSceneDataExtension::get_cam_transform() const { - Transform3D ret; - GDVIRTUAL_CALL(_get_cam_transform, ret); - return ret; -} - -Projection RenderSceneDataExtension::get_cam_projection() const { - Projection ret; - GDVIRTUAL_CALL(_get_cam_projection, ret); - return ret; -} - -uint32_t RenderSceneDataExtension::get_view_count() const { - uint32_t ret = 0; - GDVIRTUAL_CALL(_get_view_count, ret); - return ret; -} - -Vector3 RenderSceneDataExtension::get_view_eye_offset(uint32_t p_view) const { - Vector3 ret; - GDVIRTUAL_CALL(_get_view_eye_offset, p_view, ret); - return ret; -} - -Projection RenderSceneDataExtension::get_view_projection(uint32_t p_view) const { - Projection ret; - GDVIRTUAL_CALL(_get_view_projection, p_view, ret); - return ret; -} - -RID RenderSceneDataExtension::get_uniform_buffer() const { - RID ret; - GDVIRTUAL_CALL(_get_uniform_buffer, ret); - return ret; -} diff --git a/servers/rendering/storage/render_scene_data.h b/servers/rendering/storage/render_scene_data.h index 033f425449..583d5bf420 100644 --- a/servers/rendering/storage/render_scene_data.h +++ b/servers/rendering/storage/render_scene_data.h @@ -30,10 +30,7 @@ #pragma once -#include "core/object/class_db.h" -#include "core/object/gdvirtual.gen.h" #include "core/object/object.h" -#include "core/object/script_language.h" class RenderSceneData : public Object { GDCLASS(RenderSceneData, Object); @@ -51,29 +48,3 @@ public: virtual RID get_uniform_buffer() const = 0; }; - -class RenderSceneDataExtension : public RenderSceneData { - GDCLASS(RenderSceneDataExtension, RenderSceneData); - -protected: - static void _bind_methods(); - -public: - virtual Transform3D get_cam_transform() const override; - virtual Projection get_cam_projection() const override; - - virtual uint32_t get_view_count() const override; - virtual Vector3 get_view_eye_offset(uint32_t p_view) const override; - virtual Projection get_view_projection(uint32_t p_view) const override; - - virtual RID get_uniform_buffer() const override; - - GDVIRTUAL0RC(Transform3D, _get_cam_transform) - GDVIRTUAL0RC(Projection, _get_cam_projection) - - GDVIRTUAL0RC(uint32_t, _get_view_count) - GDVIRTUAL1RC(Vector3, _get_view_eye_offset, uint32_t) - GDVIRTUAL1RC(Projection, _get_view_projection, uint32_t) - - GDVIRTUAL0RC(RID, _get_uniform_buffer) -};