Decouple RasterizerDummy from RenderingServer and DisplayServer

Also move some Extension classes to a separate file to avoid including gdvirtual
unnecessarily.
This commit is contained in:
Rémi Verschelde 2026-02-20 01:48:43 +01:00
parent 671864fb05
commit 462f31801d
No known key found for this signature in database
GPG key ID: C3336907360768E1
17 changed files with 468 additions and 237 deletions

View file

@ -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;

View file

@ -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"

View file

@ -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"

View file

@ -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);
}

View file

@ -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<Image> &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();
};

View file

@ -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<Image> RasterizerSceneDummy::bake_render_uv2(RID p_base, const TypedArray<RID> &p_material_overrides, const Size2i &p_image_size) {
return TypedArray<Image>();
}
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;
}
}

View file

@ -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 <typename T>
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<Image> bake_render_uv2(RID p_base, const TypedArray<RID> &p_material_overrides, const Size2i &p_image_size) override { return TypedArray<Image>(); }
TypedArray<Image> bake_render_uv2(RID p_base, const TypedArray<RID> &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 {}

View file

@ -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:

View file

@ -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:

View file

@ -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<RenderSceneBuffers> RenderDataExtension::get_render_scene_buffers() const {
Ref<RenderSceneBuffers> 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;
}

View file

@ -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<RenderSceneBuffers> 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<RenderSceneBuffers>, _get_render_scene_buffers)
GDVIRTUAL0RC(RenderSceneData *, _get_render_scene_data)
GDVIRTUAL0RC(RID, _get_environment)
GDVIRTUAL0RC(RID, _get_camera_attributes)
};

View file

@ -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<RenderSceneBuffers> RenderDataExtension::get_render_scene_buffers() const {
Ref<RenderSceneBuffers> 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;
}

View file

@ -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<RenderSceneBuffers> 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<RenderSceneBuffers>, _get_render_scene_buffers)
GDVIRTUAL0RC(RenderSceneData *, _get_render_scene_data)
GDVIRTUAL0RC(RID, _get_environment)
GDVIRTUAL0RC(RID, _get_camera_attributes)
};

View file

@ -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);
}

View file

@ -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;
};

View file

@ -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;
}

View file

@ -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)
};