mirror of
https://github.com/godotengine/godot.git
synced 2024-11-25 05:33:11 +00:00
RenderingServer reorganization
This commit is contained in:
parent
3dc8aaaccc
commit
2787ad65be
@ -35,10 +35,10 @@
|
|||||||
#include "core/templates/rid_owner.h"
|
#include "core/templates/rid_owner.h"
|
||||||
#include "core/templates/self_list.h"
|
#include "core/templates/self_list.h"
|
||||||
#include "scene/resources/mesh.h"
|
#include "scene/resources/mesh.h"
|
||||||
#include "servers/rendering/rasterizer.h"
|
#include "servers/rendering/renderer_compositor.h"
|
||||||
#include "servers/rendering_server.h"
|
#include "servers/rendering_server.h"
|
||||||
|
|
||||||
class RasterizerSceneDummy : public RasterizerScene {
|
class RasterizerSceneDummy : public RendererSceneRender {
|
||||||
public:
|
public:
|
||||||
/* SHADOW ATLAS API */
|
/* SHADOW ATLAS API */
|
||||||
|
|
||||||
@ -179,7 +179,7 @@ public:
|
|||||||
~RasterizerSceneDummy() {}
|
~RasterizerSceneDummy() {}
|
||||||
};
|
};
|
||||||
|
|
||||||
class RasterizerStorageDummy : public RasterizerStorage {
|
class RasterizerStorageDummy : public RendererStorage {
|
||||||
public:
|
public:
|
||||||
/* TEXTURE API */
|
/* TEXTURE API */
|
||||||
struct DummyTexture {
|
struct DummyTexture {
|
||||||
@ -383,7 +383,7 @@ public:
|
|||||||
bool material_is_animated(RID p_material) override { return false; }
|
bool material_is_animated(RID p_material) override { return false; }
|
||||||
bool material_casts_shadows(RID p_material) override { return false; }
|
bool material_casts_shadows(RID p_material) override { return false; }
|
||||||
void material_get_instance_shader_parameters(RID p_material, List<InstanceShaderParam> *r_parameters) override {}
|
void material_get_instance_shader_parameters(RID p_material, List<InstanceShaderParam> *r_parameters) override {}
|
||||||
void material_update_dependency(RID p_material, RasterizerScene::InstanceBase *p_instance) override {}
|
void material_update_dependency(RID p_material, RendererSceneRender::InstanceBase *p_instance) override {}
|
||||||
|
|
||||||
/* MESH API */
|
/* MESH API */
|
||||||
|
|
||||||
@ -642,8 +642,8 @@ public:
|
|||||||
float reflection_probe_get_origin_max_distance(RID p_probe) const override { return 0.0; }
|
float reflection_probe_get_origin_max_distance(RID p_probe) const override { return 0.0; }
|
||||||
bool reflection_probe_renders_shadows(RID p_probe) const override { return false; }
|
bool reflection_probe_renders_shadows(RID p_probe) const override { return false; }
|
||||||
|
|
||||||
void base_update_dependency(RID p_base, RasterizerScene::InstanceBase *p_instance) override {}
|
void base_update_dependency(RID p_base, RendererSceneRender::InstanceBase *p_instance) override {}
|
||||||
void skeleton_update_dependency(RID p_base, RasterizerScene::InstanceBase *p_instance) override {}
|
void skeleton_update_dependency(RID p_base, RendererSceneRender::InstanceBase *p_instance) override {}
|
||||||
|
|
||||||
/* DECAL API */
|
/* DECAL API */
|
||||||
|
|
||||||
@ -710,10 +710,10 @@ public:
|
|||||||
/* LIGHTMAP CAPTURE */
|
/* LIGHTMAP CAPTURE */
|
||||||
#if 0
|
#if 0
|
||||||
struct Instantiable {
|
struct Instantiable {
|
||||||
SelfList<RasterizerScene::InstanceBase>::List instance_list;
|
SelfList<RendererSceneRender::InstanceBase>::List instance_list;
|
||||||
|
|
||||||
_FORCE_INLINE_ void instance_change_notify(bool p_aabb = true, bool p_materials = true) override {
|
_FORCE_INLINE_ void instance_change_notify(bool p_aabb = true, bool p_materials = true) override {
|
||||||
SelfList<RasterizerScene::InstanceBase> *instances = instance_list.first();
|
SelfList<RendererSceneRender::InstanceBase> *instances = instance_list.first();
|
||||||
while (instances) override {
|
while (instances) override {
|
||||||
//instances->self()->base_changed(p_aabb, p_materials);
|
//instances->self()->base_changed(p_aabb, p_materials);
|
||||||
instances = instances->next();
|
instances = instances->next();
|
||||||
@ -721,9 +721,9 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
_FORCE_INLINE_ void instance_remove_deps() override {
|
_FORCE_INLINE_ void instance_remove_deps() override {
|
||||||
SelfList<RasterizerScene::InstanceBase> *instances = instance_list.first();
|
SelfList<RendererSceneRender::InstanceBase> *instances = instance_list.first();
|
||||||
while (instances) override {
|
while (instances) override {
|
||||||
SelfList<RasterizerScene::InstanceBase> *next = instances->next();
|
SelfList<RendererSceneRender::InstanceBase> *next = instances->next();
|
||||||
//instances->self()->base_removed();
|
//instances->self()->base_removed();
|
||||||
instances = next;
|
instances = next;
|
||||||
}
|
}
|
||||||
@ -826,8 +826,8 @@ public:
|
|||||||
int particles_get_draw_passes(RID p_particles) const override { return 0; }
|
int particles_get_draw_passes(RID p_particles) const override { return 0; }
|
||||||
RID particles_get_draw_pass_mesh(RID p_particles, int p_pass) const override { return RID(); }
|
RID particles_get_draw_pass_mesh(RID p_particles, int p_pass) const override { return RID(); }
|
||||||
|
|
||||||
void particles_add_collision(RID p_particles, RasterizerScene::InstanceBase *p_instance) override {}
|
void particles_add_collision(RID p_particles, RendererSceneRender::InstanceBase *p_instance) override {}
|
||||||
void particles_remove_collision(RID p_particles, RasterizerScene::InstanceBase *p_instance) override {}
|
void particles_remove_collision(RID p_particles, RendererSceneRender::InstanceBase *p_instance) override {}
|
||||||
|
|
||||||
void update_particles() override {}
|
void update_particles() override {}
|
||||||
|
|
||||||
@ -927,7 +927,7 @@ public:
|
|||||||
String get_video_adapter_name() const override { return String(); }
|
String get_video_adapter_name() const override { return String(); }
|
||||||
String get_video_adapter_vendor() const override { return String(); }
|
String get_video_adapter_vendor() const override { return String(); }
|
||||||
|
|
||||||
static RasterizerStorage *base_singleton;
|
static RendererStorage *base_singleton;
|
||||||
|
|
||||||
void capture_timestamps_begin() override {}
|
void capture_timestamps_begin() override {}
|
||||||
void capture_timestamp(const String &p_name) override {}
|
void capture_timestamp(const String &p_name) override {}
|
||||||
@ -941,7 +941,7 @@ public:
|
|||||||
~RasterizerStorageDummy() {}
|
~RasterizerStorageDummy() {}
|
||||||
};
|
};
|
||||||
|
|
||||||
class RasterizerCanvasDummy : public RasterizerCanvas {
|
class RasterizerCanvasDummy : public RendererCanvasRender {
|
||||||
public:
|
public:
|
||||||
PolygonID request_polygon(const Vector<int> &p_indices, const Vector<Point2> &p_points, const Vector<Color> &p_colors, const Vector<Point2> &p_uvs = Vector<Point2>(), const Vector<int> &p_bones = Vector<int>(), const Vector<float> &p_weights = Vector<float>()) override { return 0; }
|
PolygonID request_polygon(const Vector<int> &p_indices, const Vector<Point2> &p_points, const Vector<Color> &p_colors, const Vector<Point2> &p_uvs = Vector<Point2>(), const Vector<int> &p_bones = Vector<int>(), const Vector<float> &p_weights = Vector<float>()) override { return 0; }
|
||||||
void free_polygon(PolygonID p_polygon) override {}
|
void free_polygon(PolygonID p_polygon) override {}
|
||||||
@ -970,7 +970,7 @@ public:
|
|||||||
~RasterizerCanvasDummy() {}
|
~RasterizerCanvasDummy() {}
|
||||||
};
|
};
|
||||||
|
|
||||||
class RasterizerDummy : public Rasterizer {
|
class RasterizerDummy : public RendererCompositor {
|
||||||
private:
|
private:
|
||||||
uint64_t frame = 1;
|
uint64_t frame = 1;
|
||||||
float delta = 0;
|
float delta = 0;
|
||||||
@ -981,9 +981,9 @@ protected:
|
|||||||
RasterizerSceneDummy scene;
|
RasterizerSceneDummy scene;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
RasterizerStorage *get_storage() override { return &storage; }
|
RendererStorage *get_storage() override { return &storage; }
|
||||||
RasterizerCanvas *get_canvas() override { return &canvas; }
|
RendererCanvasRender *get_canvas() override { return &canvas; }
|
||||||
RasterizerScene *get_scene() override { return &scene; }
|
RendererSceneRender *get_scene() override { return &scene; }
|
||||||
|
|
||||||
void set_boot_image(const Ref<Image> &p_image, const Color &p_color, bool p_scale, bool p_use_filter = true) override {}
|
void set_boot_image(const Ref<Image> &p_image, const Color &p_color, bool p_scale, bool p_use_filter = true) override {}
|
||||||
|
|
||||||
@ -1004,7 +1004,7 @@ public:
|
|||||||
|
|
||||||
void finalize() override {}
|
void finalize() override {}
|
||||||
|
|
||||||
static Rasterizer *_create_current() {
|
static RendererCompositor *_create_current() {
|
||||||
return memnew(RasterizerDummy);
|
return memnew(RasterizerDummy);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -107,7 +107,7 @@ def build_rd_header(filename):
|
|||||||
|
|
||||||
out_file_class = out_file_base.replace(".glsl.gen.h", "").title().replace("_", "").replace(".", "") + "ShaderRD"
|
out_file_class = out_file_base.replace(".glsl.gen.h", "").title().replace("_", "").replace(".", "") + "ShaderRD"
|
||||||
fd.write("\n")
|
fd.write("\n")
|
||||||
fd.write('#include "servers/rendering/rasterizer_rd/shader_rd.h"\n\n')
|
fd.write('#include "servers/rendering/renderer_rd/shader_rd.h"\n\n')
|
||||||
fd.write("class " + out_file_class + " : public ShaderRD {\n\n")
|
fd.write("class " + out_file_class + " : public ShaderRD {\n\n")
|
||||||
fd.write("public:\n\n")
|
fd.write("public:\n\n")
|
||||||
|
|
||||||
|
@ -41,7 +41,7 @@
|
|||||||
#if defined(VULKAN_ENABLED)
|
#if defined(VULKAN_ENABLED)
|
||||||
#include "drivers/vulkan/rendering_device_vulkan.h"
|
#include "drivers/vulkan/rendering_device_vulkan.h"
|
||||||
#include "platform/android/vulkan/vulkan_context_android.h"
|
#include "platform/android/vulkan/vulkan_context_android.h"
|
||||||
#include "servers/rendering/rasterizer_rd/rasterizer_rd.h"
|
#include "servers/rendering/renderer_rd/renderer_compositor_rd.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
DisplayServerAndroid *DisplayServerAndroid::get_singleton() {
|
DisplayServerAndroid *DisplayServerAndroid::get_singleton() {
|
||||||
@ -447,7 +447,7 @@ DisplayServerAndroid::DisplayServerAndroid(const String &p_rendering_driver, Dis
|
|||||||
rendering_device_vulkan = memnew(RenderingDeviceVulkan);
|
rendering_device_vulkan = memnew(RenderingDeviceVulkan);
|
||||||
rendering_device_vulkan->initialize(context_vulkan);
|
rendering_device_vulkan->initialize(context_vulkan);
|
||||||
|
|
||||||
RasterizerRD::make_current();
|
RendererCompositorRD::make_current();
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -36,7 +36,7 @@
|
|||||||
|
|
||||||
#if defined(VULKAN_ENABLED)
|
#if defined(VULKAN_ENABLED)
|
||||||
#include "drivers/vulkan/rendering_device_vulkan.h"
|
#include "drivers/vulkan/rendering_device_vulkan.h"
|
||||||
#include "servers/rendering/rasterizer_rd/rasterizer_rd.h"
|
#include "servers/rendering/renderer_rd/renderer_compositor_rd.h"
|
||||||
|
|
||||||
#include "vulkan_context_iphone.h"
|
#include "vulkan_context_iphone.h"
|
||||||
|
|
||||||
|
@ -118,7 +118,7 @@ DisplayServerIPhone::DisplayServerIPhone(const String &p_rendering_driver, Displ
|
|||||||
rendering_device_vulkan = memnew(RenderingDeviceVulkan);
|
rendering_device_vulkan = memnew(RenderingDeviceVulkan);
|
||||||
rendering_device_vulkan->initialize(context_vulkan);
|
rendering_device_vulkan->initialize(context_vulkan);
|
||||||
|
|
||||||
RasterizerRD::make_current();
|
RendererCompositorRD::make_current();
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -38,7 +38,7 @@
|
|||||||
#include "ios.h"
|
#include "ios.h"
|
||||||
#include "joypad_iphone.h"
|
#include "joypad_iphone.h"
|
||||||
#include "servers/audio_server.h"
|
#include "servers/audio_server.h"
|
||||||
#include "servers/rendering/rasterizer.h"
|
#include "servers/rendering/renderer_compositor.h"
|
||||||
|
|
||||||
#if defined(VULKAN_ENABLED)
|
#if defined(VULKAN_ENABLED)
|
||||||
#include "drivers/vulkan/rendering_device_vulkan.h"
|
#include "drivers/vulkan/rendering_device_vulkan.h"
|
||||||
|
@ -47,7 +47,7 @@
|
|||||||
#import <dlfcn.h>
|
#import <dlfcn.h>
|
||||||
|
|
||||||
#if defined(VULKAN_ENABLED)
|
#if defined(VULKAN_ENABLED)
|
||||||
#include "servers/rendering/rasterizer_rd/rasterizer_rd.h"
|
#include "servers/rendering/renderer_rd/renderer_compositor_rd.h"
|
||||||
#import <QuartzCore/CAMetalLayer.h>
|
#import <QuartzCore/CAMetalLayer.h>
|
||||||
#include <vulkan/vulkan_metal.h>
|
#include <vulkan/vulkan_metal.h>
|
||||||
#endif
|
#endif
|
||||||
|
@ -40,7 +40,7 @@
|
|||||||
#include "scene/resources/texture.h"
|
#include "scene/resources/texture.h"
|
||||||
|
|
||||||
#if defined(VULKAN_ENABLED)
|
#if defined(VULKAN_ENABLED)
|
||||||
#include "servers/rendering/rasterizer_rd/rasterizer_rd.h"
|
#include "servers/rendering/renderer_rd/renderer_compositor_rd.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
@ -4088,7 +4088,7 @@ DisplayServerX11::DisplayServerX11(const String &p_rendering_driver, WindowMode
|
|||||||
rendering_device_vulkan = memnew(RenderingDeviceVulkan);
|
rendering_device_vulkan = memnew(RenderingDeviceVulkan);
|
||||||
rendering_device_vulkan->initialize(context_vulkan);
|
rendering_device_vulkan->initialize(context_vulkan);
|
||||||
|
|
||||||
RasterizerRD::make_current();
|
RendererCompositorRD::make_current();
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -43,7 +43,7 @@
|
|||||||
#include "drivers/unix/os_unix.h"
|
#include "drivers/unix/os_unix.h"
|
||||||
#include "joypad_linux.h"
|
#include "joypad_linux.h"
|
||||||
#include "servers/audio_server.h"
|
#include "servers/audio_server.h"
|
||||||
#include "servers/rendering/rasterizer.h"
|
#include "servers/rendering/renderer_compositor.h"
|
||||||
#include "servers/rendering_server.h"
|
#include "servers/rendering_server.h"
|
||||||
|
|
||||||
#if defined(OPENGL_ENABLED)
|
#if defined(OPENGL_ENABLED)
|
||||||
|
@ -39,7 +39,7 @@
|
|||||||
#include "drivers/unix/os_unix.h"
|
#include "drivers/unix/os_unix.h"
|
||||||
#include "joypad_linux.h"
|
#include "joypad_linux.h"
|
||||||
#include "servers/audio_server.h"
|
#include "servers/audio_server.h"
|
||||||
#include "servers/rendering/rasterizer.h"
|
#include "servers/rendering/renderer_compositor.h"
|
||||||
#include "servers/rendering_server.h"
|
#include "servers/rendering_server.h"
|
||||||
|
|
||||||
class OS_LinuxBSD : public OS_Unix {
|
class OS_LinuxBSD : public OS_Unix {
|
||||||
|
@ -52,7 +52,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(VULKAN_ENABLED)
|
#if defined(VULKAN_ENABLED)
|
||||||
#include "servers/rendering/rasterizer_rd/rasterizer_rd.h"
|
#include "servers/rendering/renderer_rd/renderer_compositor_rd.h"
|
||||||
|
|
||||||
#include <QuartzCore/CAMetalLayer.h>
|
#include <QuartzCore/CAMetalLayer.h>
|
||||||
#endif
|
#endif
|
||||||
@ -3870,7 +3870,7 @@ DisplayServerOSX::DisplayServerOSX(const String &p_rendering_driver, WindowMode
|
|||||||
rendering_device_vulkan = memnew(RenderingDeviceVulkan);
|
rendering_device_vulkan = memnew(RenderingDeviceVulkan);
|
||||||
rendering_device_vulkan->initialize(context_vulkan);
|
rendering_device_vulkan->initialize(context_vulkan);
|
||||||
|
|
||||||
RasterizerRD::make_current();
|
RendererCompositorRD::make_current();
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -41,7 +41,7 @@
|
|||||||
#include "platform/x11/crash_handler_linuxbsd.h"
|
#include "platform/x11/crash_handler_linuxbsd.h"
|
||||||
#endif
|
#endif
|
||||||
#include "servers/audio_server.h"
|
#include "servers/audio_server.h"
|
||||||
#include "servers/rendering/rasterizer.h"
|
#include "servers/rendering/renderer_compositor.h"
|
||||||
#include "servers/rendering_server.h"
|
#include "servers/rendering_server.h"
|
||||||
|
|
||||||
#undef CursorShape
|
#undef CursorShape
|
||||||
|
@ -39,7 +39,7 @@
|
|||||||
#include "drivers/xaudio2/audio_driver_xaudio2.h"
|
#include "drivers/xaudio2/audio_driver_xaudio2.h"
|
||||||
#include "joypad_uwp.h"
|
#include "joypad_uwp.h"
|
||||||
#include "servers/audio_server.h"
|
#include "servers/audio_server.h"
|
||||||
#include "servers/rendering/rasterizer.h"
|
#include "servers/rendering/renderer_compositor.h"
|
||||||
#include "servers/rendering_server.h"
|
#include "servers/rendering_server.h"
|
||||||
|
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
|
@ -3205,7 +3205,7 @@ DisplayServerWindows::DisplayServerWindows(const String &p_rendering_driver, Win
|
|||||||
rendering_device_vulkan = memnew(RenderingDeviceVulkan);
|
rendering_device_vulkan = memnew(RenderingDeviceVulkan);
|
||||||
rendering_device_vulkan->initialize(context_vulkan);
|
rendering_device_vulkan->initialize(context_vulkan);
|
||||||
|
|
||||||
RasterizerRD::make_current();
|
RendererCompositorRD::make_current();
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -43,8 +43,8 @@
|
|||||||
#include "joypad_windows.h"
|
#include "joypad_windows.h"
|
||||||
#include "key_mapping_windows.h"
|
#include "key_mapping_windows.h"
|
||||||
#include "servers/audio_server.h"
|
#include "servers/audio_server.h"
|
||||||
#include "servers/rendering/rasterizer.h"
|
#include "servers/rendering/renderer_compositor.h"
|
||||||
#include "servers/rendering/rasterizer_rd/rasterizer_rd.h"
|
#include "servers/rendering/renderer_rd/renderer_compositor_rd.h"
|
||||||
#include "servers/rendering_server.h"
|
#include "servers/rendering_server.h"
|
||||||
|
|
||||||
#ifdef XAUDIO2_ENABLED
|
#ifdef XAUDIO2_ENABLED
|
||||||
|
@ -40,7 +40,7 @@
|
|||||||
#include "drivers/winmidi/midi_driver_winmidi.h"
|
#include "drivers/winmidi/midi_driver_winmidi.h"
|
||||||
#include "key_mapping_windows.h"
|
#include "key_mapping_windows.h"
|
||||||
#include "servers/audio_server.h"
|
#include "servers/audio_server.h"
|
||||||
#include "servers/rendering/rasterizer.h"
|
#include "servers/rendering/renderer_compositor.h"
|
||||||
#include "servers/rendering_server.h"
|
#include "servers/rendering_server.h"
|
||||||
#ifdef XAUDIO2_ENABLED
|
#ifdef XAUDIO2_ENABLED
|
||||||
#include "drivers/xaudio2/audio_driver_xaudio2.h"
|
#include "drivers/xaudio2/audio_driver_xaudio2.h"
|
||||||
|
@ -62,7 +62,7 @@
|
|||||||
#include "physics_3d/physics_server_3d_sw.h"
|
#include "physics_3d/physics_server_3d_sw.h"
|
||||||
#include "physics_server_2d.h"
|
#include "physics_server_2d.h"
|
||||||
#include "physics_server_3d.h"
|
#include "physics_server_3d.h"
|
||||||
#include "rendering/rasterizer.h"
|
#include "rendering/renderer_compositor.h"
|
||||||
#include "rendering/rendering_device.h"
|
#include "rendering/rendering_device.h"
|
||||||
#include "rendering/rendering_device_binds.h"
|
#include "rendering/rendering_device_binds.h"
|
||||||
#include "rendering_server.h"
|
#include "rendering_server.h"
|
||||||
|
@ -4,4 +4,4 @@ Import("env")
|
|||||||
|
|
||||||
env.add_source_files(env.servers_sources, "*.cpp")
|
env.add_source_files(env.servers_sources, "*.cpp")
|
||||||
|
|
||||||
SConscript("rasterizer_rd/SCsub")
|
SConscript("renderer_rd/SCsub")
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,5 +1,5 @@
|
|||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
/* rendering_server_canvas.cpp */
|
/* renderer_canvas_cull.cpp */
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
/* This file is part of: */
|
/* This file is part of: */
|
||||||
/* GODOT ENGINE */
|
/* GODOT ENGINE */
|
||||||
@ -28,20 +28,20 @@
|
|||||||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
|
|
||||||
#include "rendering_server_canvas.h"
|
#include "renderer_canvas_cull.h"
|
||||||
|
|
||||||
#include "core/math/geometry_2d.h"
|
#include "core/math/geometry_2d.h"
|
||||||
|
#include "renderer_viewport.h"
|
||||||
#include "rendering_server_default.h"
|
#include "rendering_server_default.h"
|
||||||
#include "rendering_server_globals.h"
|
#include "rendering_server_globals.h"
|
||||||
#include "rendering_server_viewport.h"
|
|
||||||
|
|
||||||
static const int z_range = RS::CANVAS_ITEM_Z_MAX - RS::CANVAS_ITEM_Z_MIN + 1;
|
static const int z_range = RS::CANVAS_ITEM_Z_MAX - RS::CANVAS_ITEM_Z_MIN + 1;
|
||||||
|
|
||||||
void RenderingServerCanvas::_render_canvas_item_tree(RID p_to_render_target, Canvas::ChildItem *p_child_items, int p_child_item_count, Item *p_canvas_item, const Transform2D &p_transform, const Rect2 &p_clip_rect, const Color &p_modulate, RasterizerCanvas::Light *p_lights, RasterizerCanvas::Light *p_directional_lights, RenderingServer::CanvasItemTextureFilter p_default_filter, RenderingServer::CanvasItemTextureRepeat p_default_repeat, bool p_snap_2d_vertices_to_pixel) {
|
void RendererCanvasCull::_render_canvas_item_tree(RID p_to_render_target, Canvas::ChildItem *p_child_items, int p_child_item_count, Item *p_canvas_item, const Transform2D &p_transform, const Rect2 &p_clip_rect, const Color &p_modulate, RendererCanvasRender::Light *p_lights, RendererCanvasRender::Light *p_directional_lights, RenderingServer::CanvasItemTextureFilter p_default_filter, RenderingServer::CanvasItemTextureRepeat p_default_repeat, bool p_snap_2d_vertices_to_pixel) {
|
||||||
RENDER_TIMESTAMP("Cull CanvasItem Tree");
|
RENDER_TIMESTAMP("Cull CanvasItem Tree");
|
||||||
|
|
||||||
memset(z_list, 0, z_range * sizeof(RasterizerCanvas::Item *));
|
memset(z_list, 0, z_range * sizeof(RendererCanvasRender::Item *));
|
||||||
memset(z_last_list, 0, z_range * sizeof(RasterizerCanvas::Item *));
|
memset(z_last_list, 0, z_range * sizeof(RendererCanvasRender::Item *));
|
||||||
|
|
||||||
for (int i = 0; i < p_child_item_count; i++) {
|
for (int i = 0; i < p_child_item_count; i++) {
|
||||||
_cull_canvas_item(p_child_items[i].item, p_transform, p_clip_rect, Color(1, 1, 1, 1), 0, z_list, z_last_list, nullptr, nullptr);
|
_cull_canvas_item(p_child_items[i].item, p_transform, p_clip_rect, Color(1, 1, 1, 1), 0, z_list, z_last_list, nullptr, nullptr);
|
||||||
@ -50,8 +50,8 @@ void RenderingServerCanvas::_render_canvas_item_tree(RID p_to_render_target, Can
|
|||||||
_cull_canvas_item(p_canvas_item, p_transform, p_clip_rect, Color(1, 1, 1, 1), 0, z_list, z_last_list, nullptr, nullptr);
|
_cull_canvas_item(p_canvas_item, p_transform, p_clip_rect, Color(1, 1, 1, 1), 0, z_list, z_last_list, nullptr, nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
RasterizerCanvas::Item *list = nullptr;
|
RendererCanvasRender::Item *list = nullptr;
|
||||||
RasterizerCanvas::Item *list_end = nullptr;
|
RendererCanvasRender::Item *list_end = nullptr;
|
||||||
|
|
||||||
for (int i = 0; i < z_range; i++) {
|
for (int i = 0; i < z_range; i++) {
|
||||||
if (!z_list[i]) {
|
if (!z_list[i]) {
|
||||||
@ -75,9 +75,9 @@ void RenderingServerCanvas::_render_canvas_item_tree(RID p_to_render_target, Can
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void _collect_ysort_children(RenderingServerCanvas::Item *p_canvas_item, Transform2D p_transform, RenderingServerCanvas::Item *p_material_owner, RenderingServerCanvas::Item **r_items, int &r_index) {
|
void _collect_ysort_children(RendererCanvasCull::Item *p_canvas_item, Transform2D p_transform, RendererCanvasCull::Item *p_material_owner, RendererCanvasCull::Item **r_items, int &r_index) {
|
||||||
int child_item_count = p_canvas_item->child_items.size();
|
int child_item_count = p_canvas_item->child_items.size();
|
||||||
RenderingServerCanvas::Item **child_items = p_canvas_item->child_items.ptrw();
|
RendererCanvasCull::Item **child_items = p_canvas_item->child_items.ptrw();
|
||||||
for (int i = 0; i < child_item_count; i++) {
|
for (int i = 0; i < child_item_count; i++) {
|
||||||
if (child_items[i]->visible) {
|
if (child_items[i]->visible) {
|
||||||
if (r_items) {
|
if (r_items) {
|
||||||
@ -97,14 +97,14 @@ void _collect_ysort_children(RenderingServerCanvas::Item *p_canvas_item, Transfo
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void _mark_ysort_dirty(RenderingServerCanvas::Item *ysort_owner, RID_PtrOwner<RenderingServerCanvas::Item> &canvas_item_owner) {
|
void _mark_ysort_dirty(RendererCanvasCull::Item *ysort_owner, RID_PtrOwner<RendererCanvasCull::Item> &canvas_item_owner) {
|
||||||
do {
|
do {
|
||||||
ysort_owner->ysort_children_count = -1;
|
ysort_owner->ysort_children_count = -1;
|
||||||
ysort_owner = canvas_item_owner.owns(ysort_owner->parent) ? canvas_item_owner.getornull(ysort_owner->parent) : nullptr;
|
ysort_owner = canvas_item_owner.owns(ysort_owner->parent) ? canvas_item_owner.getornull(ysort_owner->parent) : nullptr;
|
||||||
} while (ysort_owner && ysort_owner->sort_y);
|
} while (ysort_owner && ysort_owner->sort_y);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerCanvas::_cull_canvas_item(Item *p_canvas_item, const Transform2D &p_transform, const Rect2 &p_clip_rect, const Color &p_modulate, int p_z, RasterizerCanvas::Item **z_list, RasterizerCanvas::Item **z_last_list, Item *p_canvas_clip, Item *p_material_owner) {
|
void RendererCanvasCull::_cull_canvas_item(Item *p_canvas_item, const Transform2D &p_transform, const Rect2 &p_clip_rect, const Color &p_modulate, int p_z, RendererCanvasRender::Item **z_list, RendererCanvasRender::Item **z_last_list, Item *p_canvas_clip, Item *p_material_owner) {
|
||||||
Item *ci = p_canvas_item;
|
Item *ci = p_canvas_item;
|
||||||
|
|
||||||
if (!ci->visible) {
|
if (!ci->visible) {
|
||||||
@ -176,7 +176,7 @@ void RenderingServerCanvas::_cull_canvas_item(Item *p_canvas_item, const Transfo
|
|||||||
p_z = ci->z_index;
|
p_z = ci->z_index;
|
||||||
}
|
}
|
||||||
|
|
||||||
RasterizerCanvas::Item *canvas_group_from = nullptr;
|
RendererCanvasRender::Item *canvas_group_from = nullptr;
|
||||||
bool use_canvas_group = ci->canvas_group != nullptr && (ci->canvas_group->fit_empty || ci->commands != nullptr);
|
bool use_canvas_group = ci->canvas_group != nullptr && (ci->canvas_group->fit_empty || ci->commands != nullptr);
|
||||||
if (use_canvas_group) {
|
if (use_canvas_group) {
|
||||||
int zidx = p_z - RS::CANVAS_ITEM_Z_MIN;
|
int zidx = p_z - RS::CANVAS_ITEM_Z_MIN;
|
||||||
@ -213,7 +213,7 @@ void RenderingServerCanvas::_cull_canvas_item(Item *p_canvas_item, const Transfo
|
|||||||
|
|
||||||
//compute a global rect (in global coords) for children in the same z layer
|
//compute a global rect (in global coords) for children in the same z layer
|
||||||
Rect2 rect_accum;
|
Rect2 rect_accum;
|
||||||
RasterizerCanvas::Item *c = canvas_group_from;
|
RendererCanvasRender::Item *c = canvas_group_from;
|
||||||
while (c) {
|
while (c) {
|
||||||
if (c == canvas_group_from) {
|
if (c == canvas_group_from) {
|
||||||
rect_accum = c->global_rect_cache;
|
rect_accum = c->global_rect_cache;
|
||||||
@ -227,7 +227,7 @@ void RenderingServerCanvas::_cull_canvas_item(Item *p_canvas_item, const Transfo
|
|||||||
// We have two choices now, if user has drawn something, we must assume users wants to draw the "mask", so compute the size based on this.
|
// We have two choices now, if user has drawn something, we must assume users wants to draw the "mask", so compute the size based on this.
|
||||||
// If nothing has been drawn, we just take it over and draw it ourselves.
|
// If nothing has been drawn, we just take it over and draw it ourselves.
|
||||||
if (ci->canvas_group->fit_empty && (ci->commands == nullptr ||
|
if (ci->canvas_group->fit_empty && (ci->commands == nullptr ||
|
||||||
(ci->commands->next == nullptr && ci->commands->type == Item::Command::TYPE_RECT && (static_cast<Item::CommandRect *>(ci->commands)->flags & RasterizerCanvas::CANVAS_RECT_IS_GROUP)))) {
|
(ci->commands->next == nullptr && ci->commands->type == Item::Command::TYPE_RECT && (static_cast<Item::CommandRect *>(ci->commands)->flags & RendererCanvasRender::CANVAS_RECT_IS_GROUP)))) {
|
||||||
// No commands, or sole command is the one used to draw, so we (re)create the draw command.
|
// No commands, or sole command is the one used to draw, so we (re)create the draw command.
|
||||||
ci->clear();
|
ci->clear();
|
||||||
|
|
||||||
@ -238,9 +238,9 @@ void RenderingServerCanvas::_cull_canvas_item(Item *p_canvas_item, const Transfo
|
|||||||
rect_accum = rect_accum.grow(ci->canvas_group->fit_margin);
|
rect_accum = rect_accum.grow(ci->canvas_group->fit_margin);
|
||||||
|
|
||||||
//draw it?
|
//draw it?
|
||||||
RasterizerCanvas::Item::CommandRect *crect = ci->alloc_command<RasterizerCanvas::Item::CommandRect>();
|
RendererCanvasRender::Item::CommandRect *crect = ci->alloc_command<RendererCanvasRender::Item::CommandRect>();
|
||||||
|
|
||||||
crect->flags = RasterizerCanvas::CANVAS_RECT_IS_GROUP; // so we can recognize it later
|
crect->flags = RendererCanvasRender::CANVAS_RECT_IS_GROUP; // so we can recognize it later
|
||||||
crect->rect = xform.affine_inverse().xform(rect_accum);
|
crect->rect = xform.affine_inverse().xform(rect_accum);
|
||||||
crect->modulate = Color(1, 1, 1, 1);
|
crect->modulate = Color(1, 1, 1, 1);
|
||||||
|
|
||||||
@ -256,7 +256,7 @@ void RenderingServerCanvas::_cull_canvas_item(Item *p_canvas_item, const Transfo
|
|||||||
global_rect.position += p_clip_rect.position;
|
global_rect.position += p_clip_rect.position;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Very important that this is cleared after used in RasterizerCanvas to avoid
|
// Very important that this is cleared after used in RendererCanvasRender to avoid
|
||||||
// potential crashes.
|
// potential crashes.
|
||||||
canvas_group_from->canvas_group_owner = ci;
|
canvas_group_from->canvas_group_owner = ci;
|
||||||
}
|
}
|
||||||
@ -302,7 +302,7 @@ void RenderingServerCanvas::_cull_canvas_item(Item *p_canvas_item, const Transfo
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerCanvas::render_canvas(RID p_render_target, Canvas *p_canvas, const Transform2D &p_transform, RasterizerCanvas::Light *p_lights, RasterizerCanvas::Light *p_directional_lights, const Rect2 &p_clip_rect, RenderingServer::CanvasItemTextureFilter p_default_filter, RenderingServer::CanvasItemTextureRepeat p_default_repeat, bool p_snap_2d_transforms_to_pixel, bool p_snap_2d_vertices_to_pixel) {
|
void RendererCanvasCull::render_canvas(RID p_render_target, Canvas *p_canvas, const Transform2D &p_transform, RendererCanvasRender::Light *p_lights, RendererCanvasRender::Light *p_directional_lights, const Rect2 &p_clip_rect, RenderingServer::CanvasItemTextureFilter p_default_filter, RenderingServer::CanvasItemTextureRepeat p_default_repeat, bool p_snap_2d_transforms_to_pixel, bool p_snap_2d_vertices_to_pixel) {
|
||||||
RENDER_TIMESTAMP(">Render Canvas");
|
RENDER_TIMESTAMP(">Render Canvas");
|
||||||
|
|
||||||
sdf_used = false;
|
sdf_used = false;
|
||||||
@ -352,11 +352,11 @@ void RenderingServerCanvas::render_canvas(RID p_render_target, Canvas *p_canvas,
|
|||||||
RENDER_TIMESTAMP("<End Render Canvas");
|
RENDER_TIMESTAMP("<End Render Canvas");
|
||||||
}
|
}
|
||||||
|
|
||||||
bool RenderingServerCanvas::was_sdf_used() {
|
bool RendererCanvasCull::was_sdf_used() {
|
||||||
return sdf_used;
|
return sdf_used;
|
||||||
}
|
}
|
||||||
|
|
||||||
RID RenderingServerCanvas::canvas_create() {
|
RID RendererCanvasCull::canvas_create() {
|
||||||
Canvas *canvas = memnew(Canvas);
|
Canvas *canvas = memnew(Canvas);
|
||||||
ERR_FAIL_COND_V(!canvas, RID());
|
ERR_FAIL_COND_V(!canvas, RID());
|
||||||
RID rid = canvas_owner.make_rid(canvas);
|
RID rid = canvas_owner.make_rid(canvas);
|
||||||
@ -364,7 +364,7 @@ RID RenderingServerCanvas::canvas_create() {
|
|||||||
return rid;
|
return rid;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerCanvas::canvas_set_item_mirroring(RID p_canvas, RID p_item, const Point2 &p_mirroring) {
|
void RendererCanvasCull::canvas_set_item_mirroring(RID p_canvas, RID p_item, const Point2 &p_mirroring) {
|
||||||
Canvas *canvas = canvas_owner.getornull(p_canvas);
|
Canvas *canvas = canvas_owner.getornull(p_canvas);
|
||||||
ERR_FAIL_COND(!canvas);
|
ERR_FAIL_COND(!canvas);
|
||||||
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
||||||
@ -375,17 +375,17 @@ void RenderingServerCanvas::canvas_set_item_mirroring(RID p_canvas, RID p_item,
|
|||||||
canvas->child_items.write[idx].mirror = p_mirroring;
|
canvas->child_items.write[idx].mirror = p_mirroring;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerCanvas::canvas_set_modulate(RID p_canvas, const Color &p_color) {
|
void RendererCanvasCull::canvas_set_modulate(RID p_canvas, const Color &p_color) {
|
||||||
Canvas *canvas = canvas_owner.getornull(p_canvas);
|
Canvas *canvas = canvas_owner.getornull(p_canvas);
|
||||||
ERR_FAIL_COND(!canvas);
|
ERR_FAIL_COND(!canvas);
|
||||||
canvas->modulate = p_color;
|
canvas->modulate = p_color;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerCanvas::canvas_set_disable_scale(bool p_disable) {
|
void RendererCanvasCull::canvas_set_disable_scale(bool p_disable) {
|
||||||
disable_scale = p_disable;
|
disable_scale = p_disable;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerCanvas::canvas_set_parent(RID p_canvas, RID p_parent, float p_scale) {
|
void RendererCanvasCull::canvas_set_parent(RID p_canvas, RID p_parent, float p_scale) {
|
||||||
Canvas *canvas = canvas_owner.getornull(p_canvas);
|
Canvas *canvas = canvas_owner.getornull(p_canvas);
|
||||||
ERR_FAIL_COND(!canvas);
|
ERR_FAIL_COND(!canvas);
|
||||||
|
|
||||||
@ -393,14 +393,14 @@ void RenderingServerCanvas::canvas_set_parent(RID p_canvas, RID p_parent, float
|
|||||||
canvas->parent_scale = p_scale;
|
canvas->parent_scale = p_scale;
|
||||||
}
|
}
|
||||||
|
|
||||||
RID RenderingServerCanvas::canvas_item_create() {
|
RID RendererCanvasCull::canvas_item_create() {
|
||||||
Item *canvas_item = memnew(Item);
|
Item *canvas_item = memnew(Item);
|
||||||
ERR_FAIL_COND_V(!canvas_item, RID());
|
ERR_FAIL_COND_V(!canvas_item, RID());
|
||||||
|
|
||||||
return canvas_item_owner.make_rid(canvas_item);
|
return canvas_item_owner.make_rid(canvas_item);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerCanvas::canvas_item_set_parent(RID p_item, RID p_parent) {
|
void RendererCanvasCull::canvas_item_set_parent(RID p_item, RID p_parent) {
|
||||||
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
||||||
ERR_FAIL_COND(!canvas_item);
|
ERR_FAIL_COND(!canvas_item);
|
||||||
|
|
||||||
@ -444,7 +444,7 @@ void RenderingServerCanvas::canvas_item_set_parent(RID p_item, RID p_parent) {
|
|||||||
canvas_item->parent = p_parent;
|
canvas_item->parent = p_parent;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerCanvas::canvas_item_set_visible(RID p_item, bool p_visible) {
|
void RendererCanvasCull::canvas_item_set_visible(RID p_item, bool p_visible) {
|
||||||
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
||||||
ERR_FAIL_COND(!canvas_item);
|
ERR_FAIL_COND(!canvas_item);
|
||||||
|
|
||||||
@ -453,35 +453,35 @@ void RenderingServerCanvas::canvas_item_set_visible(RID p_item, bool p_visible)
|
|||||||
_mark_ysort_dirty(canvas_item, canvas_item_owner);
|
_mark_ysort_dirty(canvas_item, canvas_item_owner);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerCanvas::canvas_item_set_light_mask(RID p_item, int p_mask) {
|
void RendererCanvasCull::canvas_item_set_light_mask(RID p_item, int p_mask) {
|
||||||
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
||||||
ERR_FAIL_COND(!canvas_item);
|
ERR_FAIL_COND(!canvas_item);
|
||||||
|
|
||||||
canvas_item->light_mask = p_mask;
|
canvas_item->light_mask = p_mask;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerCanvas::canvas_item_set_transform(RID p_item, const Transform2D &p_transform) {
|
void RendererCanvasCull::canvas_item_set_transform(RID p_item, const Transform2D &p_transform) {
|
||||||
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
||||||
ERR_FAIL_COND(!canvas_item);
|
ERR_FAIL_COND(!canvas_item);
|
||||||
|
|
||||||
canvas_item->xform = p_transform;
|
canvas_item->xform = p_transform;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerCanvas::canvas_item_set_clip(RID p_item, bool p_clip) {
|
void RendererCanvasCull::canvas_item_set_clip(RID p_item, bool p_clip) {
|
||||||
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
||||||
ERR_FAIL_COND(!canvas_item);
|
ERR_FAIL_COND(!canvas_item);
|
||||||
|
|
||||||
canvas_item->clip = p_clip;
|
canvas_item->clip = p_clip;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerCanvas::canvas_item_set_distance_field_mode(RID p_item, bool p_enable) {
|
void RendererCanvasCull::canvas_item_set_distance_field_mode(RID p_item, bool p_enable) {
|
||||||
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
||||||
ERR_FAIL_COND(!canvas_item);
|
ERR_FAIL_COND(!canvas_item);
|
||||||
|
|
||||||
canvas_item->distance_field = p_enable;
|
canvas_item->distance_field = p_enable;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerCanvas::canvas_item_set_custom_rect(RID p_item, bool p_custom_rect, const Rect2 &p_rect) {
|
void RendererCanvasCull::canvas_item_set_custom_rect(RID p_item, bool p_custom_rect, const Rect2 &p_rect) {
|
||||||
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
||||||
ERR_FAIL_COND(!canvas_item);
|
ERR_FAIL_COND(!canvas_item);
|
||||||
|
|
||||||
@ -489,35 +489,35 @@ void RenderingServerCanvas::canvas_item_set_custom_rect(RID p_item, bool p_custo
|
|||||||
canvas_item->rect = p_rect;
|
canvas_item->rect = p_rect;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerCanvas::canvas_item_set_modulate(RID p_item, const Color &p_color) {
|
void RendererCanvasCull::canvas_item_set_modulate(RID p_item, const Color &p_color) {
|
||||||
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
||||||
ERR_FAIL_COND(!canvas_item);
|
ERR_FAIL_COND(!canvas_item);
|
||||||
|
|
||||||
canvas_item->modulate = p_color;
|
canvas_item->modulate = p_color;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerCanvas::canvas_item_set_self_modulate(RID p_item, const Color &p_color) {
|
void RendererCanvasCull::canvas_item_set_self_modulate(RID p_item, const Color &p_color) {
|
||||||
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
||||||
ERR_FAIL_COND(!canvas_item);
|
ERR_FAIL_COND(!canvas_item);
|
||||||
|
|
||||||
canvas_item->self_modulate = p_color;
|
canvas_item->self_modulate = p_color;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerCanvas::canvas_item_set_draw_behind_parent(RID p_item, bool p_enable) {
|
void RendererCanvasCull::canvas_item_set_draw_behind_parent(RID p_item, bool p_enable) {
|
||||||
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
||||||
ERR_FAIL_COND(!canvas_item);
|
ERR_FAIL_COND(!canvas_item);
|
||||||
|
|
||||||
canvas_item->behind = p_enable;
|
canvas_item->behind = p_enable;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerCanvas::canvas_item_set_update_when_visible(RID p_item, bool p_update) {
|
void RendererCanvasCull::canvas_item_set_update_when_visible(RID p_item, bool p_update) {
|
||||||
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
||||||
ERR_FAIL_COND(!canvas_item);
|
ERR_FAIL_COND(!canvas_item);
|
||||||
|
|
||||||
canvas_item->update_when_visible = p_update;
|
canvas_item->update_when_visible = p_update;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerCanvas::canvas_item_add_line(RID p_item, const Point2 &p_from, const Point2 &p_to, const Color &p_color, float p_width) {
|
void RendererCanvasCull::canvas_item_add_line(RID p_item, const Point2 &p_from, const Point2 &p_to, const Color &p_color, float p_width) {
|
||||||
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
||||||
ERR_FAIL_COND(!canvas_item);
|
ERR_FAIL_COND(!canvas_item);
|
||||||
|
|
||||||
@ -540,7 +540,7 @@ void RenderingServerCanvas::canvas_item_add_line(RID p_item, const Point2 &p_fro
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerCanvas::canvas_item_add_polyline(RID p_item, const Vector<Point2> &p_points, const Vector<Color> &p_colors, float p_width, bool p_antialiased) {
|
void RendererCanvasCull::canvas_item_add_polyline(RID p_item, const Vector<Point2> &p_points, const Vector<Color> &p_colors, float p_width, bool p_antialiased) {
|
||||||
ERR_FAIL_COND(p_points.size() < 2);
|
ERR_FAIL_COND(p_points.size() < 2);
|
||||||
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
||||||
ERR_FAIL_COND(!canvas_item);
|
ERR_FAIL_COND(!canvas_item);
|
||||||
@ -679,7 +679,7 @@ void RenderingServerCanvas::canvas_item_add_polyline(RID p_item, const Vector<Po
|
|||||||
pline->polygon.create(indices, points, colors);
|
pline->polygon.create(indices, points, colors);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerCanvas::canvas_item_add_multiline(RID p_item, const Vector<Point2> &p_points, const Vector<Color> &p_colors, float p_width) {
|
void RendererCanvasCull::canvas_item_add_multiline(RID p_item, const Vector<Point2> &p_points, const Vector<Color> &p_colors, float p_width) {
|
||||||
ERR_FAIL_COND(p_points.size() < 2);
|
ERR_FAIL_COND(p_points.size() < 2);
|
||||||
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
||||||
ERR_FAIL_COND(!canvas_item);
|
ERR_FAIL_COND(!canvas_item);
|
||||||
@ -696,7 +696,7 @@ void RenderingServerCanvas::canvas_item_add_multiline(RID p_item, const Vector<P
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerCanvas::canvas_item_add_rect(RID p_item, const Rect2 &p_rect, const Color &p_color) {
|
void RendererCanvasCull::canvas_item_add_rect(RID p_item, const Rect2 &p_rect, const Color &p_color) {
|
||||||
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
||||||
ERR_FAIL_COND(!canvas_item);
|
ERR_FAIL_COND(!canvas_item);
|
||||||
|
|
||||||
@ -706,7 +706,7 @@ void RenderingServerCanvas::canvas_item_add_rect(RID p_item, const Rect2 &p_rect
|
|||||||
rect->rect = p_rect;
|
rect->rect = p_rect;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerCanvas::canvas_item_add_circle(RID p_item, const Point2 &p_pos, float p_radius, const Color &p_color) {
|
void RendererCanvasCull::canvas_item_add_circle(RID p_item, const Point2 &p_pos, float p_radius, const Color &p_color) {
|
||||||
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
||||||
ERR_FAIL_COND(!canvas_item);
|
ERR_FAIL_COND(!canvas_item);
|
||||||
|
|
||||||
@ -740,7 +740,7 @@ void RenderingServerCanvas::canvas_item_add_circle(RID p_item, const Point2 &p_p
|
|||||||
circle->polygon.create(indices, points, color);
|
circle->polygon.create(indices, points, color);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerCanvas::canvas_item_add_texture_rect(RID p_item, const Rect2 &p_rect, RID p_texture, bool p_tile, const Color &p_modulate, bool p_transpose) {
|
void RendererCanvasCull::canvas_item_add_texture_rect(RID p_item, const Rect2 &p_rect, RID p_texture, bool p_tile, const Color &p_modulate, bool p_transpose) {
|
||||||
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
||||||
ERR_FAIL_COND(!canvas_item);
|
ERR_FAIL_COND(!canvas_item);
|
||||||
|
|
||||||
@ -750,28 +750,28 @@ void RenderingServerCanvas::canvas_item_add_texture_rect(RID p_item, const Rect2
|
|||||||
rect->rect = p_rect;
|
rect->rect = p_rect;
|
||||||
rect->flags = 0;
|
rect->flags = 0;
|
||||||
if (p_tile) {
|
if (p_tile) {
|
||||||
rect->flags |= RasterizerCanvas::CANVAS_RECT_TILE;
|
rect->flags |= RendererCanvasRender::CANVAS_RECT_TILE;
|
||||||
rect->flags |= RasterizerCanvas::CANVAS_RECT_REGION;
|
rect->flags |= RendererCanvasRender::CANVAS_RECT_REGION;
|
||||||
rect->source = Rect2(0, 0, fabsf(p_rect.size.width), fabsf(p_rect.size.height));
|
rect->source = Rect2(0, 0, fabsf(p_rect.size.width), fabsf(p_rect.size.height));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (p_rect.size.x < 0) {
|
if (p_rect.size.x < 0) {
|
||||||
rect->flags |= RasterizerCanvas::CANVAS_RECT_FLIP_H;
|
rect->flags |= RendererCanvasRender::CANVAS_RECT_FLIP_H;
|
||||||
rect->rect.size.x = -rect->rect.size.x;
|
rect->rect.size.x = -rect->rect.size.x;
|
||||||
}
|
}
|
||||||
if (p_rect.size.y < 0) {
|
if (p_rect.size.y < 0) {
|
||||||
rect->flags |= RasterizerCanvas::CANVAS_RECT_FLIP_V;
|
rect->flags |= RendererCanvasRender::CANVAS_RECT_FLIP_V;
|
||||||
rect->rect.size.y = -rect->rect.size.y;
|
rect->rect.size.y = -rect->rect.size.y;
|
||||||
}
|
}
|
||||||
if (p_transpose) {
|
if (p_transpose) {
|
||||||
rect->flags |= RasterizerCanvas::CANVAS_RECT_TRANSPOSE;
|
rect->flags |= RendererCanvasRender::CANVAS_RECT_TRANSPOSE;
|
||||||
SWAP(rect->rect.size.x, rect->rect.size.y);
|
SWAP(rect->rect.size.x, rect->rect.size.y);
|
||||||
}
|
}
|
||||||
|
|
||||||
rect->texture = p_texture;
|
rect->texture = p_texture;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerCanvas::canvas_item_add_texture_rect_region(RID p_item, const Rect2 &p_rect, RID p_texture, const Rect2 &p_src_rect, const Color &p_modulate, bool p_transpose, bool p_clip_uv) {
|
void RendererCanvasCull::canvas_item_add_texture_rect_region(RID p_item, const Rect2 &p_rect, RID p_texture, const Rect2 &p_src_rect, const Color &p_modulate, bool p_transpose, bool p_clip_uv) {
|
||||||
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
||||||
ERR_FAIL_COND(!canvas_item);
|
ERR_FAIL_COND(!canvas_item);
|
||||||
|
|
||||||
@ -783,36 +783,36 @@ void RenderingServerCanvas::canvas_item_add_texture_rect_region(RID p_item, cons
|
|||||||
rect->texture = p_texture;
|
rect->texture = p_texture;
|
||||||
|
|
||||||
rect->source = p_src_rect;
|
rect->source = p_src_rect;
|
||||||
rect->flags = RasterizerCanvas::CANVAS_RECT_REGION;
|
rect->flags = RendererCanvasRender::CANVAS_RECT_REGION;
|
||||||
|
|
||||||
if (p_rect.size.x < 0) {
|
if (p_rect.size.x < 0) {
|
||||||
rect->flags |= RasterizerCanvas::CANVAS_RECT_FLIP_H;
|
rect->flags |= RendererCanvasRender::CANVAS_RECT_FLIP_H;
|
||||||
rect->rect.size.x = -rect->rect.size.x;
|
rect->rect.size.x = -rect->rect.size.x;
|
||||||
}
|
}
|
||||||
if (p_src_rect.size.x < 0) {
|
if (p_src_rect.size.x < 0) {
|
||||||
rect->flags ^= RasterizerCanvas::CANVAS_RECT_FLIP_H;
|
rect->flags ^= RendererCanvasRender::CANVAS_RECT_FLIP_H;
|
||||||
rect->source.size.x = -rect->source.size.x;
|
rect->source.size.x = -rect->source.size.x;
|
||||||
}
|
}
|
||||||
if (p_rect.size.y < 0) {
|
if (p_rect.size.y < 0) {
|
||||||
rect->flags |= RasterizerCanvas::CANVAS_RECT_FLIP_V;
|
rect->flags |= RendererCanvasRender::CANVAS_RECT_FLIP_V;
|
||||||
rect->rect.size.y = -rect->rect.size.y;
|
rect->rect.size.y = -rect->rect.size.y;
|
||||||
}
|
}
|
||||||
if (p_src_rect.size.y < 0) {
|
if (p_src_rect.size.y < 0) {
|
||||||
rect->flags ^= RasterizerCanvas::CANVAS_RECT_FLIP_V;
|
rect->flags ^= RendererCanvasRender::CANVAS_RECT_FLIP_V;
|
||||||
rect->source.size.y = -rect->source.size.y;
|
rect->source.size.y = -rect->source.size.y;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (p_transpose) {
|
if (p_transpose) {
|
||||||
rect->flags |= RasterizerCanvas::CANVAS_RECT_TRANSPOSE;
|
rect->flags |= RendererCanvasRender::CANVAS_RECT_TRANSPOSE;
|
||||||
SWAP(rect->rect.size.x, rect->rect.size.y);
|
SWAP(rect->rect.size.x, rect->rect.size.y);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (p_clip_uv) {
|
if (p_clip_uv) {
|
||||||
rect->flags |= RasterizerCanvas::CANVAS_RECT_CLIP_UV;
|
rect->flags |= RendererCanvasRender::CANVAS_RECT_CLIP_UV;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerCanvas::canvas_item_add_nine_patch(RID p_item, const Rect2 &p_rect, const Rect2 &p_source, RID p_texture, const Vector2 &p_topleft, const Vector2 &p_bottomright, RS::NinePatchAxisMode p_x_axis_mode, RS::NinePatchAxisMode p_y_axis_mode, bool p_draw_center, const Color &p_modulate) {
|
void RendererCanvasCull::canvas_item_add_nine_patch(RID p_item, const Rect2 &p_rect, const Rect2 &p_source, RID p_texture, const Vector2 &p_topleft, const Vector2 &p_bottomright, RS::NinePatchAxisMode p_x_axis_mode, RS::NinePatchAxisMode p_y_axis_mode, bool p_draw_center, const Color &p_modulate) {
|
||||||
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
||||||
ERR_FAIL_COND(!canvas_item);
|
ERR_FAIL_COND(!canvas_item);
|
||||||
|
|
||||||
@ -833,7 +833,7 @@ void RenderingServerCanvas::canvas_item_add_nine_patch(RID p_item, const Rect2 &
|
|||||||
style->axis_y = p_y_axis_mode;
|
style->axis_y = p_y_axis_mode;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerCanvas::canvas_item_add_primitive(RID p_item, const Vector<Point2> &p_points, const Vector<Color> &p_colors, const Vector<Point2> &p_uvs, RID p_texture, float p_width) {
|
void RendererCanvasCull::canvas_item_add_primitive(RID p_item, const Vector<Point2> &p_points, const Vector<Color> &p_colors, const Vector<Point2> &p_uvs, RID p_texture, float p_width) {
|
||||||
uint32_t pc = p_points.size();
|
uint32_t pc = p_points.size();
|
||||||
ERR_FAIL_COND(pc == 0 || pc > 4);
|
ERR_FAIL_COND(pc == 0 || pc > 4);
|
||||||
|
|
||||||
@ -862,7 +862,7 @@ void RenderingServerCanvas::canvas_item_add_primitive(RID p_item, const Vector<P
|
|||||||
prim->texture = p_texture;
|
prim->texture = p_texture;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerCanvas::canvas_item_add_polygon(RID p_item, const Vector<Point2> &p_points, const Vector<Color> &p_colors, const Vector<Point2> &p_uvs, RID p_texture) {
|
void RendererCanvasCull::canvas_item_add_polygon(RID p_item, const Vector<Point2> &p_points, const Vector<Color> &p_colors, const Vector<Point2> &p_uvs, RID p_texture) {
|
||||||
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
||||||
ERR_FAIL_COND(!canvas_item);
|
ERR_FAIL_COND(!canvas_item);
|
||||||
#ifdef DEBUG_ENABLED
|
#ifdef DEBUG_ENABLED
|
||||||
@ -883,7 +883,7 @@ void RenderingServerCanvas::canvas_item_add_polygon(RID p_item, const Vector<Poi
|
|||||||
polygon->polygon.create(indices, p_points, p_colors, p_uvs);
|
polygon->polygon.create(indices, p_points, p_colors, p_uvs);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerCanvas::canvas_item_add_triangle_array(RID p_item, const Vector<int> &p_indices, const Vector<Point2> &p_points, const Vector<Color> &p_colors, const Vector<Point2> &p_uvs, const Vector<int> &p_bones, const Vector<float> &p_weights, RID p_texture, int p_count) {
|
void RendererCanvasCull::canvas_item_add_triangle_array(RID p_item, const Vector<int> &p_indices, const Vector<Point2> &p_points, const Vector<Color> &p_colors, const Vector<Point2> &p_uvs, const Vector<int> &p_bones, const Vector<float> &p_weights, RID p_texture, int p_count) {
|
||||||
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
||||||
ERR_FAIL_COND(!canvas_item);
|
ERR_FAIL_COND(!canvas_item);
|
||||||
|
|
||||||
@ -906,7 +906,7 @@ void RenderingServerCanvas::canvas_item_add_triangle_array(RID p_item, const Vec
|
|||||||
polygon->primitive = RS::PRIMITIVE_TRIANGLES;
|
polygon->primitive = RS::PRIMITIVE_TRIANGLES;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerCanvas::canvas_item_add_set_transform(RID p_item, const Transform2D &p_transform) {
|
void RendererCanvasCull::canvas_item_add_set_transform(RID p_item, const Transform2D &p_transform) {
|
||||||
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
||||||
ERR_FAIL_COND(!canvas_item);
|
ERR_FAIL_COND(!canvas_item);
|
||||||
|
|
||||||
@ -915,7 +915,7 @@ void RenderingServerCanvas::canvas_item_add_set_transform(RID p_item, const Tran
|
|||||||
tr->xform = p_transform;
|
tr->xform = p_transform;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerCanvas::canvas_item_add_mesh(RID p_item, const RID &p_mesh, const Transform2D &p_transform, const Color &p_modulate, RID p_texture) {
|
void RendererCanvasCull::canvas_item_add_mesh(RID p_item, const RID &p_mesh, const Transform2D &p_transform, const Color &p_modulate, RID p_texture) {
|
||||||
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
||||||
ERR_FAIL_COND(!canvas_item);
|
ERR_FAIL_COND(!canvas_item);
|
||||||
|
|
||||||
@ -929,7 +929,7 @@ void RenderingServerCanvas::canvas_item_add_mesh(RID p_item, const RID &p_mesh,
|
|||||||
m->modulate = p_modulate;
|
m->modulate = p_modulate;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerCanvas::canvas_item_add_particles(RID p_item, RID p_particles, RID p_texture) {
|
void RendererCanvasCull::canvas_item_add_particles(RID p_item, RID p_particles, RID p_texture) {
|
||||||
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
||||||
ERR_FAIL_COND(!canvas_item);
|
ERR_FAIL_COND(!canvas_item);
|
||||||
|
|
||||||
@ -943,7 +943,7 @@ void RenderingServerCanvas::canvas_item_add_particles(RID p_item, RID p_particle
|
|||||||
RSG::storage->particles_request_process(p_particles);
|
RSG::storage->particles_request_process(p_particles);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerCanvas::canvas_item_add_multimesh(RID p_item, RID p_mesh, RID p_texture) {
|
void RendererCanvasCull::canvas_item_add_multimesh(RID p_item, RID p_mesh, RID p_texture) {
|
||||||
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
||||||
ERR_FAIL_COND(!canvas_item);
|
ERR_FAIL_COND(!canvas_item);
|
||||||
|
|
||||||
@ -954,7 +954,7 @@ void RenderingServerCanvas::canvas_item_add_multimesh(RID p_item, RID p_mesh, RI
|
|||||||
mm->texture = p_texture;
|
mm->texture = p_texture;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerCanvas::canvas_item_add_clip_ignore(RID p_item, bool p_ignore) {
|
void RendererCanvasCull::canvas_item_add_clip_ignore(RID p_item, bool p_ignore) {
|
||||||
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
||||||
ERR_FAIL_COND(!canvas_item);
|
ERR_FAIL_COND(!canvas_item);
|
||||||
|
|
||||||
@ -963,7 +963,7 @@ void RenderingServerCanvas::canvas_item_add_clip_ignore(RID p_item, bool p_ignor
|
|||||||
ci->ignore = p_ignore;
|
ci->ignore = p_ignore;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerCanvas::canvas_item_set_sort_children_by_y(RID p_item, bool p_enable) {
|
void RendererCanvasCull::canvas_item_set_sort_children_by_y(RID p_item, bool p_enable) {
|
||||||
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
||||||
ERR_FAIL_COND(!canvas_item);
|
ERR_FAIL_COND(!canvas_item);
|
||||||
|
|
||||||
@ -972,7 +972,7 @@ void RenderingServerCanvas::canvas_item_set_sort_children_by_y(RID p_item, bool
|
|||||||
_mark_ysort_dirty(canvas_item, canvas_item_owner);
|
_mark_ysort_dirty(canvas_item, canvas_item_owner);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerCanvas::canvas_item_set_z_index(RID p_item, int p_z) {
|
void RendererCanvasCull::canvas_item_set_z_index(RID p_item, int p_z) {
|
||||||
ERR_FAIL_COND(p_z < RS::CANVAS_ITEM_Z_MIN || p_z > RS::CANVAS_ITEM_Z_MAX);
|
ERR_FAIL_COND(p_z < RS::CANVAS_ITEM_Z_MIN || p_z > RS::CANVAS_ITEM_Z_MAX);
|
||||||
|
|
||||||
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
||||||
@ -981,25 +981,25 @@ void RenderingServerCanvas::canvas_item_set_z_index(RID p_item, int p_z) {
|
|||||||
canvas_item->z_index = p_z;
|
canvas_item->z_index = p_z;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerCanvas::canvas_item_set_z_as_relative_to_parent(RID p_item, bool p_enable) {
|
void RendererCanvasCull::canvas_item_set_z_as_relative_to_parent(RID p_item, bool p_enable) {
|
||||||
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
||||||
ERR_FAIL_COND(!canvas_item);
|
ERR_FAIL_COND(!canvas_item);
|
||||||
|
|
||||||
canvas_item->z_relative = p_enable;
|
canvas_item->z_relative = p_enable;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerCanvas::canvas_item_attach_skeleton(RID p_item, RID p_skeleton) {
|
void RendererCanvasCull::canvas_item_attach_skeleton(RID p_item, RID p_skeleton) {
|
||||||
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
||||||
ERR_FAIL_COND(!canvas_item);
|
ERR_FAIL_COND(!canvas_item);
|
||||||
|
|
||||||
canvas_item->skeleton = p_skeleton;
|
canvas_item->skeleton = p_skeleton;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerCanvas::canvas_item_set_copy_to_backbuffer(RID p_item, bool p_enable, const Rect2 &p_rect) {
|
void RendererCanvasCull::canvas_item_set_copy_to_backbuffer(RID p_item, bool p_enable, const Rect2 &p_rect) {
|
||||||
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
||||||
ERR_FAIL_COND(!canvas_item);
|
ERR_FAIL_COND(!canvas_item);
|
||||||
if (p_enable && (canvas_item->copy_back_buffer == nullptr)) {
|
if (p_enable && (canvas_item->copy_back_buffer == nullptr)) {
|
||||||
canvas_item->copy_back_buffer = memnew(RasterizerCanvas::Item::CopyBackBuffer);
|
canvas_item->copy_back_buffer = memnew(RendererCanvasRender::Item::CopyBackBuffer);
|
||||||
}
|
}
|
||||||
if (!p_enable && (canvas_item->copy_back_buffer != nullptr)) {
|
if (!p_enable && (canvas_item->copy_back_buffer != nullptr)) {
|
||||||
memdelete(canvas_item->copy_back_buffer);
|
memdelete(canvas_item->copy_back_buffer);
|
||||||
@ -1012,14 +1012,14 @@ void RenderingServerCanvas::canvas_item_set_copy_to_backbuffer(RID p_item, bool
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerCanvas::canvas_item_clear(RID p_item) {
|
void RendererCanvasCull::canvas_item_clear(RID p_item) {
|
||||||
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
||||||
ERR_FAIL_COND(!canvas_item);
|
ERR_FAIL_COND(!canvas_item);
|
||||||
|
|
||||||
canvas_item->clear();
|
canvas_item->clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerCanvas::canvas_item_set_draw_index(RID p_item, int p_index) {
|
void RendererCanvasCull::canvas_item_set_draw_index(RID p_item, int p_index) {
|
||||||
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
||||||
ERR_FAIL_COND(!canvas_item);
|
ERR_FAIL_COND(!canvas_item);
|
||||||
|
|
||||||
@ -1038,21 +1038,21 @@ void RenderingServerCanvas::canvas_item_set_draw_index(RID p_item, int p_index)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerCanvas::canvas_item_set_material(RID p_item, RID p_material) {
|
void RendererCanvasCull::canvas_item_set_material(RID p_item, RID p_material) {
|
||||||
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
||||||
ERR_FAIL_COND(!canvas_item);
|
ERR_FAIL_COND(!canvas_item);
|
||||||
|
|
||||||
canvas_item->material = p_material;
|
canvas_item->material = p_material;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerCanvas::canvas_item_set_use_parent_material(RID p_item, bool p_enable) {
|
void RendererCanvasCull::canvas_item_set_use_parent_material(RID p_item, bool p_enable) {
|
||||||
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
||||||
ERR_FAIL_COND(!canvas_item);
|
ERR_FAIL_COND(!canvas_item);
|
||||||
|
|
||||||
canvas_item->use_parent_material = p_enable;
|
canvas_item->use_parent_material = p_enable;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerCanvas::canvas_item_set_canvas_group_mode(RID p_item, RS::CanvasGroupMode p_mode, float p_clear_margin, bool p_fit_empty, float p_fit_margin, bool p_blur_mipmaps) {
|
void RendererCanvasCull::canvas_item_set_canvas_group_mode(RID p_item, RS::CanvasGroupMode p_mode, float p_clear_margin, bool p_fit_empty, float p_fit_margin, bool p_blur_mipmaps) {
|
||||||
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
Item *canvas_item = canvas_item_owner.getornull(p_item);
|
||||||
ERR_FAIL_COND(!canvas_item);
|
ERR_FAIL_COND(!canvas_item);
|
||||||
|
|
||||||
@ -1063,7 +1063,7 @@ void RenderingServerCanvas::canvas_item_set_canvas_group_mode(RID p_item, RS::Ca
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (canvas_item->canvas_group == nullptr) {
|
if (canvas_item->canvas_group == nullptr) {
|
||||||
canvas_item->canvas_group = memnew(RasterizerCanvas::Item::CanvasGroup);
|
canvas_item->canvas_group = memnew(RendererCanvasRender::Item::CanvasGroup);
|
||||||
}
|
}
|
||||||
canvas_item->canvas_group->mode = p_mode;
|
canvas_item->canvas_group->mode = p_mode;
|
||||||
canvas_item->canvas_group->fit_empty = p_fit_empty;
|
canvas_item->canvas_group->fit_empty = p_fit_empty;
|
||||||
@ -1073,14 +1073,14 @@ void RenderingServerCanvas::canvas_item_set_canvas_group_mode(RID p_item, RS::Ca
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
RID RenderingServerCanvas::canvas_light_create() {
|
RID RendererCanvasCull::canvas_light_create() {
|
||||||
RasterizerCanvas::Light *clight = memnew(RasterizerCanvas::Light);
|
RendererCanvasRender::Light *clight = memnew(RendererCanvasRender::Light);
|
||||||
clight->light_internal = RSG::canvas_render->light_create();
|
clight->light_internal = RSG::canvas_render->light_create();
|
||||||
return canvas_light_owner.make_rid(clight);
|
return canvas_light_owner.make_rid(clight);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerCanvas::canvas_light_set_mode(RID p_light, RS::CanvasLightMode p_mode) {
|
void RendererCanvasCull::canvas_light_set_mode(RID p_light, RS::CanvasLightMode p_mode) {
|
||||||
RasterizerCanvas::Light *clight = canvas_light_owner.getornull(p_light);
|
RendererCanvasRender::Light *clight = canvas_light_owner.getornull(p_light);
|
||||||
ERR_FAIL_COND(!clight);
|
ERR_FAIL_COND(!clight);
|
||||||
|
|
||||||
if (clight->mode == p_mode) {
|
if (clight->mode == p_mode) {
|
||||||
@ -1100,8 +1100,8 @@ void RenderingServerCanvas::canvas_light_set_mode(RID p_light, RS::CanvasLightMo
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerCanvas::canvas_light_attach_to_canvas(RID p_light, RID p_canvas) {
|
void RendererCanvasCull::canvas_light_attach_to_canvas(RID p_light, RID p_canvas) {
|
||||||
RasterizerCanvas::Light *clight = canvas_light_owner.getornull(p_light);
|
RendererCanvasRender::Light *clight = canvas_light_owner.getornull(p_light);
|
||||||
ERR_FAIL_COND(!clight);
|
ERR_FAIL_COND(!clight);
|
||||||
|
|
||||||
if (clight->canvas.is_valid()) {
|
if (clight->canvas.is_valid()) {
|
||||||
@ -1129,29 +1129,29 @@ void RenderingServerCanvas::canvas_light_attach_to_canvas(RID p_light, RID p_can
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerCanvas::canvas_light_set_enabled(RID p_light, bool p_enabled) {
|
void RendererCanvasCull::canvas_light_set_enabled(RID p_light, bool p_enabled) {
|
||||||
RasterizerCanvas::Light *clight = canvas_light_owner.getornull(p_light);
|
RendererCanvasRender::Light *clight = canvas_light_owner.getornull(p_light);
|
||||||
ERR_FAIL_COND(!clight);
|
ERR_FAIL_COND(!clight);
|
||||||
|
|
||||||
clight->enabled = p_enabled;
|
clight->enabled = p_enabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerCanvas::canvas_light_set_texture_scale(RID p_light, float p_scale) {
|
void RendererCanvasCull::canvas_light_set_texture_scale(RID p_light, float p_scale) {
|
||||||
RasterizerCanvas::Light *clight = canvas_light_owner.getornull(p_light);
|
RendererCanvasRender::Light *clight = canvas_light_owner.getornull(p_light);
|
||||||
ERR_FAIL_COND(!clight);
|
ERR_FAIL_COND(!clight);
|
||||||
|
|
||||||
clight->scale = p_scale;
|
clight->scale = p_scale;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerCanvas::canvas_light_set_transform(RID p_light, const Transform2D &p_transform) {
|
void RendererCanvasCull::canvas_light_set_transform(RID p_light, const Transform2D &p_transform) {
|
||||||
RasterizerCanvas::Light *clight = canvas_light_owner.getornull(p_light);
|
RendererCanvasRender::Light *clight = canvas_light_owner.getornull(p_light);
|
||||||
ERR_FAIL_COND(!clight);
|
ERR_FAIL_COND(!clight);
|
||||||
|
|
||||||
clight->xform = p_transform;
|
clight->xform = p_transform;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerCanvas::canvas_light_set_texture(RID p_light, RID p_texture) {
|
void RendererCanvasCull::canvas_light_set_texture(RID p_light, RID p_texture) {
|
||||||
RasterizerCanvas::Light *clight = canvas_light_owner.getornull(p_light);
|
RendererCanvasRender::Light *clight = canvas_light_owner.getornull(p_light);
|
||||||
ERR_FAIL_COND(!clight);
|
ERR_FAIL_COND(!clight);
|
||||||
|
|
||||||
if (clight->texture == p_texture) {
|
if (clight->texture == p_texture) {
|
||||||
@ -1162,80 +1162,80 @@ void RenderingServerCanvas::canvas_light_set_texture(RID p_light, RID p_texture)
|
|||||||
RSG::canvas_render->light_set_texture(clight->light_internal, p_texture);
|
RSG::canvas_render->light_set_texture(clight->light_internal, p_texture);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerCanvas::canvas_light_set_texture_offset(RID p_light, const Vector2 &p_offset) {
|
void RendererCanvasCull::canvas_light_set_texture_offset(RID p_light, const Vector2 &p_offset) {
|
||||||
RasterizerCanvas::Light *clight = canvas_light_owner.getornull(p_light);
|
RendererCanvasRender::Light *clight = canvas_light_owner.getornull(p_light);
|
||||||
ERR_FAIL_COND(!clight);
|
ERR_FAIL_COND(!clight);
|
||||||
|
|
||||||
clight->texture_offset = p_offset;
|
clight->texture_offset = p_offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerCanvas::canvas_light_set_color(RID p_light, const Color &p_color) {
|
void RendererCanvasCull::canvas_light_set_color(RID p_light, const Color &p_color) {
|
||||||
RasterizerCanvas::Light *clight = canvas_light_owner.getornull(p_light);
|
RendererCanvasRender::Light *clight = canvas_light_owner.getornull(p_light);
|
||||||
ERR_FAIL_COND(!clight);
|
ERR_FAIL_COND(!clight);
|
||||||
|
|
||||||
clight->color = p_color;
|
clight->color = p_color;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerCanvas::canvas_light_set_height(RID p_light, float p_height) {
|
void RendererCanvasCull::canvas_light_set_height(RID p_light, float p_height) {
|
||||||
RasterizerCanvas::Light *clight = canvas_light_owner.getornull(p_light);
|
RendererCanvasRender::Light *clight = canvas_light_owner.getornull(p_light);
|
||||||
ERR_FAIL_COND(!clight);
|
ERR_FAIL_COND(!clight);
|
||||||
|
|
||||||
clight->height = p_height;
|
clight->height = p_height;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerCanvas::canvas_light_set_energy(RID p_light, float p_energy) {
|
void RendererCanvasCull::canvas_light_set_energy(RID p_light, float p_energy) {
|
||||||
RasterizerCanvas::Light *clight = canvas_light_owner.getornull(p_light);
|
RendererCanvasRender::Light *clight = canvas_light_owner.getornull(p_light);
|
||||||
ERR_FAIL_COND(!clight);
|
ERR_FAIL_COND(!clight);
|
||||||
|
|
||||||
clight->energy = p_energy;
|
clight->energy = p_energy;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerCanvas::canvas_light_set_z_range(RID p_light, int p_min_z, int p_max_z) {
|
void RendererCanvasCull::canvas_light_set_z_range(RID p_light, int p_min_z, int p_max_z) {
|
||||||
RasterizerCanvas::Light *clight = canvas_light_owner.getornull(p_light);
|
RendererCanvasRender::Light *clight = canvas_light_owner.getornull(p_light);
|
||||||
ERR_FAIL_COND(!clight);
|
ERR_FAIL_COND(!clight);
|
||||||
|
|
||||||
clight->z_min = p_min_z;
|
clight->z_min = p_min_z;
|
||||||
clight->z_max = p_max_z;
|
clight->z_max = p_max_z;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerCanvas::canvas_light_set_layer_range(RID p_light, int p_min_layer, int p_max_layer) {
|
void RendererCanvasCull::canvas_light_set_layer_range(RID p_light, int p_min_layer, int p_max_layer) {
|
||||||
RasterizerCanvas::Light *clight = canvas_light_owner.getornull(p_light);
|
RendererCanvasRender::Light *clight = canvas_light_owner.getornull(p_light);
|
||||||
ERR_FAIL_COND(!clight);
|
ERR_FAIL_COND(!clight);
|
||||||
|
|
||||||
clight->layer_max = p_max_layer;
|
clight->layer_max = p_max_layer;
|
||||||
clight->layer_min = p_min_layer;
|
clight->layer_min = p_min_layer;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerCanvas::canvas_light_set_item_cull_mask(RID p_light, int p_mask) {
|
void RendererCanvasCull::canvas_light_set_item_cull_mask(RID p_light, int p_mask) {
|
||||||
RasterizerCanvas::Light *clight = canvas_light_owner.getornull(p_light);
|
RendererCanvasRender::Light *clight = canvas_light_owner.getornull(p_light);
|
||||||
ERR_FAIL_COND(!clight);
|
ERR_FAIL_COND(!clight);
|
||||||
|
|
||||||
clight->item_mask = p_mask;
|
clight->item_mask = p_mask;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerCanvas::canvas_light_set_item_shadow_cull_mask(RID p_light, int p_mask) {
|
void RendererCanvasCull::canvas_light_set_item_shadow_cull_mask(RID p_light, int p_mask) {
|
||||||
RasterizerCanvas::Light *clight = canvas_light_owner.getornull(p_light);
|
RendererCanvasRender::Light *clight = canvas_light_owner.getornull(p_light);
|
||||||
ERR_FAIL_COND(!clight);
|
ERR_FAIL_COND(!clight);
|
||||||
|
|
||||||
clight->item_shadow_mask = p_mask;
|
clight->item_shadow_mask = p_mask;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerCanvas::canvas_light_set_directional_distance(RID p_light, float p_distance) {
|
void RendererCanvasCull::canvas_light_set_directional_distance(RID p_light, float p_distance) {
|
||||||
RasterizerCanvas::Light *clight = canvas_light_owner.getornull(p_light);
|
RendererCanvasRender::Light *clight = canvas_light_owner.getornull(p_light);
|
||||||
ERR_FAIL_COND(!clight);
|
ERR_FAIL_COND(!clight);
|
||||||
|
|
||||||
clight->directional_distance = p_distance;
|
clight->directional_distance = p_distance;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerCanvas::canvas_light_set_blend_mode(RID p_light, RS::CanvasLightBlendMode p_mode) {
|
void RendererCanvasCull::canvas_light_set_blend_mode(RID p_light, RS::CanvasLightBlendMode p_mode) {
|
||||||
RasterizerCanvas::Light *clight = canvas_light_owner.getornull(p_light);
|
RendererCanvasRender::Light *clight = canvas_light_owner.getornull(p_light);
|
||||||
ERR_FAIL_COND(!clight);
|
ERR_FAIL_COND(!clight);
|
||||||
|
|
||||||
clight->blend_mode = p_mode;
|
clight->blend_mode = p_mode;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerCanvas::canvas_light_set_shadow_enabled(RID p_light, bool p_enabled) {
|
void RendererCanvasCull::canvas_light_set_shadow_enabled(RID p_light, bool p_enabled) {
|
||||||
RasterizerCanvas::Light *clight = canvas_light_owner.getornull(p_light);
|
RendererCanvasRender::Light *clight = canvas_light_owner.getornull(p_light);
|
||||||
ERR_FAIL_COND(!clight);
|
ERR_FAIL_COND(!clight);
|
||||||
|
|
||||||
if (clight->use_shadow == p_enabled) {
|
if (clight->use_shadow == p_enabled) {
|
||||||
@ -1246,34 +1246,34 @@ void RenderingServerCanvas::canvas_light_set_shadow_enabled(RID p_light, bool p_
|
|||||||
RSG::canvas_render->light_set_use_shadow(clight->light_internal, clight->use_shadow);
|
RSG::canvas_render->light_set_use_shadow(clight->light_internal, clight->use_shadow);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerCanvas::canvas_light_set_shadow_filter(RID p_light, RS::CanvasLightShadowFilter p_filter) {
|
void RendererCanvasCull::canvas_light_set_shadow_filter(RID p_light, RS::CanvasLightShadowFilter p_filter) {
|
||||||
RasterizerCanvas::Light *clight = canvas_light_owner.getornull(p_light);
|
RendererCanvasRender::Light *clight = canvas_light_owner.getornull(p_light);
|
||||||
ERR_FAIL_COND(!clight);
|
ERR_FAIL_COND(!clight);
|
||||||
|
|
||||||
clight->shadow_filter = p_filter;
|
clight->shadow_filter = p_filter;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerCanvas::canvas_light_set_shadow_color(RID p_light, const Color &p_color) {
|
void RendererCanvasCull::canvas_light_set_shadow_color(RID p_light, const Color &p_color) {
|
||||||
RasterizerCanvas::Light *clight = canvas_light_owner.getornull(p_light);
|
RendererCanvasRender::Light *clight = canvas_light_owner.getornull(p_light);
|
||||||
ERR_FAIL_COND(!clight);
|
ERR_FAIL_COND(!clight);
|
||||||
|
|
||||||
clight->shadow_color = p_color;
|
clight->shadow_color = p_color;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerCanvas::canvas_light_set_shadow_smooth(RID p_light, float p_smooth) {
|
void RendererCanvasCull::canvas_light_set_shadow_smooth(RID p_light, float p_smooth) {
|
||||||
RasterizerCanvas::Light *clight = canvas_light_owner.getornull(p_light);
|
RendererCanvasRender::Light *clight = canvas_light_owner.getornull(p_light);
|
||||||
ERR_FAIL_COND(!clight);
|
ERR_FAIL_COND(!clight);
|
||||||
clight->shadow_smooth = p_smooth;
|
clight->shadow_smooth = p_smooth;
|
||||||
}
|
}
|
||||||
|
|
||||||
RID RenderingServerCanvas::canvas_light_occluder_create() {
|
RID RendererCanvasCull::canvas_light_occluder_create() {
|
||||||
RasterizerCanvas::LightOccluderInstance *occluder = memnew(RasterizerCanvas::LightOccluderInstance);
|
RendererCanvasRender::LightOccluderInstance *occluder = memnew(RendererCanvasRender::LightOccluderInstance);
|
||||||
|
|
||||||
return canvas_light_occluder_owner.make_rid(occluder);
|
return canvas_light_occluder_owner.make_rid(occluder);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerCanvas::canvas_light_occluder_attach_to_canvas(RID p_occluder, RID p_canvas) {
|
void RendererCanvasCull::canvas_light_occluder_attach_to_canvas(RID p_occluder, RID p_canvas) {
|
||||||
RasterizerCanvas::LightOccluderInstance *occluder = canvas_light_occluder_owner.getornull(p_occluder);
|
RendererCanvasRender::LightOccluderInstance *occluder = canvas_light_occluder_owner.getornull(p_occluder);
|
||||||
ERR_FAIL_COND(!occluder);
|
ERR_FAIL_COND(!occluder);
|
||||||
|
|
||||||
if (occluder->canvas.is_valid()) {
|
if (occluder->canvas.is_valid()) {
|
||||||
@ -1293,15 +1293,15 @@ void RenderingServerCanvas::canvas_light_occluder_attach_to_canvas(RID p_occlude
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerCanvas::canvas_light_occluder_set_enabled(RID p_occluder, bool p_enabled) {
|
void RendererCanvasCull::canvas_light_occluder_set_enabled(RID p_occluder, bool p_enabled) {
|
||||||
RasterizerCanvas::LightOccluderInstance *occluder = canvas_light_occluder_owner.getornull(p_occluder);
|
RendererCanvasRender::LightOccluderInstance *occluder = canvas_light_occluder_owner.getornull(p_occluder);
|
||||||
ERR_FAIL_COND(!occluder);
|
ERR_FAIL_COND(!occluder);
|
||||||
|
|
||||||
occluder->enabled = p_enabled;
|
occluder->enabled = p_enabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerCanvas::canvas_light_occluder_set_polygon(RID p_occluder, RID p_polygon) {
|
void RendererCanvasCull::canvas_light_occluder_set_polygon(RID p_occluder, RID p_polygon) {
|
||||||
RasterizerCanvas::LightOccluderInstance *occluder = canvas_light_occluder_owner.getornull(p_occluder);
|
RendererCanvasRender::LightOccluderInstance *occluder = canvas_light_occluder_owner.getornull(p_occluder);
|
||||||
ERR_FAIL_COND(!occluder);
|
ERR_FAIL_COND(!occluder);
|
||||||
|
|
||||||
if (occluder->polygon.is_valid()) {
|
if (occluder->polygon.is_valid()) {
|
||||||
@ -1328,32 +1328,32 @@ void RenderingServerCanvas::canvas_light_occluder_set_polygon(RID p_occluder, RI
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerCanvas::canvas_light_occluder_set_as_sdf_collision(RID p_occluder, bool p_enable) {
|
void RendererCanvasCull::canvas_light_occluder_set_as_sdf_collision(RID p_occluder, bool p_enable) {
|
||||||
RasterizerCanvas::LightOccluderInstance *occluder = canvas_light_occluder_owner.getornull(p_occluder);
|
RendererCanvasRender::LightOccluderInstance *occluder = canvas_light_occluder_owner.getornull(p_occluder);
|
||||||
ERR_FAIL_COND(!occluder);
|
ERR_FAIL_COND(!occluder);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerCanvas::canvas_light_occluder_set_transform(RID p_occluder, const Transform2D &p_xform) {
|
void RendererCanvasCull::canvas_light_occluder_set_transform(RID p_occluder, const Transform2D &p_xform) {
|
||||||
RasterizerCanvas::LightOccluderInstance *occluder = canvas_light_occluder_owner.getornull(p_occluder);
|
RendererCanvasRender::LightOccluderInstance *occluder = canvas_light_occluder_owner.getornull(p_occluder);
|
||||||
ERR_FAIL_COND(!occluder);
|
ERR_FAIL_COND(!occluder);
|
||||||
|
|
||||||
occluder->xform = p_xform;
|
occluder->xform = p_xform;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerCanvas::canvas_light_occluder_set_light_mask(RID p_occluder, int p_mask) {
|
void RendererCanvasCull::canvas_light_occluder_set_light_mask(RID p_occluder, int p_mask) {
|
||||||
RasterizerCanvas::LightOccluderInstance *occluder = canvas_light_occluder_owner.getornull(p_occluder);
|
RendererCanvasRender::LightOccluderInstance *occluder = canvas_light_occluder_owner.getornull(p_occluder);
|
||||||
ERR_FAIL_COND(!occluder);
|
ERR_FAIL_COND(!occluder);
|
||||||
|
|
||||||
occluder->light_mask = p_mask;
|
occluder->light_mask = p_mask;
|
||||||
}
|
}
|
||||||
|
|
||||||
RID RenderingServerCanvas::canvas_occluder_polygon_create() {
|
RID RendererCanvasCull::canvas_occluder_polygon_create() {
|
||||||
LightOccluderPolygon *occluder_poly = memnew(LightOccluderPolygon);
|
LightOccluderPolygon *occluder_poly = memnew(LightOccluderPolygon);
|
||||||
occluder_poly->occluder = RSG::canvas_render->occluder_polygon_create();
|
occluder_poly->occluder = RSG::canvas_render->occluder_polygon_create();
|
||||||
return canvas_light_occluder_polygon_owner.make_rid(occluder_poly);
|
return canvas_light_occluder_polygon_owner.make_rid(occluder_poly);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerCanvas::canvas_occluder_polygon_set_shape(RID p_occluder_polygon, const Vector<Vector2> &p_shape, bool p_closed) {
|
void RendererCanvasCull::canvas_occluder_polygon_set_shape(RID p_occluder_polygon, const Vector<Vector2> &p_shape, bool p_closed) {
|
||||||
LightOccluderPolygon *occluder_poly = canvas_light_occluder_polygon_owner.getornull(p_occluder_polygon);
|
LightOccluderPolygon *occluder_poly = canvas_light_occluder_polygon_owner.getornull(p_occluder_polygon);
|
||||||
ERR_FAIL_COND(!occluder_poly);
|
ERR_FAIL_COND(!occluder_poly);
|
||||||
|
|
||||||
@ -1372,66 +1372,66 @@ void RenderingServerCanvas::canvas_occluder_polygon_set_shape(RID p_occluder_pol
|
|||||||
|
|
||||||
RSG::canvas_render->occluder_polygon_set_shape(occluder_poly->occluder, p_shape, p_closed);
|
RSG::canvas_render->occluder_polygon_set_shape(occluder_poly->occluder, p_shape, p_closed);
|
||||||
|
|
||||||
for (Set<RasterizerCanvas::LightOccluderInstance *>::Element *E = occluder_poly->owners.front(); E; E = E->next()) {
|
for (Set<RendererCanvasRender::LightOccluderInstance *>::Element *E = occluder_poly->owners.front(); E; E = E->next()) {
|
||||||
E->get()->aabb_cache = occluder_poly->aabb;
|
E->get()->aabb_cache = occluder_poly->aabb;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerCanvas::canvas_occluder_polygon_set_cull_mode(RID p_occluder_polygon, RS::CanvasOccluderPolygonCullMode p_mode) {
|
void RendererCanvasCull::canvas_occluder_polygon_set_cull_mode(RID p_occluder_polygon, RS::CanvasOccluderPolygonCullMode p_mode) {
|
||||||
LightOccluderPolygon *occluder_poly = canvas_light_occluder_polygon_owner.getornull(p_occluder_polygon);
|
LightOccluderPolygon *occluder_poly = canvas_light_occluder_polygon_owner.getornull(p_occluder_polygon);
|
||||||
ERR_FAIL_COND(!occluder_poly);
|
ERR_FAIL_COND(!occluder_poly);
|
||||||
occluder_poly->cull_mode = p_mode;
|
occluder_poly->cull_mode = p_mode;
|
||||||
RSG::canvas_render->occluder_polygon_set_cull_mode(occluder_poly->occluder, p_mode);
|
RSG::canvas_render->occluder_polygon_set_cull_mode(occluder_poly->occluder, p_mode);
|
||||||
for (Set<RasterizerCanvas::LightOccluderInstance *>::Element *E = occluder_poly->owners.front(); E; E = E->next()) {
|
for (Set<RendererCanvasRender::LightOccluderInstance *>::Element *E = occluder_poly->owners.front(); E; E = E->next()) {
|
||||||
E->get()->cull_cache = p_mode;
|
E->get()->cull_cache = p_mode;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerCanvas::canvas_set_shadow_texture_size(int p_size) {
|
void RendererCanvasCull::canvas_set_shadow_texture_size(int p_size) {
|
||||||
RSG::canvas_render->set_shadow_texture_size(p_size);
|
RSG::canvas_render->set_shadow_texture_size(p_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
RID RenderingServerCanvas::canvas_texture_create() {
|
RID RendererCanvasCull::canvas_texture_create() {
|
||||||
return RSG::storage->canvas_texture_create();
|
return RSG::storage->canvas_texture_create();
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerCanvas::canvas_texture_set_channel(RID p_canvas_texture, RS::CanvasTextureChannel p_channel, RID p_texture) {
|
void RendererCanvasCull::canvas_texture_set_channel(RID p_canvas_texture, RS::CanvasTextureChannel p_channel, RID p_texture) {
|
||||||
RSG::storage->canvas_texture_set_channel(p_canvas_texture, p_channel, p_texture);
|
RSG::storage->canvas_texture_set_channel(p_canvas_texture, p_channel, p_texture);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerCanvas::canvas_texture_set_shading_parameters(RID p_canvas_texture, const Color &p_base_color, float p_shininess) {
|
void RendererCanvasCull::canvas_texture_set_shading_parameters(RID p_canvas_texture, const Color &p_base_color, float p_shininess) {
|
||||||
RSG::storage->canvas_texture_set_shading_parameters(p_canvas_texture, p_base_color, p_shininess);
|
RSG::storage->canvas_texture_set_shading_parameters(p_canvas_texture, p_base_color, p_shininess);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerCanvas::canvas_texture_set_texture_filter(RID p_canvas_texture, RS::CanvasItemTextureFilter p_filter) {
|
void RendererCanvasCull::canvas_texture_set_texture_filter(RID p_canvas_texture, RS::CanvasItemTextureFilter p_filter) {
|
||||||
RSG::storage->canvas_texture_set_texture_filter(p_canvas_texture, p_filter);
|
RSG::storage->canvas_texture_set_texture_filter(p_canvas_texture, p_filter);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerCanvas::canvas_texture_set_texture_repeat(RID p_canvas_texture, RS::CanvasItemTextureRepeat p_repeat) {
|
void RendererCanvasCull::canvas_texture_set_texture_repeat(RID p_canvas_texture, RS::CanvasItemTextureRepeat p_repeat) {
|
||||||
RSG::storage->canvas_texture_set_texture_repeat(p_canvas_texture, p_repeat);
|
RSG::storage->canvas_texture_set_texture_repeat(p_canvas_texture, p_repeat);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerCanvas::canvas_item_set_default_texture_filter(RID p_item, RS::CanvasItemTextureFilter p_filter) {
|
void RendererCanvasCull::canvas_item_set_default_texture_filter(RID p_item, RS::CanvasItemTextureFilter p_filter) {
|
||||||
Item *ci = canvas_item_owner.getornull(p_item);
|
Item *ci = canvas_item_owner.getornull(p_item);
|
||||||
ERR_FAIL_COND(!ci);
|
ERR_FAIL_COND(!ci);
|
||||||
ci->texture_filter = p_filter;
|
ci->texture_filter = p_filter;
|
||||||
}
|
}
|
||||||
void RenderingServerCanvas::canvas_item_set_default_texture_repeat(RID p_item, RS::CanvasItemTextureRepeat p_repeat) {
|
void RendererCanvasCull::canvas_item_set_default_texture_repeat(RID p_item, RS::CanvasItemTextureRepeat p_repeat) {
|
||||||
Item *ci = canvas_item_owner.getornull(p_item);
|
Item *ci = canvas_item_owner.getornull(p_item);
|
||||||
ERR_FAIL_COND(!ci);
|
ERR_FAIL_COND(!ci);
|
||||||
ci->texture_repeat = p_repeat;
|
ci->texture_repeat = p_repeat;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool RenderingServerCanvas::free(RID p_rid) {
|
bool RendererCanvasCull::free(RID p_rid) {
|
||||||
if (canvas_owner.owns(p_rid)) {
|
if (canvas_owner.owns(p_rid)) {
|
||||||
Canvas *canvas = canvas_owner.getornull(p_rid);
|
Canvas *canvas = canvas_owner.getornull(p_rid);
|
||||||
ERR_FAIL_COND_V(!canvas, false);
|
ERR_FAIL_COND_V(!canvas, false);
|
||||||
|
|
||||||
while (canvas->viewports.size()) {
|
while (canvas->viewports.size()) {
|
||||||
RenderingServerViewport::Viewport *vp = RSG::viewport->viewport_owner.getornull(canvas->viewports.front()->get());
|
RendererViewport::Viewport *vp = RSG::viewport->viewport_owner.getornull(canvas->viewports.front()->get());
|
||||||
ERR_FAIL_COND_V(!vp, true);
|
ERR_FAIL_COND_V(!vp, true);
|
||||||
|
|
||||||
Map<RID, RenderingServerViewport::Viewport::CanvasData>::Element *E = vp->canvas_map.find(p_rid);
|
Map<RID, RendererViewport::Viewport::CanvasData>::Element *E = vp->canvas_map.find(p_rid);
|
||||||
ERR_FAIL_COND_V(!E, true);
|
ERR_FAIL_COND_V(!E, true);
|
||||||
vp->canvas_map.erase(p_rid);
|
vp->canvas_map.erase(p_rid);
|
||||||
|
|
||||||
@ -1442,11 +1442,11 @@ bool RenderingServerCanvas::free(RID p_rid) {
|
|||||||
canvas->child_items[i].item->parent = RID();
|
canvas->child_items[i].item->parent = RID();
|
||||||
}
|
}
|
||||||
|
|
||||||
for (Set<RasterizerCanvas::Light *>::Element *E = canvas->lights.front(); E; E = E->next()) {
|
for (Set<RendererCanvasRender::Light *>::Element *E = canvas->lights.front(); E; E = E->next()) {
|
||||||
E->get()->canvas = RID();
|
E->get()->canvas = RID();
|
||||||
}
|
}
|
||||||
|
|
||||||
for (Set<RasterizerCanvas::LightOccluderInstance *>::Element *E = canvas->occluders.front(); E; E = E->next()) {
|
for (Set<RendererCanvasRender::LightOccluderInstance *>::Element *E = canvas->occluders.front(); E; E = E->next()) {
|
||||||
E->get()->canvas = RID();
|
E->get()->canvas = RID();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1487,7 +1487,7 @@ bool RenderingServerCanvas::free(RID p_rid) {
|
|||||||
memdelete(canvas_item);
|
memdelete(canvas_item);
|
||||||
|
|
||||||
} else if (canvas_light_owner.owns(p_rid)) {
|
} else if (canvas_light_owner.owns(p_rid)) {
|
||||||
RasterizerCanvas::Light *canvas_light = canvas_light_owner.getornull(p_rid);
|
RendererCanvasRender::Light *canvas_light = canvas_light_owner.getornull(p_rid);
|
||||||
ERR_FAIL_COND_V(!canvas_light, true);
|
ERR_FAIL_COND_V(!canvas_light, true);
|
||||||
|
|
||||||
if (canvas_light->canvas.is_valid()) {
|
if (canvas_light->canvas.is_valid()) {
|
||||||
@ -1503,7 +1503,7 @@ bool RenderingServerCanvas::free(RID p_rid) {
|
|||||||
memdelete(canvas_light);
|
memdelete(canvas_light);
|
||||||
|
|
||||||
} else if (canvas_light_occluder_owner.owns(p_rid)) {
|
} else if (canvas_light_occluder_owner.owns(p_rid)) {
|
||||||
RasterizerCanvas::LightOccluderInstance *occluder = canvas_light_occluder_owner.getornull(p_rid);
|
RendererCanvasRender::LightOccluderInstance *occluder = canvas_light_occluder_owner.getornull(p_rid);
|
||||||
ERR_FAIL_COND_V(!occluder, true);
|
ERR_FAIL_COND_V(!occluder, true);
|
||||||
|
|
||||||
if (occluder->polygon.is_valid()) {
|
if (occluder->polygon.is_valid()) {
|
||||||
@ -1540,14 +1540,14 @@ bool RenderingServerCanvas::free(RID p_rid) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
RenderingServerCanvas::RenderingServerCanvas() {
|
RendererCanvasCull::RendererCanvasCull() {
|
||||||
z_list = (RasterizerCanvas::Item **)memalloc(z_range * sizeof(RasterizerCanvas::Item *));
|
z_list = (RendererCanvasRender::Item **)memalloc(z_range * sizeof(RendererCanvasRender::Item *));
|
||||||
z_last_list = (RasterizerCanvas::Item **)memalloc(z_range * sizeof(RasterizerCanvas::Item *));
|
z_last_list = (RendererCanvasRender::Item **)memalloc(z_range * sizeof(RendererCanvasRender::Item *));
|
||||||
|
|
||||||
disable_scale = false;
|
disable_scale = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
RenderingServerCanvas::~RenderingServerCanvas() {
|
RendererCanvasCull::~RendererCanvasCull() {
|
||||||
memfree(z_list);
|
memfree(z_list);
|
||||||
memfree(z_last_list);
|
memfree(z_last_list);
|
||||||
}
|
}
|
@ -1,5 +1,5 @@
|
|||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
/* rendering_server_canvas.h */
|
/* renderer_canvas_cull.h */
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
/* This file is part of: */
|
/* This file is part of: */
|
||||||
/* GODOT ENGINE */
|
/* GODOT ENGINE */
|
||||||
@ -28,15 +28,15 @@
|
|||||||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
|
|
||||||
#ifndef VISUALSERVERCANVAS_H
|
#ifndef RENDERING_SERVER_CANVAS_CULL_H
|
||||||
#define VISUALSERVERCANVAS_H
|
#define RENDERING_SERVER_CANVAS_CULL_H
|
||||||
|
|
||||||
#include "rasterizer.h"
|
#include "renderer_compositor.h"
|
||||||
#include "rendering_server_viewport.h"
|
#include "renderer_viewport.h"
|
||||||
|
|
||||||
class RenderingServerCanvas {
|
class RendererCanvasCull {
|
||||||
public:
|
public:
|
||||||
struct Item : public RasterizerCanvas::Item {
|
struct Item : public RendererCanvasRender::Item {
|
||||||
RID parent; // canvas it belongs to
|
RID parent; // canvas it belongs to
|
||||||
List<Item *>::Element *E;
|
List<Item *>::Element *E;
|
||||||
int z_index;
|
int z_index;
|
||||||
@ -93,7 +93,7 @@ public:
|
|||||||
Rect2 aabb;
|
Rect2 aabb;
|
||||||
RS::CanvasOccluderPolygonCullMode cull_mode;
|
RS::CanvasOccluderPolygonCullMode cull_mode;
|
||||||
RID occluder;
|
RID occluder;
|
||||||
Set<RasterizerCanvas::LightOccluderInstance *> owners;
|
Set<RendererCanvasRender::LightOccluderInstance *> owners;
|
||||||
|
|
||||||
LightOccluderPolygon() {
|
LightOccluderPolygon() {
|
||||||
active = false;
|
active = false;
|
||||||
@ -103,9 +103,9 @@ public:
|
|||||||
|
|
||||||
RID_PtrOwner<LightOccluderPolygon> canvas_light_occluder_polygon_owner;
|
RID_PtrOwner<LightOccluderPolygon> canvas_light_occluder_polygon_owner;
|
||||||
|
|
||||||
RID_PtrOwner<RasterizerCanvas::LightOccluderInstance> canvas_light_occluder_owner;
|
RID_PtrOwner<RendererCanvasRender::LightOccluderInstance> canvas_light_occluder_owner;
|
||||||
|
|
||||||
struct Canvas : public RenderingServerViewport::CanvasBase {
|
struct Canvas : public RendererViewport::CanvasBase {
|
||||||
Set<RID> viewports;
|
Set<RID> viewports;
|
||||||
struct ChildItem {
|
struct ChildItem {
|
||||||
Point2 mirror;
|
Point2 mirror;
|
||||||
@ -115,10 +115,10 @@ public:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
Set<RasterizerCanvas::Light *> lights;
|
Set<RendererCanvasRender::Light *> lights;
|
||||||
Set<RasterizerCanvas::Light *> directional_lights;
|
Set<RendererCanvasRender::Light *> directional_lights;
|
||||||
|
|
||||||
Set<RasterizerCanvas::LightOccluderInstance *> occluders;
|
Set<RendererCanvasRender::LightOccluderInstance *> occluders;
|
||||||
|
|
||||||
bool children_order_dirty;
|
bool children_order_dirty;
|
||||||
Vector<ChildItem> child_items;
|
Vector<ChildItem> child_items;
|
||||||
@ -150,21 +150,21 @@ public:
|
|||||||
|
|
||||||
mutable RID_PtrOwner<Canvas> canvas_owner;
|
mutable RID_PtrOwner<Canvas> canvas_owner;
|
||||||
RID_PtrOwner<Item> canvas_item_owner;
|
RID_PtrOwner<Item> canvas_item_owner;
|
||||||
RID_PtrOwner<RasterizerCanvas::Light> canvas_light_owner;
|
RID_PtrOwner<RendererCanvasRender::Light> canvas_light_owner;
|
||||||
|
|
||||||
bool disable_scale;
|
bool disable_scale;
|
||||||
bool sdf_used = false;
|
bool sdf_used = false;
|
||||||
bool snapping_2d_transforms_to_pixel = false;
|
bool snapping_2d_transforms_to_pixel = false;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void _render_canvas_item_tree(RID p_to_render_target, Canvas::ChildItem *p_child_items, int p_child_item_count, Item *p_canvas_item, const Transform2D &p_transform, const Rect2 &p_clip_rect, const Color &p_modulate, RasterizerCanvas::Light *p_lights, RasterizerCanvas::Light *p_directional_lights, RS::CanvasItemTextureFilter p_default_filter, RS::CanvasItemTextureRepeat p_default_repeat, bool p_snap_2d_vertices_to_pixel);
|
void _render_canvas_item_tree(RID p_to_render_target, Canvas::ChildItem *p_child_items, int p_child_item_count, Item *p_canvas_item, const Transform2D &p_transform, const Rect2 &p_clip_rect, const Color &p_modulate, RendererCanvasRender::Light *p_lights, RendererCanvasRender::Light *p_directional_lights, RS::CanvasItemTextureFilter p_default_filter, RS::CanvasItemTextureRepeat p_default_repeat, bool p_snap_2d_vertices_to_pixel);
|
||||||
void _cull_canvas_item(Item *p_canvas_item, const Transform2D &p_transform, const Rect2 &p_clip_rect, const Color &p_modulate, int p_z, RasterizerCanvas::Item **z_list, RasterizerCanvas::Item **z_last_list, Item *p_canvas_clip, Item *p_material_owner);
|
void _cull_canvas_item(Item *p_canvas_item, const Transform2D &p_transform, const Rect2 &p_clip_rect, const Color &p_modulate, int p_z, RendererCanvasRender::Item **z_list, RendererCanvasRender::Item **z_last_list, Item *p_canvas_clip, Item *p_material_owner);
|
||||||
|
|
||||||
RasterizerCanvas::Item **z_list;
|
RendererCanvasRender::Item **z_list;
|
||||||
RasterizerCanvas::Item **z_last_list;
|
RendererCanvasRender::Item **z_last_list;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void render_canvas(RID p_render_target, Canvas *p_canvas, const Transform2D &p_transform, RasterizerCanvas::Light *p_lights, RasterizerCanvas::Light *p_directional_lights, const Rect2 &p_clip_rect, RS::CanvasItemTextureFilter p_default_filter, RS::CanvasItemTextureRepeat p_default_repeat, bool p_snap_2d_transforms_to_pixel, bool p_snap_2d_vertices_to_pixel);
|
void render_canvas(RID p_render_target, Canvas *p_canvas, const Transform2D &p_transform, RendererCanvasRender::Light *p_lights, RendererCanvasRender::Light *p_directional_lights, const Rect2 &p_clip_rect, RS::CanvasItemTextureFilter p_default_filter, RS::CanvasItemTextureRepeat p_default_repeat, bool p_snap_2d_transforms_to_pixel, bool p_snap_2d_vertices_to_pixel);
|
||||||
|
|
||||||
bool was_sdf_used();
|
bool was_sdf_used();
|
||||||
|
|
||||||
@ -272,8 +272,8 @@ public:
|
|||||||
void canvas_item_set_default_texture_repeat(RID p_item, RS::CanvasItemTextureRepeat p_repeat);
|
void canvas_item_set_default_texture_repeat(RID p_item, RS::CanvasItemTextureRepeat p_repeat);
|
||||||
|
|
||||||
bool free(RID p_rid);
|
bool free(RID p_rid);
|
||||||
RenderingServerCanvas();
|
RendererCanvasCull();
|
||||||
~RenderingServerCanvas();
|
~RendererCanvasCull();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // VISUALSERVERCANVAS_H
|
#endif // VISUALSERVERCANVAS_H
|
31
servers/rendering/renderer_canvas_render.cpp
Normal file
31
servers/rendering/renderer_canvas_render.cpp
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
/*************************************************************************/
|
||||||
|
/* renderer_canvas_render.cpp */
|
||||||
|
/*************************************************************************/
|
||||||
|
/* This file is part of: */
|
||||||
|
/* GODOT ENGINE */
|
||||||
|
/* https://godotengine.org */
|
||||||
|
/*************************************************************************/
|
||||||
|
/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */
|
||||||
|
/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */
|
||||||
|
/* */
|
||||||
|
/* 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 "renderer_canvas_render.h"
|
604
servers/rendering/renderer_canvas_render.h
Normal file
604
servers/rendering/renderer_canvas_render.h
Normal file
@ -0,0 +1,604 @@
|
|||||||
|
/*************************************************************************/
|
||||||
|
/* renderer_canvas_render.h */
|
||||||
|
/*************************************************************************/
|
||||||
|
/* This file is part of: */
|
||||||
|
/* GODOT ENGINE */
|
||||||
|
/* https://godotengine.org */
|
||||||
|
/*************************************************************************/
|
||||||
|
/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */
|
||||||
|
/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */
|
||||||
|
/* */
|
||||||
|
/* 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. */
|
||||||
|
/*************************************************************************/
|
||||||
|
|
||||||
|
#ifndef RENDERINGSERVERCANVASRENDER_H
|
||||||
|
#define RENDERINGSERVERCANVASRENDER_H
|
||||||
|
|
||||||
|
#include "servers/rendering/renderer_storage.h"
|
||||||
|
|
||||||
|
class RendererCanvasRender {
|
||||||
|
public:
|
||||||
|
static RendererCanvasRender *singleton;
|
||||||
|
|
||||||
|
enum CanvasRectFlags {
|
||||||
|
CANVAS_RECT_REGION = 1,
|
||||||
|
CANVAS_RECT_TILE = 2,
|
||||||
|
CANVAS_RECT_FLIP_H = 4,
|
||||||
|
CANVAS_RECT_FLIP_V = 8,
|
||||||
|
CANVAS_RECT_TRANSPOSE = 16,
|
||||||
|
CANVAS_RECT_CLIP_UV = 32,
|
||||||
|
CANVAS_RECT_IS_GROUP = 64,
|
||||||
|
};
|
||||||
|
|
||||||
|
struct Light {
|
||||||
|
bool enabled;
|
||||||
|
Color color;
|
||||||
|
Transform2D xform;
|
||||||
|
float height;
|
||||||
|
float energy;
|
||||||
|
float scale;
|
||||||
|
int z_min;
|
||||||
|
int z_max;
|
||||||
|
int layer_min;
|
||||||
|
int layer_max;
|
||||||
|
int item_mask;
|
||||||
|
int item_shadow_mask;
|
||||||
|
float directional_distance;
|
||||||
|
RS::CanvasLightMode mode;
|
||||||
|
RS::CanvasLightBlendMode blend_mode;
|
||||||
|
RID texture;
|
||||||
|
Vector2 texture_offset;
|
||||||
|
RID canvas;
|
||||||
|
bool use_shadow;
|
||||||
|
int shadow_buffer_size;
|
||||||
|
RS::CanvasLightShadowFilter shadow_filter;
|
||||||
|
Color shadow_color;
|
||||||
|
float shadow_smooth;
|
||||||
|
|
||||||
|
//void *texture_cache; // implementation dependent
|
||||||
|
Rect2 rect_cache;
|
||||||
|
Transform2D xform_cache;
|
||||||
|
float radius_cache; //used for shadow far plane
|
||||||
|
//CameraMatrix shadow_matrix_cache;
|
||||||
|
|
||||||
|
Transform2D light_shader_xform;
|
||||||
|
//Vector2 light_shader_pos;
|
||||||
|
|
||||||
|
Light *shadows_next_ptr;
|
||||||
|
Light *filter_next_ptr;
|
||||||
|
Light *next_ptr;
|
||||||
|
Light *directional_next_ptr;
|
||||||
|
|
||||||
|
RID light_internal;
|
||||||
|
uint64_t version;
|
||||||
|
|
||||||
|
int32_t render_index_cache;
|
||||||
|
|
||||||
|
Light() {
|
||||||
|
version = 0;
|
||||||
|
enabled = true;
|
||||||
|
color = Color(1, 1, 1);
|
||||||
|
shadow_color = Color(0, 0, 0, 0);
|
||||||
|
height = 0;
|
||||||
|
z_min = -1024;
|
||||||
|
z_max = 1024;
|
||||||
|
layer_min = 0;
|
||||||
|
layer_max = 0;
|
||||||
|
item_mask = 1;
|
||||||
|
scale = 1.0;
|
||||||
|
energy = 1.0;
|
||||||
|
item_shadow_mask = 1;
|
||||||
|
mode = RS::CANVAS_LIGHT_MODE_POINT;
|
||||||
|
blend_mode = RS::CANVAS_LIGHT_BLEND_MODE_ADD;
|
||||||
|
// texture_cache = nullptr;
|
||||||
|
next_ptr = nullptr;
|
||||||
|
directional_next_ptr = nullptr;
|
||||||
|
filter_next_ptr = nullptr;
|
||||||
|
use_shadow = false;
|
||||||
|
shadow_buffer_size = 2048;
|
||||||
|
shadow_filter = RS::CANVAS_LIGHT_FILTER_NONE;
|
||||||
|
shadow_smooth = 0.0;
|
||||||
|
render_index_cache = -1;
|
||||||
|
directional_distance = 10000.0;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
//easier wrap to avoid mistakes
|
||||||
|
|
||||||
|
struct Item;
|
||||||
|
|
||||||
|
typedef uint64_t PolygonID;
|
||||||
|
virtual PolygonID request_polygon(const Vector<int> &p_indices, const Vector<Point2> &p_points, const Vector<Color> &p_colors, const Vector<Point2> &p_uvs = Vector<Point2>(), const Vector<int> &p_bones = Vector<int>(), const Vector<float> &p_weights = Vector<float>()) = 0;
|
||||||
|
virtual void free_polygon(PolygonID p_polygon) = 0;
|
||||||
|
|
||||||
|
//also easier to wrap to avoid mistakes
|
||||||
|
struct Polygon {
|
||||||
|
PolygonID polygon_id;
|
||||||
|
Rect2 rect_cache;
|
||||||
|
|
||||||
|
_FORCE_INLINE_ void create(const Vector<int> &p_indices, const Vector<Point2> &p_points, const Vector<Color> &p_colors, const Vector<Point2> &p_uvs = Vector<Point2>(), const Vector<int> &p_bones = Vector<int>(), const Vector<float> &p_weights = Vector<float>()) {
|
||||||
|
ERR_FAIL_COND(polygon_id != 0);
|
||||||
|
{
|
||||||
|
uint32_t pc = p_points.size();
|
||||||
|
const Vector2 *v2 = p_points.ptr();
|
||||||
|
rect_cache.position = *v2;
|
||||||
|
for (uint32_t i = 1; i < pc; i++) {
|
||||||
|
rect_cache.expand_to(v2[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
polygon_id = singleton->request_polygon(p_indices, p_points, p_colors, p_uvs, p_bones, p_weights);
|
||||||
|
}
|
||||||
|
|
||||||
|
_FORCE_INLINE_ Polygon() { polygon_id = 0; }
|
||||||
|
_FORCE_INLINE_ ~Polygon() {
|
||||||
|
if (polygon_id) {
|
||||||
|
singleton->free_polygon(polygon_id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
//item
|
||||||
|
|
||||||
|
struct Item {
|
||||||
|
//commands are allocated in blocks of 4k to improve performance
|
||||||
|
//and cache coherence.
|
||||||
|
//blocks always grow but never shrink.
|
||||||
|
|
||||||
|
struct CommandBlock {
|
||||||
|
enum {
|
||||||
|
MAX_SIZE = 4096
|
||||||
|
};
|
||||||
|
uint32_t usage;
|
||||||
|
uint8_t *memory;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct Command {
|
||||||
|
enum Type {
|
||||||
|
TYPE_RECT,
|
||||||
|
TYPE_NINEPATCH,
|
||||||
|
TYPE_POLYGON,
|
||||||
|
TYPE_PRIMITIVE,
|
||||||
|
TYPE_MESH,
|
||||||
|
TYPE_MULTIMESH,
|
||||||
|
TYPE_PARTICLES,
|
||||||
|
TYPE_TRANSFORM,
|
||||||
|
TYPE_CLIP_IGNORE,
|
||||||
|
};
|
||||||
|
|
||||||
|
Command *next;
|
||||||
|
Type type;
|
||||||
|
virtual ~Command() {}
|
||||||
|
};
|
||||||
|
|
||||||
|
struct CommandRect : public Command {
|
||||||
|
Rect2 rect;
|
||||||
|
Color modulate;
|
||||||
|
Rect2 source;
|
||||||
|
uint8_t flags;
|
||||||
|
|
||||||
|
RID texture;
|
||||||
|
|
||||||
|
CommandRect() {
|
||||||
|
flags = 0;
|
||||||
|
type = TYPE_RECT;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
struct CommandNinePatch : public Command {
|
||||||
|
Rect2 rect;
|
||||||
|
Rect2 source;
|
||||||
|
float margin[4];
|
||||||
|
bool draw_center;
|
||||||
|
Color color;
|
||||||
|
RS::NinePatchAxisMode axis_x;
|
||||||
|
RS::NinePatchAxisMode axis_y;
|
||||||
|
|
||||||
|
RID texture;
|
||||||
|
|
||||||
|
CommandNinePatch() {
|
||||||
|
draw_center = true;
|
||||||
|
type = TYPE_NINEPATCH;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
struct CommandPolygon : public Command {
|
||||||
|
RS::PrimitiveType primitive;
|
||||||
|
Polygon polygon;
|
||||||
|
|
||||||
|
RID texture;
|
||||||
|
|
||||||
|
CommandPolygon() {
|
||||||
|
type = TYPE_POLYGON;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
struct CommandPrimitive : public Command {
|
||||||
|
uint32_t point_count;
|
||||||
|
Vector2 points[4];
|
||||||
|
Vector2 uvs[4];
|
||||||
|
Color colors[4];
|
||||||
|
|
||||||
|
RID texture;
|
||||||
|
|
||||||
|
CommandPrimitive() {
|
||||||
|
type = TYPE_PRIMITIVE;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
struct CommandMesh : public Command {
|
||||||
|
RID mesh;
|
||||||
|
Transform2D transform;
|
||||||
|
Color modulate;
|
||||||
|
|
||||||
|
RID texture;
|
||||||
|
|
||||||
|
CommandMesh() { type = TYPE_MESH; }
|
||||||
|
};
|
||||||
|
|
||||||
|
struct CommandMultiMesh : public Command {
|
||||||
|
RID multimesh;
|
||||||
|
|
||||||
|
RID texture;
|
||||||
|
|
||||||
|
CommandMultiMesh() { type = TYPE_MULTIMESH; }
|
||||||
|
};
|
||||||
|
|
||||||
|
struct CommandParticles : public Command {
|
||||||
|
RID particles;
|
||||||
|
|
||||||
|
RID texture;
|
||||||
|
|
||||||
|
CommandParticles() { type = TYPE_PARTICLES; }
|
||||||
|
};
|
||||||
|
|
||||||
|
struct CommandTransform : public Command {
|
||||||
|
Transform2D xform;
|
||||||
|
CommandTransform() { type = TYPE_TRANSFORM; }
|
||||||
|
};
|
||||||
|
|
||||||
|
struct CommandClipIgnore : public Command {
|
||||||
|
bool ignore;
|
||||||
|
CommandClipIgnore() {
|
||||||
|
type = TYPE_CLIP_IGNORE;
|
||||||
|
ignore = false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ViewportRender {
|
||||||
|
RenderingServer *owner;
|
||||||
|
void *udata;
|
||||||
|
Rect2 rect;
|
||||||
|
};
|
||||||
|
|
||||||
|
Transform2D xform;
|
||||||
|
bool clip;
|
||||||
|
bool visible;
|
||||||
|
bool behind;
|
||||||
|
bool update_when_visible;
|
||||||
|
|
||||||
|
struct CanvasGroup {
|
||||||
|
RS::CanvasGroupMode mode;
|
||||||
|
bool fit_empty;
|
||||||
|
float fit_margin;
|
||||||
|
bool blur_mipmaps;
|
||||||
|
float clear_margin;
|
||||||
|
};
|
||||||
|
|
||||||
|
CanvasGroup *canvas_group = nullptr;
|
||||||
|
int light_mask;
|
||||||
|
int z_final;
|
||||||
|
|
||||||
|
mutable bool custom_rect;
|
||||||
|
mutable bool rect_dirty;
|
||||||
|
mutable Rect2 rect;
|
||||||
|
RID material;
|
||||||
|
RID skeleton;
|
||||||
|
|
||||||
|
Item *next;
|
||||||
|
|
||||||
|
struct CopyBackBuffer {
|
||||||
|
Rect2 rect;
|
||||||
|
Rect2 screen_rect;
|
||||||
|
bool full;
|
||||||
|
};
|
||||||
|
CopyBackBuffer *copy_back_buffer;
|
||||||
|
|
||||||
|
Color final_modulate;
|
||||||
|
Transform2D final_transform;
|
||||||
|
Rect2 final_clip_rect;
|
||||||
|
Item *final_clip_owner;
|
||||||
|
Item *material_owner;
|
||||||
|
Item *canvas_group_owner;
|
||||||
|
ViewportRender *vp_render;
|
||||||
|
bool distance_field;
|
||||||
|
bool light_masked;
|
||||||
|
|
||||||
|
Rect2 global_rect_cache;
|
||||||
|
|
||||||
|
const Rect2 &get_rect() const {
|
||||||
|
if (custom_rect || (!rect_dirty && !update_when_visible)) {
|
||||||
|
return rect;
|
||||||
|
}
|
||||||
|
|
||||||
|
//must update rect
|
||||||
|
|
||||||
|
if (commands == nullptr) {
|
||||||
|
rect = Rect2();
|
||||||
|
rect_dirty = false;
|
||||||
|
return rect;
|
||||||
|
}
|
||||||
|
|
||||||
|
Transform2D xf;
|
||||||
|
bool found_xform = false;
|
||||||
|
bool first = true;
|
||||||
|
|
||||||
|
const Item::Command *c = commands;
|
||||||
|
|
||||||
|
while (c) {
|
||||||
|
Rect2 r;
|
||||||
|
|
||||||
|
switch (c->type) {
|
||||||
|
case Item::Command::TYPE_RECT: {
|
||||||
|
const Item::CommandRect *crect = static_cast<const Item::CommandRect *>(c);
|
||||||
|
r = crect->rect;
|
||||||
|
|
||||||
|
} break;
|
||||||
|
case Item::Command::TYPE_NINEPATCH: {
|
||||||
|
const Item::CommandNinePatch *style = static_cast<const Item::CommandNinePatch *>(c);
|
||||||
|
r = style->rect;
|
||||||
|
} break;
|
||||||
|
|
||||||
|
case Item::Command::TYPE_POLYGON: {
|
||||||
|
const Item::CommandPolygon *polygon = static_cast<const Item::CommandPolygon *>(c);
|
||||||
|
r = polygon->polygon.rect_cache;
|
||||||
|
} break;
|
||||||
|
case Item::Command::TYPE_PRIMITIVE: {
|
||||||
|
const Item::CommandPrimitive *primitive = static_cast<const Item::CommandPrimitive *>(c);
|
||||||
|
for (uint32_t j = 0; j < primitive->point_count; j++) {
|
||||||
|
if (j == 0) {
|
||||||
|
r.position = primitive->points[0];
|
||||||
|
} else {
|
||||||
|
r.expand_to(primitive->points[j]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} break;
|
||||||
|
case Item::Command::TYPE_MESH: {
|
||||||
|
const Item::CommandMesh *mesh = static_cast<const Item::CommandMesh *>(c);
|
||||||
|
AABB aabb = RendererStorage::base_singleton->mesh_get_aabb(mesh->mesh, RID());
|
||||||
|
|
||||||
|
r = Rect2(aabb.position.x, aabb.position.y, aabb.size.x, aabb.size.y);
|
||||||
|
|
||||||
|
} break;
|
||||||
|
case Item::Command::TYPE_MULTIMESH: {
|
||||||
|
const Item::CommandMultiMesh *multimesh = static_cast<const Item::CommandMultiMesh *>(c);
|
||||||
|
AABB aabb = RendererStorage::base_singleton->multimesh_get_aabb(multimesh->multimesh);
|
||||||
|
|
||||||
|
r = Rect2(aabb.position.x, aabb.position.y, aabb.size.x, aabb.size.y);
|
||||||
|
|
||||||
|
} break;
|
||||||
|
case Item::Command::TYPE_PARTICLES: {
|
||||||
|
const Item::CommandParticles *particles_cmd = static_cast<const Item::CommandParticles *>(c);
|
||||||
|
if (particles_cmd->particles.is_valid()) {
|
||||||
|
AABB aabb = RendererStorage::base_singleton->particles_get_aabb(particles_cmd->particles);
|
||||||
|
r = Rect2(aabb.position.x, aabb.position.y, aabb.size.x, aabb.size.y);
|
||||||
|
}
|
||||||
|
|
||||||
|
} break;
|
||||||
|
case Item::Command::TYPE_TRANSFORM: {
|
||||||
|
const Item::CommandTransform *transform = static_cast<const Item::CommandTransform *>(c);
|
||||||
|
xf = transform->xform;
|
||||||
|
found_xform = true;
|
||||||
|
[[fallthrough]];
|
||||||
|
}
|
||||||
|
default: {
|
||||||
|
c = c->next;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (found_xform) {
|
||||||
|
r = xf.xform(r);
|
||||||
|
found_xform = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (first) {
|
||||||
|
rect = r;
|
||||||
|
first = false;
|
||||||
|
} else {
|
||||||
|
rect = rect.merge(r);
|
||||||
|
}
|
||||||
|
c = c->next;
|
||||||
|
}
|
||||||
|
|
||||||
|
rect_dirty = false;
|
||||||
|
return rect;
|
||||||
|
}
|
||||||
|
|
||||||
|
Command *commands;
|
||||||
|
Command *last_command;
|
||||||
|
Vector<CommandBlock> blocks;
|
||||||
|
uint32_t current_block;
|
||||||
|
|
||||||
|
template <class T>
|
||||||
|
T *alloc_command() {
|
||||||
|
T *command;
|
||||||
|
if (commands == nullptr) {
|
||||||
|
// As the most common use case of canvas items is to
|
||||||
|
// use only one command, the first is done with it's
|
||||||
|
// own allocation. The rest of them use blocks.
|
||||||
|
command = memnew(T);
|
||||||
|
command->next = nullptr;
|
||||||
|
commands = command;
|
||||||
|
last_command = command;
|
||||||
|
} else {
|
||||||
|
//Subsequent commands go into a block.
|
||||||
|
|
||||||
|
while (true) {
|
||||||
|
if (unlikely(current_block == (uint32_t)blocks.size())) {
|
||||||
|
// If we need more blocks, we allocate them
|
||||||
|
// (they won't be freed until this CanvasItem is
|
||||||
|
// deleted, though).
|
||||||
|
CommandBlock cb;
|
||||||
|
cb.memory = (uint8_t *)memalloc(CommandBlock::MAX_SIZE);
|
||||||
|
cb.usage = 0;
|
||||||
|
blocks.push_back(cb);
|
||||||
|
}
|
||||||
|
|
||||||
|
CommandBlock *c = &blocks.write[current_block];
|
||||||
|
size_t space_left = CommandBlock::MAX_SIZE - c->usage;
|
||||||
|
if (space_left < sizeof(T)) {
|
||||||
|
current_block++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
//allocate block and add to the linked list
|
||||||
|
void *memory = c->memory + c->usage;
|
||||||
|
command = memnew_placement(memory, T);
|
||||||
|
command->next = nullptr;
|
||||||
|
last_command->next = command;
|
||||||
|
last_command = command;
|
||||||
|
c->usage += sizeof(T);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
rect_dirty = true;
|
||||||
|
return command;
|
||||||
|
}
|
||||||
|
|
||||||
|
void clear() {
|
||||||
|
// The first one is always allocated on heap
|
||||||
|
// the rest go in the blocks
|
||||||
|
Command *c = commands;
|
||||||
|
while (c) {
|
||||||
|
Command *n = c->next;
|
||||||
|
if (c == commands) {
|
||||||
|
memdelete(commands);
|
||||||
|
commands = nullptr;
|
||||||
|
} else {
|
||||||
|
c->~Command();
|
||||||
|
}
|
||||||
|
c = n;
|
||||||
|
}
|
||||||
|
{
|
||||||
|
uint32_t cbc = MIN((current_block + 1), (uint32_t)blocks.size());
|
||||||
|
CommandBlock *blockptr = blocks.ptrw();
|
||||||
|
for (uint32_t i = 0; i < cbc; i++) {
|
||||||
|
blockptr[i].usage = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
last_command = nullptr;
|
||||||
|
commands = nullptr;
|
||||||
|
current_block = 0;
|
||||||
|
clip = false;
|
||||||
|
rect_dirty = true;
|
||||||
|
final_clip_owner = nullptr;
|
||||||
|
material_owner = nullptr;
|
||||||
|
light_masked = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
RS::CanvasItemTextureFilter texture_filter;
|
||||||
|
RS::CanvasItemTextureRepeat texture_repeat;
|
||||||
|
|
||||||
|
Item() {
|
||||||
|
commands = nullptr;
|
||||||
|
last_command = nullptr;
|
||||||
|
current_block = 0;
|
||||||
|
light_mask = 1;
|
||||||
|
vp_render = nullptr;
|
||||||
|
next = nullptr;
|
||||||
|
final_clip_owner = nullptr;
|
||||||
|
canvas_group_owner = nullptr;
|
||||||
|
clip = false;
|
||||||
|
final_modulate = Color(1, 1, 1, 1);
|
||||||
|
visible = true;
|
||||||
|
rect_dirty = true;
|
||||||
|
custom_rect = false;
|
||||||
|
behind = false;
|
||||||
|
material_owner = nullptr;
|
||||||
|
copy_back_buffer = nullptr;
|
||||||
|
distance_field = false;
|
||||||
|
light_masked = false;
|
||||||
|
update_when_visible = false;
|
||||||
|
z_final = 0;
|
||||||
|
texture_filter = RS::CANVAS_ITEM_TEXTURE_FILTER_DEFAULT;
|
||||||
|
texture_repeat = RS::CANVAS_ITEM_TEXTURE_REPEAT_DEFAULT;
|
||||||
|
}
|
||||||
|
virtual ~Item() {
|
||||||
|
clear();
|
||||||
|
for (int i = 0; i < blocks.size(); i++) {
|
||||||
|
memfree(blocks[i].memory);
|
||||||
|
}
|
||||||
|
if (copy_back_buffer) {
|
||||||
|
memdelete(copy_back_buffer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
virtual void canvas_render_items(RID p_to_render_target, Item *p_item_list, const Color &p_modulate, Light *p_light_list, Light *p_directional_list, const Transform2D &p_canvas_transform, RS::CanvasItemTextureFilter p_default_filter, RS::CanvasItemTextureRepeat p_default_repeat, bool p_snap_2d_vertices_to_pixel, bool &r_sdf_used) = 0;
|
||||||
|
virtual void canvas_debug_viewport_shadows(Light *p_lights_with_shadow) = 0;
|
||||||
|
|
||||||
|
struct LightOccluderInstance {
|
||||||
|
bool enabled;
|
||||||
|
RID canvas;
|
||||||
|
RID polygon;
|
||||||
|
RID occluder;
|
||||||
|
Rect2 aabb_cache;
|
||||||
|
Transform2D xform;
|
||||||
|
Transform2D xform_cache;
|
||||||
|
int light_mask;
|
||||||
|
bool sdf_collision;
|
||||||
|
RS::CanvasOccluderPolygonCullMode cull_cache;
|
||||||
|
|
||||||
|
LightOccluderInstance *next;
|
||||||
|
|
||||||
|
LightOccluderInstance() {
|
||||||
|
enabled = true;
|
||||||
|
sdf_collision = false;
|
||||||
|
next = nullptr;
|
||||||
|
light_mask = 1;
|
||||||
|
cull_cache = RS::CANVAS_OCCLUDER_POLYGON_CULL_DISABLED;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
virtual RID light_create() = 0;
|
||||||
|
virtual void light_set_texture(RID p_rid, RID p_texture) = 0;
|
||||||
|
virtual void light_set_use_shadow(RID p_rid, bool p_enable) = 0;
|
||||||
|
virtual void light_update_shadow(RID p_rid, int p_shadow_index, const Transform2D &p_light_xform, int p_light_mask, float p_near, float p_far, LightOccluderInstance *p_occluders) = 0;
|
||||||
|
virtual void light_update_directional_shadow(RID p_rid, int p_shadow_index, const Transform2D &p_light_xform, int p_light_mask, float p_cull_distance, const Rect2 &p_clip_rect, LightOccluderInstance *p_occluders) = 0;
|
||||||
|
|
||||||
|
virtual void render_sdf(RID p_render_target, LightOccluderInstance *p_occluders) = 0;
|
||||||
|
|
||||||
|
virtual RID occluder_polygon_create() = 0;
|
||||||
|
virtual void occluder_polygon_set_shape(RID p_occluder, const Vector<Vector2> &p_points, bool p_closed) = 0;
|
||||||
|
virtual void occluder_polygon_set_cull_mode(RID p_occluder, RS::CanvasOccluderPolygonCullMode p_mode) = 0;
|
||||||
|
virtual void set_shadow_texture_size(int p_size) = 0;
|
||||||
|
|
||||||
|
virtual void draw_window_margins(int *p_margins, RID *p_margin_textures) = 0;
|
||||||
|
|
||||||
|
virtual bool free(RID p_rid) = 0;
|
||||||
|
virtual void update() = 0;
|
||||||
|
|
||||||
|
RendererCanvasRender() { singleton = this; }
|
||||||
|
virtual ~RendererCanvasRender() {}
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // RENDERINGSERVERCANVASRENDER_H
|
42
servers/rendering/renderer_compositor.cpp
Normal file
42
servers/rendering/renderer_compositor.cpp
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
/*************************************************************************/
|
||||||
|
/* renderer_compositor.cpp */
|
||||||
|
/*************************************************************************/
|
||||||
|
/* This file is part of: */
|
||||||
|
/* GODOT ENGINE */
|
||||||
|
/* https://godotengine.org */
|
||||||
|
/*************************************************************************/
|
||||||
|
/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */
|
||||||
|
/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */
|
||||||
|
/* */
|
||||||
|
/* 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 "renderer_compositor.h"
|
||||||
|
|
||||||
|
#include "core/os/os.h"
|
||||||
|
#include "core/string/print_string.h"
|
||||||
|
|
||||||
|
RendererCompositor *(*RendererCompositor::_create_func)() = nullptr;
|
||||||
|
|
||||||
|
RendererCompositor *RendererCompositor::create() {
|
||||||
|
return _create_func();
|
||||||
|
}
|
||||||
|
|
||||||
|
RendererCanvasRender *RendererCanvasRender::singleton = nullptr;
|
78
servers/rendering/renderer_compositor.h
Normal file
78
servers/rendering/renderer_compositor.h
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
/*************************************************************************/
|
||||||
|
/* renderer_compositor.h */
|
||||||
|
/*************************************************************************/
|
||||||
|
/* This file is part of: */
|
||||||
|
/* GODOT ENGINE */
|
||||||
|
/* https://godotengine.org */
|
||||||
|
/*************************************************************************/
|
||||||
|
/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */
|
||||||
|
/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */
|
||||||
|
/* */
|
||||||
|
/* 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. */
|
||||||
|
/*************************************************************************/
|
||||||
|
|
||||||
|
#ifndef RENDERING_SERVER_COMPOSITOR_H
|
||||||
|
#define RENDERING_SERVER_COMPOSITOR_H
|
||||||
|
|
||||||
|
#include "core/math/camera_matrix.h"
|
||||||
|
#include "core/templates/pair.h"
|
||||||
|
#include "core/templates/self_list.h"
|
||||||
|
#include "servers/rendering/renderer_canvas_render.h"
|
||||||
|
#include "servers/rendering/renderer_scene.h"
|
||||||
|
#include "servers/rendering/renderer_scene_render.h"
|
||||||
|
#include "servers/rendering/renderer_storage.h"
|
||||||
|
#include "servers/rendering_server.h"
|
||||||
|
|
||||||
|
class RendererCompositor {
|
||||||
|
protected:
|
||||||
|
static RendererCompositor *(*_create_func)();
|
||||||
|
|
||||||
|
public:
|
||||||
|
static RendererCompositor *create();
|
||||||
|
|
||||||
|
virtual RendererStorage *get_storage() = 0;
|
||||||
|
virtual RendererCanvasRender *get_canvas() = 0;
|
||||||
|
virtual RendererSceneRender *get_scene() = 0;
|
||||||
|
|
||||||
|
virtual void set_boot_image(const Ref<Image> &p_image, const Color &p_color, bool p_scale, bool p_use_filter = true) = 0;
|
||||||
|
|
||||||
|
virtual void initialize() = 0;
|
||||||
|
virtual void begin_frame(double frame_step) = 0;
|
||||||
|
|
||||||
|
struct BlitToScreen {
|
||||||
|
RID render_target;
|
||||||
|
Rect2i rect;
|
||||||
|
//lens distorted parameters for VR should go here
|
||||||
|
};
|
||||||
|
|
||||||
|
virtual void prepare_for_blitting_render_targets() = 0;
|
||||||
|
virtual void blit_render_targets_to_screen(DisplayServer::WindowID p_screen, const BlitToScreen *p_render_targets, int p_amount) = 0;
|
||||||
|
|
||||||
|
virtual void end_frame(bool p_swap_buffers) = 0;
|
||||||
|
virtual void finalize() = 0;
|
||||||
|
virtual uint64_t get_frame_number() const = 0;
|
||||||
|
virtual float get_frame_delta_time() const = 0;
|
||||||
|
|
||||||
|
virtual bool is_low_end() const = 0;
|
||||||
|
|
||||||
|
virtual ~RendererCompositor() {}
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // RASTERIZER_H
|
@ -1,5 +1,5 @@
|
|||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
/* rasterizer_effects_rd.cpp */
|
/* effects_rd.cpp */
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
/* This file is part of: */
|
/* This file is part of: */
|
||||||
/* GODOT ENGINE */
|
/* GODOT ENGINE */
|
||||||
@ -28,7 +28,7 @@
|
|||||||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
|
|
||||||
#include "rasterizer_effects_rd.h"
|
#include "effects_rd.h"
|
||||||
|
|
||||||
#include "core/config/project_settings.h"
|
#include "core/config/project_settings.h"
|
||||||
#include "core/os/os.h"
|
#include "core/os/os.h"
|
||||||
@ -58,7 +58,7 @@ static _FORCE_INLINE_ void store_camera(const CameraMatrix &p_mtx, float *p_arra
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
RID RasterizerEffectsRD::_get_uniform_set_from_image(RID p_image) {
|
RID EffectsRD::_get_uniform_set_from_image(RID p_image) {
|
||||||
if (image_to_uniform_set_cache.has(p_image)) {
|
if (image_to_uniform_set_cache.has(p_image)) {
|
||||||
RID uniform_set = image_to_uniform_set_cache[p_image];
|
RID uniform_set = image_to_uniform_set_cache[p_image];
|
||||||
if (RD::get_singleton()->uniform_set_is_valid(uniform_set)) {
|
if (RD::get_singleton()->uniform_set_is_valid(uniform_set)) {
|
||||||
@ -79,7 +79,7 @@ RID RasterizerEffectsRD::_get_uniform_set_from_image(RID p_image) {
|
|||||||
return uniform_set;
|
return uniform_set;
|
||||||
}
|
}
|
||||||
|
|
||||||
RID RasterizerEffectsRD::_get_uniform_set_from_texture(RID p_texture, bool p_use_mipmaps) {
|
RID EffectsRD::_get_uniform_set_from_texture(RID p_texture, bool p_use_mipmaps) {
|
||||||
if (texture_to_uniform_set_cache.has(p_texture)) {
|
if (texture_to_uniform_set_cache.has(p_texture)) {
|
||||||
RID uniform_set = texture_to_uniform_set_cache[p_texture];
|
RID uniform_set = texture_to_uniform_set_cache[p_texture];
|
||||||
if (RD::get_singleton()->uniform_set_is_valid(uniform_set)) {
|
if (RD::get_singleton()->uniform_set_is_valid(uniform_set)) {
|
||||||
@ -102,7 +102,7 @@ RID RasterizerEffectsRD::_get_uniform_set_from_texture(RID p_texture, bool p_use
|
|||||||
return uniform_set;
|
return uniform_set;
|
||||||
}
|
}
|
||||||
|
|
||||||
RID RasterizerEffectsRD::_get_compute_uniform_set_from_texture(RID p_texture, bool p_use_mipmaps) {
|
RID EffectsRD::_get_compute_uniform_set_from_texture(RID p_texture, bool p_use_mipmaps) {
|
||||||
if (texture_to_compute_uniform_set_cache.has(p_texture)) {
|
if (texture_to_compute_uniform_set_cache.has(p_texture)) {
|
||||||
RID uniform_set = texture_to_compute_uniform_set_cache[p_texture];
|
RID uniform_set = texture_to_compute_uniform_set_cache[p_texture];
|
||||||
if (RD::get_singleton()->uniform_set_is_valid(uniform_set)) {
|
if (RD::get_singleton()->uniform_set_is_valid(uniform_set)) {
|
||||||
@ -125,7 +125,7 @@ RID RasterizerEffectsRD::_get_compute_uniform_set_from_texture(RID p_texture, bo
|
|||||||
return uniform_set;
|
return uniform_set;
|
||||||
}
|
}
|
||||||
|
|
||||||
RID RasterizerEffectsRD::_get_compute_uniform_set_from_texture_pair(RID p_texture1, RID p_texture2, bool p_use_mipmaps) {
|
RID EffectsRD::_get_compute_uniform_set_from_texture_pair(RID p_texture1, RID p_texture2, bool p_use_mipmaps) {
|
||||||
TexturePair tp;
|
TexturePair tp;
|
||||||
tp.texture1 = p_texture1;
|
tp.texture1 = p_texture1;
|
||||||
tp.texture2 = p_texture2;
|
tp.texture2 = p_texture2;
|
||||||
@ -162,7 +162,7 @@ RID RasterizerEffectsRD::_get_compute_uniform_set_from_texture_pair(RID p_textur
|
|||||||
return uniform_set;
|
return uniform_set;
|
||||||
}
|
}
|
||||||
|
|
||||||
RID RasterizerEffectsRD::_get_compute_uniform_set_from_image_pair(RID p_texture1, RID p_texture2) {
|
RID EffectsRD::_get_compute_uniform_set_from_image_pair(RID p_texture1, RID p_texture2) {
|
||||||
TexturePair tp;
|
TexturePair tp;
|
||||||
tp.texture1 = p_texture1;
|
tp.texture1 = p_texture1;
|
||||||
tp.texture2 = p_texture2;
|
tp.texture2 = p_texture2;
|
||||||
@ -197,7 +197,7 @@ RID RasterizerEffectsRD::_get_compute_uniform_set_from_image_pair(RID p_texture1
|
|||||||
return uniform_set;
|
return uniform_set;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerEffectsRD::copy_to_atlas_fb(RID p_source_rd_texture, RID p_dest_framebuffer, const Rect2 &p_uv_rect, RD::DrawListID p_draw_list, bool p_flip_y, bool p_panorama) {
|
void EffectsRD::copy_to_atlas_fb(RID p_source_rd_texture, RID p_dest_framebuffer, const Rect2 &p_uv_rect, RD::DrawListID p_draw_list, bool p_flip_y, bool p_panorama) {
|
||||||
zeromem(©_to_fb.push_constant, sizeof(CopyToFbPushConstant));
|
zeromem(©_to_fb.push_constant, sizeof(CopyToFbPushConstant));
|
||||||
|
|
||||||
copy_to_fb.push_constant.use_section = true;
|
copy_to_fb.push_constant.use_section = true;
|
||||||
@ -218,7 +218,7 @@ void RasterizerEffectsRD::copy_to_atlas_fb(RID p_source_rd_texture, RID p_dest_f
|
|||||||
RD::get_singleton()->draw_list_draw(draw_list, true);
|
RD::get_singleton()->draw_list_draw(draw_list, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerEffectsRD::copy_to_fb_rect(RID p_source_rd_texture, RID p_dest_framebuffer, const Rect2i &p_rect, bool p_flip_y, bool p_force_luminance, bool p_alpha_to_zero, bool p_srgb, RID p_secondary) {
|
void EffectsRD::copy_to_fb_rect(RID p_source_rd_texture, RID p_dest_framebuffer, const Rect2i &p_rect, bool p_flip_y, bool p_force_luminance, bool p_alpha_to_zero, bool p_srgb, RID p_secondary) {
|
||||||
zeromem(©_to_fb.push_constant, sizeof(CopyToFbPushConstant));
|
zeromem(©_to_fb.push_constant, sizeof(CopyToFbPushConstant));
|
||||||
|
|
||||||
if (p_flip_y) {
|
if (p_flip_y) {
|
||||||
@ -246,7 +246,7 @@ void RasterizerEffectsRD::copy_to_fb_rect(RID p_source_rd_texture, RID p_dest_fr
|
|||||||
RD::get_singleton()->draw_list_end();
|
RD::get_singleton()->draw_list_end();
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerEffectsRD::copy_to_rect(RID p_source_rd_texture, RID p_dest_texture, const Rect2i &p_rect, bool p_flip_y, bool p_force_luminance, bool p_all_source, bool p_8_bit_dst, bool p_alpha_to_one) {
|
void EffectsRD::copy_to_rect(RID p_source_rd_texture, RID p_dest_texture, const Rect2i &p_rect, bool p_flip_y, bool p_force_luminance, bool p_all_source, bool p_8_bit_dst, bool p_alpha_to_one) {
|
||||||
zeromem(©.push_constant, sizeof(CopyPushConstant));
|
zeromem(©.push_constant, sizeof(CopyPushConstant));
|
||||||
if (p_flip_y) {
|
if (p_flip_y) {
|
||||||
copy.push_constant.flags |= COPY_FLAG_FLIP_Y;
|
copy.push_constant.flags |= COPY_FLAG_FLIP_Y;
|
||||||
@ -283,7 +283,7 @@ void RasterizerEffectsRD::copy_to_rect(RID p_source_rd_texture, RID p_dest_textu
|
|||||||
RD::get_singleton()->compute_list_end();
|
RD::get_singleton()->compute_list_end();
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerEffectsRD::copy_cubemap_to_panorama(RID p_source_cube, RID p_dest_panorama, const Size2i &p_panorama_size, float p_lod, bool p_is_array) {
|
void EffectsRD::copy_cubemap_to_panorama(RID p_source_cube, RID p_dest_panorama, const Size2i &p_panorama_size, float p_lod, bool p_is_array) {
|
||||||
zeromem(©.push_constant, sizeof(CopyPushConstant));
|
zeromem(©.push_constant, sizeof(CopyPushConstant));
|
||||||
|
|
||||||
copy.push_constant.section[0] = 0;
|
copy.push_constant.section[0] = 0;
|
||||||
@ -306,7 +306,7 @@ void RasterizerEffectsRD::copy_cubemap_to_panorama(RID p_source_cube, RID p_dest
|
|||||||
RD::get_singleton()->compute_list_end();
|
RD::get_singleton()->compute_list_end();
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerEffectsRD::copy_depth_to_rect_and_linearize(RID p_source_rd_texture, RID p_dest_texture, const Rect2i &p_rect, bool p_flip_y, float p_z_near, float p_z_far) {
|
void EffectsRD::copy_depth_to_rect_and_linearize(RID p_source_rd_texture, RID p_dest_texture, const Rect2i &p_rect, bool p_flip_y, float p_z_near, float p_z_far) {
|
||||||
zeromem(©.push_constant, sizeof(CopyPushConstant));
|
zeromem(©.push_constant, sizeof(CopyPushConstant));
|
||||||
if (p_flip_y) {
|
if (p_flip_y) {
|
||||||
copy.push_constant.flags |= COPY_FLAG_FLIP_Y;
|
copy.push_constant.flags |= COPY_FLAG_FLIP_Y;
|
||||||
@ -333,7 +333,7 @@ void RasterizerEffectsRD::copy_depth_to_rect_and_linearize(RID p_source_rd_textu
|
|||||||
RD::get_singleton()->compute_list_end();
|
RD::get_singleton()->compute_list_end();
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerEffectsRD::copy_depth_to_rect(RID p_source_rd_texture, RID p_dest_texture, const Rect2i &p_rect, bool p_flip_y) {
|
void EffectsRD::copy_depth_to_rect(RID p_source_rd_texture, RID p_dest_texture, const Rect2i &p_rect, bool p_flip_y) {
|
||||||
zeromem(©.push_constant, sizeof(CopyPushConstant));
|
zeromem(©.push_constant, sizeof(CopyPushConstant));
|
||||||
if (p_flip_y) {
|
if (p_flip_y) {
|
||||||
copy.push_constant.flags |= COPY_FLAG_FLIP_Y;
|
copy.push_constant.flags |= COPY_FLAG_FLIP_Y;
|
||||||
@ -358,7 +358,7 @@ void RasterizerEffectsRD::copy_depth_to_rect(RID p_source_rd_texture, RID p_dest
|
|||||||
RD::get_singleton()->compute_list_end();
|
RD::get_singleton()->compute_list_end();
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerEffectsRD::set_color(RID p_dest_texture, const Color &p_color, const Rect2i &p_region, bool p_8bit_dst) {
|
void EffectsRD::set_color(RID p_dest_texture, const Color &p_color, const Rect2i &p_region, bool p_8bit_dst) {
|
||||||
zeromem(©.push_constant, sizeof(CopyPushConstant));
|
zeromem(©.push_constant, sizeof(CopyPushConstant));
|
||||||
|
|
||||||
copy.push_constant.section[0] = 0;
|
copy.push_constant.section[0] = 0;
|
||||||
@ -383,7 +383,7 @@ void RasterizerEffectsRD::set_color(RID p_dest_texture, const Color &p_color, co
|
|||||||
RD::get_singleton()->compute_list_end();
|
RD::get_singleton()->compute_list_end();
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerEffectsRD::gaussian_blur(RID p_source_rd_texture, RID p_texture, RID p_back_texture, const Rect2i &p_region, bool p_8bit_dst) {
|
void EffectsRD::gaussian_blur(RID p_source_rd_texture, RID p_texture, RID p_back_texture, const Rect2i &p_region, bool p_8bit_dst) {
|
||||||
zeromem(©.push_constant, sizeof(CopyPushConstant));
|
zeromem(©.push_constant, sizeof(CopyPushConstant));
|
||||||
|
|
||||||
uint32_t base_flags = 0;
|
uint32_t base_flags = 0;
|
||||||
@ -418,7 +418,7 @@ void RasterizerEffectsRD::gaussian_blur(RID p_source_rd_texture, RID p_texture,
|
|||||||
RD::get_singleton()->compute_list_end();
|
RD::get_singleton()->compute_list_end();
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerEffectsRD::gaussian_glow(RID p_source_rd_texture, RID p_back_texture, const Size2i &p_size, float p_strength, bool p_high_quality, bool p_first_pass, float p_luminance_cap, float p_exposure, float p_bloom, float p_hdr_bleed_treshold, float p_hdr_bleed_scale, RID p_auto_exposure, float p_auto_exposure_grey) {
|
void EffectsRD::gaussian_glow(RID p_source_rd_texture, RID p_back_texture, const Size2i &p_size, float p_strength, bool p_high_quality, bool p_first_pass, float p_luminance_cap, float p_exposure, float p_bloom, float p_hdr_bleed_treshold, float p_hdr_bleed_scale, RID p_auto_exposure, float p_auto_exposure_grey) {
|
||||||
zeromem(©.push_constant, sizeof(CopyPushConstant));
|
zeromem(©.push_constant, sizeof(CopyPushConstant));
|
||||||
|
|
||||||
CopyMode copy_mode = p_first_pass && p_auto_exposure.is_valid() ? COPY_MODE_GAUSSIAN_GLOW_AUTO_EXPOSURE : COPY_MODE_GAUSSIAN_GLOW;
|
CopyMode copy_mode = p_first_pass && p_auto_exposure.is_valid() ? COPY_MODE_GAUSSIAN_GLOW_AUTO_EXPOSURE : COPY_MODE_GAUSSIAN_GLOW;
|
||||||
@ -455,7 +455,7 @@ void RasterizerEffectsRD::gaussian_glow(RID p_source_rd_texture, RID p_back_text
|
|||||||
RD::get_singleton()->compute_list_end();
|
RD::get_singleton()->compute_list_end();
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerEffectsRD::screen_space_reflection(RID p_diffuse, RID p_normal_roughness, RenderingServer::EnvironmentSSRRoughnessQuality p_roughness_quality, RID p_blur_radius, RID p_blur_radius2, RID p_metallic, const Color &p_metallic_mask, RID p_depth, RID p_scale_depth, RID p_scale_normal, RID p_output, RID p_output_blur, const Size2i &p_screen_size, int p_max_steps, float p_fade_in, float p_fade_out, float p_tolerance, const CameraMatrix &p_camera) {
|
void EffectsRD::screen_space_reflection(RID p_diffuse, RID p_normal_roughness, RenderingServer::EnvironmentSSRRoughnessQuality p_roughness_quality, RID p_blur_radius, RID p_blur_radius2, RID p_metallic, const Color &p_metallic_mask, RID p_depth, RID p_scale_depth, RID p_scale_normal, RID p_output, RID p_output_blur, const Size2i &p_screen_size, int p_max_steps, float p_fade_in, float p_fade_out, float p_tolerance, const CameraMatrix &p_camera) {
|
||||||
RD::ComputeListID compute_list = RD::get_singleton()->compute_list_begin();
|
RD::ComputeListID compute_list = RD::get_singleton()->compute_list_begin();
|
||||||
|
|
||||||
int32_t x_groups = (p_screen_size.width - 1) / 8 + 1;
|
int32_t x_groups = (p_screen_size.width - 1) / 8 + 1;
|
||||||
@ -578,7 +578,7 @@ void RasterizerEffectsRD::screen_space_reflection(RID p_diffuse, RID p_normal_ro
|
|||||||
RD::get_singleton()->compute_list_end();
|
RD::get_singleton()->compute_list_end();
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerEffectsRD::sub_surface_scattering(RID p_diffuse, RID p_diffuse2, RID p_depth, const CameraMatrix &p_camera, const Size2i &p_screen_size, float p_scale, float p_depth_scale, RenderingServer::SubSurfaceScatteringQuality p_quality) {
|
void EffectsRD::sub_surface_scattering(RID p_diffuse, RID p_diffuse2, RID p_depth, const CameraMatrix &p_camera, const Size2i &p_screen_size, float p_scale, float p_depth_scale, RenderingServer::SubSurfaceScatteringQuality p_quality) {
|
||||||
RD::ComputeListID compute_list = RD::get_singleton()->compute_list_begin();
|
RD::ComputeListID compute_list = RD::get_singleton()->compute_list_begin();
|
||||||
|
|
||||||
int32_t x_groups = (p_screen_size.width - 1) / 8 + 1;
|
int32_t x_groups = (p_screen_size.width - 1) / 8 + 1;
|
||||||
@ -624,7 +624,7 @@ void RasterizerEffectsRD::sub_surface_scattering(RID p_diffuse, RID p_diffuse2,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerEffectsRD::merge_specular(RID p_dest_framebuffer, RID p_specular, RID p_base, RID p_reflection) {
|
void EffectsRD::merge_specular(RID p_dest_framebuffer, RID p_specular, RID p_base, RID p_reflection) {
|
||||||
RD::DrawListID draw_list = RD::get_singleton()->draw_list_begin(p_dest_framebuffer, RD::INITIAL_ACTION_KEEP, RD::FINAL_ACTION_READ, RD::INITIAL_ACTION_KEEP, RD::FINAL_ACTION_DISCARD, Vector<Color>());
|
RD::DrawListID draw_list = RD::get_singleton()->draw_list_begin(p_dest_framebuffer, RD::INITIAL_ACTION_KEEP, RD::FINAL_ACTION_READ, RD::INITIAL_ACTION_KEEP, RD::FINAL_ACTION_DISCARD, Vector<Color>());
|
||||||
|
|
||||||
if (p_reflection.is_valid()) {
|
if (p_reflection.is_valid()) {
|
||||||
@ -654,7 +654,7 @@ void RasterizerEffectsRD::merge_specular(RID p_dest_framebuffer, RID p_specular,
|
|||||||
RD::get_singleton()->draw_list_end();
|
RD::get_singleton()->draw_list_end();
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerEffectsRD::make_mipmap(RID p_source_rd_texture, RID p_dest_texture, const Size2i &p_size) {
|
void EffectsRD::make_mipmap(RID p_source_rd_texture, RID p_dest_texture, const Size2i &p_size) {
|
||||||
zeromem(©.push_constant, sizeof(CopyPushConstant));
|
zeromem(©.push_constant, sizeof(CopyPushConstant));
|
||||||
|
|
||||||
copy.push_constant.section[0] = 0;
|
copy.push_constant.section[0] = 0;
|
||||||
@ -674,7 +674,7 @@ void RasterizerEffectsRD::make_mipmap(RID p_source_rd_texture, RID p_dest_textur
|
|||||||
RD::get_singleton()->compute_list_end();
|
RD::get_singleton()->compute_list_end();
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerEffectsRD::copy_cubemap_to_dp(RID p_source_rd_texture, RID p_dest_texture, const Rect2i &p_rect, float p_z_near, float p_z_far, float p_bias, bool p_dp_flip) {
|
void EffectsRD::copy_cubemap_to_dp(RID p_source_rd_texture, RID p_dest_texture, const Rect2i &p_rect, float p_z_near, float p_z_far, float p_bias, bool p_dp_flip) {
|
||||||
CopyToDPPushConstant push_constant;
|
CopyToDPPushConstant push_constant;
|
||||||
push_constant.screen_size[0] = p_rect.size.x;
|
push_constant.screen_size[0] = p_rect.size.x;
|
||||||
push_constant.screen_size[1] = p_rect.size.y;
|
push_constant.screen_size[1] = p_rect.size.y;
|
||||||
@ -697,7 +697,7 @@ void RasterizerEffectsRD::copy_cubemap_to_dp(RID p_source_rd_texture, RID p_dest
|
|||||||
RD::get_singleton()->compute_list_end();
|
RD::get_singleton()->compute_list_end();
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerEffectsRD::tonemapper(RID p_source_color, RID p_dst_framebuffer, const TonemapSettings &p_settings) {
|
void EffectsRD::tonemapper(RID p_source_color, RID p_dst_framebuffer, const TonemapSettings &p_settings) {
|
||||||
zeromem(&tonemap.push_constant, sizeof(TonemapPushConstant));
|
zeromem(&tonemap.push_constant, sizeof(TonemapPushConstant));
|
||||||
|
|
||||||
tonemap.push_constant.use_bcs = p_settings.use_bcs;
|
tonemap.push_constant.use_bcs = p_settings.use_bcs;
|
||||||
@ -749,7 +749,7 @@ void RasterizerEffectsRD::tonemapper(RID p_source_color, RID p_dst_framebuffer,
|
|||||||
RD::get_singleton()->draw_list_end();
|
RD::get_singleton()->draw_list_end();
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerEffectsRD::luminance_reduction(RID p_source_texture, const Size2i p_source_size, const Vector<RID> p_reduce, RID p_prev_luminance, float p_min_luminance, float p_max_luminance, float p_adjust, bool p_set) {
|
void EffectsRD::luminance_reduction(RID p_source_texture, const Size2i p_source_size, const Vector<RID> p_reduce, RID p_prev_luminance, float p_min_luminance, float p_max_luminance, float p_adjust, bool p_set) {
|
||||||
luminance_reduce.push_constant.source_size[0] = p_source_size.x;
|
luminance_reduce.push_constant.source_size[0] = p_source_size.x;
|
||||||
luminance_reduce.push_constant.source_size[1] = p_source_size.y;
|
luminance_reduce.push_constant.source_size[1] = p_source_size.y;
|
||||||
luminance_reduce.push_constant.max_luminance = p_max_luminance;
|
luminance_reduce.push_constant.max_luminance = p_max_luminance;
|
||||||
@ -791,7 +791,7 @@ void RasterizerEffectsRD::luminance_reduction(RID p_source_texture, const Size2i
|
|||||||
RD::get_singleton()->compute_list_end();
|
RD::get_singleton()->compute_list_end();
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerEffectsRD::bokeh_dof(RID p_base_texture, RID p_depth_texture, const Size2i &p_base_texture_size, RID p_secondary_texture, RID p_halfsize_texture1, RID p_halfsize_texture2, bool p_dof_far, float p_dof_far_begin, float p_dof_far_size, bool p_dof_near, float p_dof_near_begin, float p_dof_near_size, float p_bokeh_size, RenderingServer::DOFBokehShape p_bokeh_shape, RS::DOFBlurQuality p_quality, bool p_use_jitter, float p_cam_znear, float p_cam_zfar, bool p_cam_orthogonal) {
|
void EffectsRD::bokeh_dof(RID p_base_texture, RID p_depth_texture, const Size2i &p_base_texture_size, RID p_secondary_texture, RID p_halfsize_texture1, RID p_halfsize_texture2, bool p_dof_far, float p_dof_far_begin, float p_dof_far_size, bool p_dof_near, float p_dof_near_begin, float p_dof_near_size, float p_bokeh_size, RenderingServer::DOFBokehShape p_bokeh_shape, RS::DOFBlurQuality p_quality, bool p_use_jitter, float p_cam_znear, float p_cam_zfar, bool p_cam_orthogonal) {
|
||||||
bokeh.push_constant.blur_far_active = p_dof_far;
|
bokeh.push_constant.blur_far_active = p_dof_far;
|
||||||
bokeh.push_constant.blur_far_begin = p_dof_far_begin;
|
bokeh.push_constant.blur_far_begin = p_dof_far_begin;
|
||||||
bokeh.push_constant.blur_far_end = p_dof_far_begin + p_dof_far_size;
|
bokeh.push_constant.blur_far_end = p_dof_far_begin + p_dof_far_size;
|
||||||
@ -951,7 +951,7 @@ void RasterizerEffectsRD::bokeh_dof(RID p_base_texture, RID p_depth_texture, con
|
|||||||
RD::get_singleton()->compute_list_end();
|
RD::get_singleton()->compute_list_end();
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerEffectsRD::generate_ssao(RID p_depth_buffer, RID p_normal_buffer, const Size2i &p_depth_buffer_size, RID p_depth_mipmaps_texture, const Vector<RID> &depth_mipmaps, RID p_ao1, bool p_half_size, RID p_ao2, RID p_upscale_buffer, float p_intensity, float p_radius, float p_bias, const CameraMatrix &p_projection, RS::EnvironmentSSAOQuality p_quality, RS::EnvironmentSSAOBlur p_blur, float p_edge_sharpness) {
|
void EffectsRD::generate_ssao(RID p_depth_buffer, RID p_normal_buffer, const Size2i &p_depth_buffer_size, RID p_depth_mipmaps_texture, const Vector<RID> &depth_mipmaps, RID p_ao1, bool p_half_size, RID p_ao2, RID p_upscale_buffer, float p_intensity, float p_radius, float p_bias, const CameraMatrix &p_projection, RS::EnvironmentSSAOQuality p_quality, RS::EnvironmentSSAOBlur p_blur, float p_edge_sharpness) {
|
||||||
//minify first
|
//minify first
|
||||||
ssao.minify_push_constant.orthogonal = p_projection.is_orthogonal();
|
ssao.minify_push_constant.orthogonal = p_projection.is_orthogonal();
|
||||||
ssao.minify_push_constant.z_near = p_projection.get_z_near();
|
ssao.minify_push_constant.z_near = p_projection.get_z_near();
|
||||||
@ -1104,7 +1104,7 @@ void RasterizerEffectsRD::generate_ssao(RID p_depth_buffer, RID p_normal_buffer,
|
|||||||
RD::get_singleton()->compute_list_end();
|
RD::get_singleton()->compute_list_end();
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerEffectsRD::roughness_limit(RID p_source_normal, RID p_roughness, const Size2i &p_size, float p_curve) {
|
void EffectsRD::roughness_limit(RID p_source_normal, RID p_roughness, const Size2i &p_size, float p_curve) {
|
||||||
roughness_limiter.push_constant.screen_size[0] = p_size.x;
|
roughness_limiter.push_constant.screen_size[0] = p_size.x;
|
||||||
roughness_limiter.push_constant.screen_size[1] = p_size.y;
|
roughness_limiter.push_constant.screen_size[1] = p_size.y;
|
||||||
roughness_limiter.push_constant.curve = p_curve;
|
roughness_limiter.push_constant.curve = p_curve;
|
||||||
@ -1124,7 +1124,7 @@ void RasterizerEffectsRD::roughness_limit(RID p_source_normal, RID p_roughness,
|
|||||||
RD::get_singleton()->compute_list_end();
|
RD::get_singleton()->compute_list_end();
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerEffectsRD::cubemap_roughness(RID p_source_rd_texture, RID p_dest_framebuffer, uint32_t p_face_id, uint32_t p_sample_count, float p_roughness, float p_size) {
|
void EffectsRD::cubemap_roughness(RID p_source_rd_texture, RID p_dest_framebuffer, uint32_t p_face_id, uint32_t p_sample_count, float p_roughness, float p_size) {
|
||||||
zeromem(&roughness.push_constant, sizeof(CubemapRoughnessPushConstant));
|
zeromem(&roughness.push_constant, sizeof(CubemapRoughnessPushConstant));
|
||||||
|
|
||||||
roughness.push_constant.face_id = p_face_id > 9 ? 0 : p_face_id;
|
roughness.push_constant.face_id = p_face_id > 9 ? 0 : p_face_id;
|
||||||
@ -1149,7 +1149,7 @@ void RasterizerEffectsRD::cubemap_roughness(RID p_source_rd_texture, RID p_dest_
|
|||||||
RD::get_singleton()->compute_list_end();
|
RD::get_singleton()->compute_list_end();
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerEffectsRD::cubemap_downsample(RID p_source_cubemap, RID p_dest_cubemap, const Size2i &p_size) {
|
void EffectsRD::cubemap_downsample(RID p_source_cubemap, RID p_dest_cubemap, const Size2i &p_size) {
|
||||||
cubemap_downsampler.push_constant.face_size = p_size.x;
|
cubemap_downsampler.push_constant.face_size = p_size.x;
|
||||||
|
|
||||||
RD::ComputeListID compute_list = RD::get_singleton()->compute_list_begin();
|
RD::ComputeListID compute_list = RD::get_singleton()->compute_list_begin();
|
||||||
@ -1167,7 +1167,7 @@ void RasterizerEffectsRD::cubemap_downsample(RID p_source_cubemap, RID p_dest_cu
|
|||||||
RD::get_singleton()->compute_list_end();
|
RD::get_singleton()->compute_list_end();
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerEffectsRD::cubemap_filter(RID p_source_cubemap, Vector<RID> p_dest_cubemap, bool p_use_array) {
|
void EffectsRD::cubemap_filter(RID p_source_cubemap, Vector<RID> p_dest_cubemap, bool p_use_array) {
|
||||||
Vector<RD::Uniform> uniforms;
|
Vector<RD::Uniform> uniforms;
|
||||||
for (int i = 0; i < p_dest_cubemap.size(); i++) {
|
for (int i = 0; i < p_dest_cubemap.size(); i++) {
|
||||||
RD::Uniform u;
|
RD::Uniform u;
|
||||||
@ -1196,7 +1196,7 @@ void RasterizerEffectsRD::cubemap_filter(RID p_source_cubemap, Vector<RID> p_des
|
|||||||
RD::get_singleton()->compute_list_end();
|
RD::get_singleton()->compute_list_end();
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerEffectsRD::render_sky(RD::DrawListID p_list, float p_time, RID p_fb, RID p_samplers, RID p_fog, RenderPipelineVertexFormatCacheRD *p_pipeline, RID p_uniform_set, RID p_texture_set, const CameraMatrix &p_camera, const Basis &p_orientation, float p_multiplier, const Vector3 &p_position) {
|
void EffectsRD::render_sky(RD::DrawListID p_list, float p_time, RID p_fb, RID p_samplers, RID p_fog, PipelineCacheRD *p_pipeline, RID p_uniform_set, RID p_texture_set, const CameraMatrix &p_camera, const Basis &p_orientation, float p_multiplier, const Vector3 &p_position) {
|
||||||
SkyPushConstant sky_push_constant;
|
SkyPushConstant sky_push_constant;
|
||||||
|
|
||||||
zeromem(&sky_push_constant, sizeof(SkyPushConstant));
|
zeromem(&sky_push_constant, sizeof(SkyPushConstant));
|
||||||
@ -1232,7 +1232,7 @@ void RasterizerEffectsRD::render_sky(RD::DrawListID p_list, float p_time, RID p_
|
|||||||
RD::get_singleton()->draw_list_draw(draw_list, true);
|
RD::get_singleton()->draw_list_draw(draw_list, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerEffectsRD::resolve_gi(RID p_source_depth, RID p_source_normal_roughness, RID p_source_giprobe, RID p_dest_depth, RID p_dest_normal_roughness, RID p_dest_giprobe, Vector2i p_screen_size, int p_samples) {
|
void EffectsRD::resolve_gi(RID p_source_depth, RID p_source_normal_roughness, RID p_source_giprobe, RID p_dest_depth, RID p_dest_normal_roughness, RID p_dest_giprobe, Vector2i p_screen_size, int p_samples) {
|
||||||
ResolvePushConstant push_constant;
|
ResolvePushConstant push_constant;
|
||||||
push_constant.screen_size[0] = p_screen_size.x;
|
push_constant.screen_size[0] = p_screen_size.x;
|
||||||
push_constant.screen_size[1] = p_screen_size.y;
|
push_constant.screen_size[1] = p_screen_size.y;
|
||||||
@ -1254,7 +1254,7 @@ void RasterizerEffectsRD::resolve_gi(RID p_source_depth, RID p_source_normal_rou
|
|||||||
RD::get_singleton()->compute_list_end();
|
RD::get_singleton()->compute_list_end();
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerEffectsRD::reduce_shadow(RID p_source_shadow, RID p_dest_shadow, const Size2i &p_source_size, const Rect2i &p_source_rect, int p_shrink_limit, RD::ComputeListID compute_list) {
|
void EffectsRD::reduce_shadow(RID p_source_shadow, RID p_dest_shadow, const Size2i &p_source_size, const Rect2i &p_source_rect, int p_shrink_limit, RD::ComputeListID compute_list) {
|
||||||
uint32_t push_constant[8] = { (uint32_t)p_source_size.x, (uint32_t)p_source_size.y, (uint32_t)p_source_rect.position.x, (uint32_t)p_source_rect.position.y, (uint32_t)p_shrink_limit, 0, 0, 0 };
|
uint32_t push_constant[8] = { (uint32_t)p_source_size.x, (uint32_t)p_source_size.y, (uint32_t)p_source_rect.position.x, (uint32_t)p_source_rect.position.y, (uint32_t)p_shrink_limit, 0, 0, 0 };
|
||||||
|
|
||||||
RD::get_singleton()->compute_list_bind_compute_pipeline(compute_list, shadow_reduce.pipelines[SHADOW_REDUCE_REDUCE]);
|
RD::get_singleton()->compute_list_bind_compute_pipeline(compute_list, shadow_reduce.pipelines[SHADOW_REDUCE_REDUCE]);
|
||||||
@ -1263,7 +1263,7 @@ void RasterizerEffectsRD::reduce_shadow(RID p_source_shadow, RID p_dest_shadow,
|
|||||||
|
|
||||||
RD::get_singleton()->compute_list_dispatch_threads(compute_list, p_source_rect.size.width, p_source_rect.size.height, 1, 8, 8, 1);
|
RD::get_singleton()->compute_list_dispatch_threads(compute_list, p_source_rect.size.width, p_source_rect.size.height, 1, 8, 8, 1);
|
||||||
}
|
}
|
||||||
void RasterizerEffectsRD::filter_shadow(RID p_shadow, RID p_backing_shadow, const Size2i &p_source_size, const Rect2i &p_source_rect, RenderingServer::EnvVolumetricFogShadowFilter p_filter, RD::ComputeListID compute_list, bool p_vertical, bool p_horizontal) {
|
void EffectsRD::filter_shadow(RID p_shadow, RID p_backing_shadow, const Size2i &p_source_size, const Rect2i &p_source_rect, RenderingServer::EnvVolumetricFogShadowFilter p_filter, RD::ComputeListID compute_list, bool p_vertical, bool p_horizontal) {
|
||||||
uint32_t push_constant[8] = { (uint32_t)p_source_size.x, (uint32_t)p_source_size.y, (uint32_t)p_source_rect.position.x, (uint32_t)p_source_rect.position.y, 0, 0, 0, 0 };
|
uint32_t push_constant[8] = { (uint32_t)p_source_size.x, (uint32_t)p_source_size.y, (uint32_t)p_source_rect.position.x, (uint32_t)p_source_rect.position.y, 0, 0, 0, 0 };
|
||||||
|
|
||||||
switch (p_filter) {
|
switch (p_filter) {
|
||||||
@ -1299,7 +1299,7 @@ void RasterizerEffectsRD::filter_shadow(RID p_shadow, RID p_backing_shadow, cons
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerEffectsRD::sort_buffer(RID p_uniform_set, int p_size) {
|
void EffectsRD::sort_buffer(RID p_uniform_set, int p_size) {
|
||||||
Sort::PushConstant push_constant;
|
Sort::PushConstant push_constant;
|
||||||
push_constant.total_elements = p_size;
|
push_constant.total_elements = p_size;
|
||||||
|
|
||||||
@ -1368,7 +1368,7 @@ void RasterizerEffectsRD::sort_buffer(RID p_uniform_set, int p_size) {
|
|||||||
RD::get_singleton()->compute_list_end();
|
RD::get_singleton()->compute_list_end();
|
||||||
}
|
}
|
||||||
|
|
||||||
RasterizerEffectsRD::RasterizerEffectsRD() {
|
EffectsRD::EffectsRD() {
|
||||||
{ // Initialize copy
|
{ // Initialize copy
|
||||||
Vector<String> copy_modes;
|
Vector<String> copy_modes;
|
||||||
copy_modes.push_back("\n#define MODE_GAUSSIAN_BLUR\n");
|
copy_modes.push_back("\n#define MODE_GAUSSIAN_BLUR\n");
|
||||||
@ -1763,7 +1763,7 @@ RasterizerEffectsRD::RasterizerEffectsRD() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
RasterizerEffectsRD::~RasterizerEffectsRD() {
|
EffectsRD::~EffectsRD() {
|
||||||
if (RD::get_singleton()->uniform_set_is_valid(filter.image_uniform_set)) {
|
if (RD::get_singleton()->uniform_set_is_valid(filter.image_uniform_set)) {
|
||||||
RD::get_singleton()->free(filter.image_uniform_set);
|
RD::get_singleton()->free(filter.image_uniform_set);
|
||||||
}
|
}
|
@ -1,5 +1,5 @@
|
|||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
/* rasterizer_effects_rd.h */
|
/* effects_rd.h */
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
/* This file is part of: */
|
/* This file is part of: */
|
||||||
/* GODOT ENGINE */
|
/* GODOT ENGINE */
|
||||||
@ -28,36 +28,36 @@
|
|||||||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
|
|
||||||
#ifndef RASTERIZER_EFFECTS_RD_H
|
#ifndef EFFECTS_RD_H
|
||||||
#define RASTERIZER_EFFECTS_RD_H
|
#define EFFECTS_RD_H
|
||||||
|
|
||||||
#include "core/math/camera_matrix.h"
|
#include "core/math/camera_matrix.h"
|
||||||
#include "servers/rendering/rasterizer_rd/render_pipeline_vertex_format_cache_rd.h"
|
#include "servers/rendering/renderer_rd/pipeline_cache_rd.h"
|
||||||
#include "servers/rendering/rasterizer_rd/shaders/bokeh_dof.glsl.gen.h"
|
#include "servers/rendering/renderer_rd/shaders/bokeh_dof.glsl.gen.h"
|
||||||
#include "servers/rendering/rasterizer_rd/shaders/copy.glsl.gen.h"
|
#include "servers/rendering/renderer_rd/shaders/copy.glsl.gen.h"
|
||||||
#include "servers/rendering/rasterizer_rd/shaders/copy_to_fb.glsl.gen.h"
|
#include "servers/rendering/renderer_rd/shaders/copy_to_fb.glsl.gen.h"
|
||||||
#include "servers/rendering/rasterizer_rd/shaders/cube_to_dp.glsl.gen.h"
|
#include "servers/rendering/renderer_rd/shaders/cube_to_dp.glsl.gen.h"
|
||||||
#include "servers/rendering/rasterizer_rd/shaders/cubemap_downsampler.glsl.gen.h"
|
#include "servers/rendering/renderer_rd/shaders/cubemap_downsampler.glsl.gen.h"
|
||||||
#include "servers/rendering/rasterizer_rd/shaders/cubemap_filter.glsl.gen.h"
|
#include "servers/rendering/renderer_rd/shaders/cubemap_filter.glsl.gen.h"
|
||||||
#include "servers/rendering/rasterizer_rd/shaders/cubemap_roughness.glsl.gen.h"
|
#include "servers/rendering/renderer_rd/shaders/cubemap_roughness.glsl.gen.h"
|
||||||
#include "servers/rendering/rasterizer_rd/shaders/luminance_reduce.glsl.gen.h"
|
#include "servers/rendering/renderer_rd/shaders/luminance_reduce.glsl.gen.h"
|
||||||
#include "servers/rendering/rasterizer_rd/shaders/resolve.glsl.gen.h"
|
#include "servers/rendering/renderer_rd/shaders/resolve.glsl.gen.h"
|
||||||
#include "servers/rendering/rasterizer_rd/shaders/roughness_limiter.glsl.gen.h"
|
#include "servers/rendering/renderer_rd/shaders/roughness_limiter.glsl.gen.h"
|
||||||
#include "servers/rendering/rasterizer_rd/shaders/screen_space_reflection.glsl.gen.h"
|
#include "servers/rendering/renderer_rd/shaders/screen_space_reflection.glsl.gen.h"
|
||||||
#include "servers/rendering/rasterizer_rd/shaders/screen_space_reflection_filter.glsl.gen.h"
|
#include "servers/rendering/renderer_rd/shaders/screen_space_reflection_filter.glsl.gen.h"
|
||||||
#include "servers/rendering/rasterizer_rd/shaders/screen_space_reflection_scale.glsl.gen.h"
|
#include "servers/rendering/renderer_rd/shaders/screen_space_reflection_scale.glsl.gen.h"
|
||||||
#include "servers/rendering/rasterizer_rd/shaders/shadow_reduce.glsl.gen.h"
|
#include "servers/rendering/renderer_rd/shaders/shadow_reduce.glsl.gen.h"
|
||||||
#include "servers/rendering/rasterizer_rd/shaders/sort.glsl.gen.h"
|
#include "servers/rendering/renderer_rd/shaders/sort.glsl.gen.h"
|
||||||
#include "servers/rendering/rasterizer_rd/shaders/specular_merge.glsl.gen.h"
|
#include "servers/rendering/renderer_rd/shaders/specular_merge.glsl.gen.h"
|
||||||
#include "servers/rendering/rasterizer_rd/shaders/ssao.glsl.gen.h"
|
#include "servers/rendering/renderer_rd/shaders/ssao.glsl.gen.h"
|
||||||
#include "servers/rendering/rasterizer_rd/shaders/ssao_blur.glsl.gen.h"
|
#include "servers/rendering/renderer_rd/shaders/ssao_blur.glsl.gen.h"
|
||||||
#include "servers/rendering/rasterizer_rd/shaders/ssao_minify.glsl.gen.h"
|
#include "servers/rendering/renderer_rd/shaders/ssao_minify.glsl.gen.h"
|
||||||
#include "servers/rendering/rasterizer_rd/shaders/subsurface_scattering.glsl.gen.h"
|
#include "servers/rendering/renderer_rd/shaders/subsurface_scattering.glsl.gen.h"
|
||||||
#include "servers/rendering/rasterizer_rd/shaders/tonemap.glsl.gen.h"
|
#include "servers/rendering/renderer_rd/shaders/tonemap.glsl.gen.h"
|
||||||
|
|
||||||
#include "servers/rendering_server.h"
|
#include "servers/rendering_server.h"
|
||||||
|
|
||||||
class RasterizerEffectsRD {
|
class EffectsRD {
|
||||||
enum CopyMode {
|
enum CopyMode {
|
||||||
COPY_MODE_GAUSSIAN_COPY,
|
COPY_MODE_GAUSSIAN_COPY,
|
||||||
COPY_MODE_GAUSSIAN_COPY_8BIT,
|
COPY_MODE_GAUSSIAN_COPY_8BIT,
|
||||||
@ -144,7 +144,7 @@ class RasterizerEffectsRD {
|
|||||||
CopyToFbPushConstant push_constant;
|
CopyToFbPushConstant push_constant;
|
||||||
CopyToFbShaderRD shader;
|
CopyToFbShaderRD shader;
|
||||||
RID shader_version;
|
RID shader_version;
|
||||||
RenderPipelineVertexFormatCacheRD pipelines[COPY_TO_FB_MAX];
|
PipelineCacheRD pipelines[COPY_TO_FB_MAX];
|
||||||
|
|
||||||
} copy_to_fb;
|
} copy_to_fb;
|
||||||
|
|
||||||
@ -206,7 +206,7 @@ class RasterizerEffectsRD {
|
|||||||
TonemapPushConstant push_constant;
|
TonemapPushConstant push_constant;
|
||||||
TonemapShaderRD shader;
|
TonemapShaderRD shader;
|
||||||
RID shader_version;
|
RID shader_version;
|
||||||
RenderPipelineVertexFormatCacheRD pipelines[TONEMAP_MODE_MAX];
|
PipelineCacheRD pipelines[TONEMAP_MODE_MAX];
|
||||||
} tonemap;
|
} tonemap;
|
||||||
|
|
||||||
enum LuminanceReduceMode {
|
enum LuminanceReduceMode {
|
||||||
@ -426,7 +426,7 @@ class RasterizerEffectsRD {
|
|||||||
struct SpecularMerge {
|
struct SpecularMerge {
|
||||||
SpecularMergeShaderRD shader;
|
SpecularMergeShaderRD shader;
|
||||||
RID shader_version;
|
RID shader_version;
|
||||||
RenderPipelineVertexFormatCacheRD pipelines[SPECULAR_MERGE_MAX];
|
PipelineCacheRD pipelines[SPECULAR_MERGE_MAX];
|
||||||
|
|
||||||
} specular_merge;
|
} specular_merge;
|
||||||
|
|
||||||
@ -671,7 +671,7 @@ public:
|
|||||||
void roughness_limit(RID p_source_normal, RID p_roughness, const Size2i &p_size, float p_curve);
|
void roughness_limit(RID p_source_normal, RID p_roughness, const Size2i &p_size, float p_curve);
|
||||||
void cubemap_downsample(RID p_source_cubemap, RID p_dest_cubemap, const Size2i &p_size);
|
void cubemap_downsample(RID p_source_cubemap, RID p_dest_cubemap, const Size2i &p_size);
|
||||||
void cubemap_filter(RID p_source_cubemap, Vector<RID> p_dest_cubemap, bool p_use_array);
|
void cubemap_filter(RID p_source_cubemap, Vector<RID> p_dest_cubemap, bool p_use_array);
|
||||||
void render_sky(RD::DrawListID p_list, float p_time, RID p_fb, RID p_samplers, RID p_fog, RenderPipelineVertexFormatCacheRD *p_pipeline, RID p_uniform_set, RID p_texture_set, const CameraMatrix &p_camera, const Basis &p_orientation, float p_multiplier, const Vector3 &p_position);
|
void render_sky(RD::DrawListID p_list, float p_time, RID p_fb, RID p_samplers, RID p_fog, PipelineCacheRD *p_pipeline, RID p_uniform_set, RID p_texture_set, const CameraMatrix &p_camera, const Basis &p_orientation, float p_multiplier, const Vector3 &p_position);
|
||||||
|
|
||||||
void screen_space_reflection(RID p_diffuse, RID p_normal_roughness, RS::EnvironmentSSRRoughnessQuality p_roughness_quality, RID p_blur_radius, RID p_blur_radius2, RID p_metallic, const Color &p_metallic_mask, RID p_depth, RID p_scale_depth, RID p_scale_normal, RID p_output, RID p_output_blur, const Size2i &p_screen_size, int p_max_steps, float p_fade_in, float p_fade_out, float p_tolerance, const CameraMatrix &p_camera);
|
void screen_space_reflection(RID p_diffuse, RID p_normal_roughness, RS::EnvironmentSSRRoughnessQuality p_roughness_quality, RID p_blur_radius, RID p_blur_radius2, RID p_metallic, const Color &p_metallic_mask, RID p_depth, RID p_scale_depth, RID p_scale_normal, RID p_output, RID p_output_blur, const Size2i &p_screen_size, int p_max_steps, float p_fade_in, float p_fade_out, float p_tolerance, const CameraMatrix &p_camera);
|
||||||
void merge_specular(RID p_dest_framebuffer, RID p_specular, RID p_base, RID p_reflection);
|
void merge_specular(RID p_dest_framebuffer, RID p_specular, RID p_base, RID p_reflection);
|
||||||
@ -684,8 +684,8 @@ public:
|
|||||||
|
|
||||||
void sort_buffer(RID p_uniform_set, int p_size);
|
void sort_buffer(RID p_uniform_set, int p_size);
|
||||||
|
|
||||||
RasterizerEffectsRD();
|
EffectsRD();
|
||||||
~RasterizerEffectsRD();
|
~EffectsRD();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // !RASTERIZER_EFFECTS_RD_H
|
#endif // !RASTERIZER_EFFECTS_RD_H
|
@ -31,7 +31,7 @@
|
|||||||
#ifndef LIGHT_CLUSTER_BUILDER_H
|
#ifndef LIGHT_CLUSTER_BUILDER_H
|
||||||
#define LIGHT_CLUSTER_BUILDER_H
|
#define LIGHT_CLUSTER_BUILDER_H
|
||||||
|
|
||||||
#include "servers/rendering/rasterizer_rd/rasterizer_storage_rd.h"
|
#include "servers/rendering/renderer_rd/renderer_storage_rd.h"
|
||||||
|
|
||||||
class LightClusterBuilder {
|
class LightClusterBuilder {
|
||||||
public:
|
public:
|
@ -1,5 +1,5 @@
|
|||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
/* render_pipeline_vertex_format_cache_rd.cpp */
|
/* pipeline_cache_rd.cpp */
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
/* This file is part of: */
|
/* This file is part of: */
|
||||||
/* GODOT ENGINE */
|
/* GODOT ENGINE */
|
||||||
@ -28,10 +28,10 @@
|
|||||||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
|
|
||||||
#include "render_pipeline_vertex_format_cache_rd.h"
|
#include "pipeline_cache_rd.h"
|
||||||
#include "core/os/memory.h"
|
#include "core/os/memory.h"
|
||||||
|
|
||||||
RID RenderPipelineVertexFormatCacheRD::_generate_version(RD::VertexFormatID p_vertex_format_id, RD::FramebufferFormatID p_framebuffer_format_id, bool p_wireframe) {
|
RID PipelineCacheRD::_generate_version(RD::VertexFormatID p_vertex_format_id, RD::FramebufferFormatID p_framebuffer_format_id, bool p_wireframe) {
|
||||||
RD::PipelineMultisampleState multisample_state_version = multisample_state;
|
RD::PipelineMultisampleState multisample_state_version = multisample_state;
|
||||||
multisample_state_version.sample_count = RD::get_singleton()->framebuffer_format_get_texture_samples(p_framebuffer_format_id);
|
multisample_state_version.sample_count = RD::get_singleton()->framebuffer_format_get_texture_samples(p_framebuffer_format_id);
|
||||||
|
|
||||||
@ -49,7 +49,7 @@ RID RenderPipelineVertexFormatCacheRD::_generate_version(RD::VertexFormatID p_ve
|
|||||||
return pipeline;
|
return pipeline;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderPipelineVertexFormatCacheRD::_clear() {
|
void PipelineCacheRD::_clear() {
|
||||||
if (versions) {
|
if (versions) {
|
||||||
for (uint32_t i = 0; i < version_count; i++) {
|
for (uint32_t i = 0; i < version_count; i++) {
|
||||||
//shader may be gone, so this may not be valid
|
//shader may be gone, so this may not be valid
|
||||||
@ -63,7 +63,7 @@ void RenderPipelineVertexFormatCacheRD::_clear() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderPipelineVertexFormatCacheRD::setup(RID p_shader, RD::RenderPrimitive p_primitive, const RD::PipelineRasterizationState &p_rasterization_state, RD::PipelineMultisampleState p_multisample, const RD::PipelineDepthStencilState &p_depth_stencil_state, const RD::PipelineColorBlendState &p_blend_state, int p_dynamic_state_flags) {
|
void PipelineCacheRD::setup(RID p_shader, RD::RenderPrimitive p_primitive, const RD::PipelineRasterizationState &p_rasterization_state, RD::PipelineMultisampleState p_multisample, const RD::PipelineDepthStencilState &p_depth_stencil_state, const RD::PipelineColorBlendState &p_blend_state, int p_dynamic_state_flags) {
|
||||||
ERR_FAIL_COND(p_shader.is_null());
|
ERR_FAIL_COND(p_shader.is_null());
|
||||||
_clear();
|
_clear();
|
||||||
shader = p_shader;
|
shader = p_shader;
|
||||||
@ -76,24 +76,24 @@ void RenderPipelineVertexFormatCacheRD::setup(RID p_shader, RD::RenderPrimitive
|
|||||||
dynamic_state_flags = p_dynamic_state_flags;
|
dynamic_state_flags = p_dynamic_state_flags;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderPipelineVertexFormatCacheRD::update_shader(RID p_shader) {
|
void PipelineCacheRD::update_shader(RID p_shader) {
|
||||||
ERR_FAIL_COND(p_shader.is_null());
|
ERR_FAIL_COND(p_shader.is_null());
|
||||||
_clear();
|
_clear();
|
||||||
setup(p_shader, render_primitive, rasterization_state, multisample_state, depth_stencil_state, blend_state, dynamic_state_flags);
|
setup(p_shader, render_primitive, rasterization_state, multisample_state, depth_stencil_state, blend_state, dynamic_state_flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderPipelineVertexFormatCacheRD::clear() {
|
void PipelineCacheRD::clear() {
|
||||||
_clear();
|
_clear();
|
||||||
shader = RID(); //clear shader
|
shader = RID(); //clear shader
|
||||||
input_mask = 0;
|
input_mask = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
RenderPipelineVertexFormatCacheRD::RenderPipelineVertexFormatCacheRD() {
|
PipelineCacheRD::PipelineCacheRD() {
|
||||||
version_count = 0;
|
version_count = 0;
|
||||||
versions = nullptr;
|
versions = nullptr;
|
||||||
input_mask = 0;
|
input_mask = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
RenderPipelineVertexFormatCacheRD::~RenderPipelineVertexFormatCacheRD() {
|
PipelineCacheRD::~PipelineCacheRD() {
|
||||||
_clear();
|
_clear();
|
||||||
}
|
}
|
@ -1,5 +1,5 @@
|
|||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
/* render_pipeline_vertex_format_cache_rd.h */
|
/* pipeline_cache_rd.h */
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
/* This file is part of: */
|
/* This file is part of: */
|
||||||
/* GODOT ENGINE */
|
/* GODOT ENGINE */
|
||||||
@ -28,13 +28,13 @@
|
|||||||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
|
|
||||||
#ifndef RENDER_PIPELINE_CACHE_RD_H
|
#ifndef PIPELINE_CACHE_RD_H
|
||||||
#define RENDER_PIPELINE_CACHE_RD_H
|
#define PIPELINE_CACHE_RD_H
|
||||||
|
|
||||||
#include "core/os/spin_lock.h"
|
#include "core/os/spin_lock.h"
|
||||||
#include "servers/rendering/rendering_device.h"
|
#include "servers/rendering/rendering_device.h"
|
||||||
|
|
||||||
class RenderPipelineVertexFormatCacheRD {
|
class PipelineCacheRD {
|
||||||
SpinLock spin_lock;
|
SpinLock spin_lock;
|
||||||
|
|
||||||
RID shader;
|
RID shader;
|
||||||
@ -89,8 +89,8 @@ public:
|
|||||||
return input_mask;
|
return input_mask;
|
||||||
}
|
}
|
||||||
void clear();
|
void clear();
|
||||||
RenderPipelineVertexFormatCacheRD();
|
PipelineCacheRD();
|
||||||
~RenderPipelineVertexFormatCacheRD();
|
~PipelineCacheRD();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // RENDER_PIPELINE_CACHE_RD_H
|
#endif // RENDER_PIPELINE_CACHE_RD_H
|
@ -1,5 +1,5 @@
|
|||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
/* rasterizer_canvas_rd.cpp */
|
/* renderer_canvas_render_rd.cpp */
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
/* This file is part of: */
|
/* This file is part of: */
|
||||||
/* GODOT ENGINE */
|
/* GODOT ENGINE */
|
||||||
@ -28,13 +28,13 @@
|
|||||||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
|
|
||||||
#include "rasterizer_canvas_rd.h"
|
#include "renderer_canvas_render_rd.h"
|
||||||
#include "core/config/project_settings.h"
|
#include "core/config/project_settings.h"
|
||||||
#include "core/math/geometry_2d.h"
|
#include "core/math/geometry_2d.h"
|
||||||
#include "core/math/math_funcs.h"
|
#include "core/math/math_funcs.h"
|
||||||
#include "rasterizer_rd.h"
|
#include "renderer_compositor_rd.h"
|
||||||
|
|
||||||
void RasterizerCanvasRD::_update_transform_2d_to_mat4(const Transform2D &p_transform, float *p_mat4) {
|
void RendererCanvasRenderRD::_update_transform_2d_to_mat4(const Transform2D &p_transform, float *p_mat4) {
|
||||||
p_mat4[0] = p_transform.elements[0][0];
|
p_mat4[0] = p_transform.elements[0][0];
|
||||||
p_mat4[1] = p_transform.elements[0][1];
|
p_mat4[1] = p_transform.elements[0][1];
|
||||||
p_mat4[2] = 0;
|
p_mat4[2] = 0;
|
||||||
@ -53,7 +53,7 @@ void RasterizerCanvasRD::_update_transform_2d_to_mat4(const Transform2D &p_trans
|
|||||||
p_mat4[15] = 1;
|
p_mat4[15] = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerCanvasRD::_update_transform_2d_to_mat2x4(const Transform2D &p_transform, float *p_mat2x4) {
|
void RendererCanvasRenderRD::_update_transform_2d_to_mat2x4(const Transform2D &p_transform, float *p_mat2x4) {
|
||||||
p_mat2x4[0] = p_transform.elements[0][0];
|
p_mat2x4[0] = p_transform.elements[0][0];
|
||||||
p_mat2x4[1] = p_transform.elements[1][0];
|
p_mat2x4[1] = p_transform.elements[1][0];
|
||||||
p_mat2x4[2] = 0;
|
p_mat2x4[2] = 0;
|
||||||
@ -65,7 +65,7 @@ void RasterizerCanvasRD::_update_transform_2d_to_mat2x4(const Transform2D &p_tra
|
|||||||
p_mat2x4[7] = p_transform.elements[2][1];
|
p_mat2x4[7] = p_transform.elements[2][1];
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerCanvasRD::_update_transform_2d_to_mat2x3(const Transform2D &p_transform, float *p_mat2x3) {
|
void RendererCanvasRenderRD::_update_transform_2d_to_mat2x3(const Transform2D &p_transform, float *p_mat2x3) {
|
||||||
p_mat2x3[0] = p_transform.elements[0][0];
|
p_mat2x3[0] = p_transform.elements[0][0];
|
||||||
p_mat2x3[1] = p_transform.elements[0][1];
|
p_mat2x3[1] = p_transform.elements[0][1];
|
||||||
p_mat2x3[2] = p_transform.elements[1][0];
|
p_mat2x3[2] = p_transform.elements[1][0];
|
||||||
@ -74,7 +74,7 @@ void RasterizerCanvasRD::_update_transform_2d_to_mat2x3(const Transform2D &p_tra
|
|||||||
p_mat2x3[5] = p_transform.elements[2][1];
|
p_mat2x3[5] = p_transform.elements[2][1];
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerCanvasRD::_update_transform_to_mat4(const Transform &p_transform, float *p_mat4) {
|
void RendererCanvasRenderRD::_update_transform_to_mat4(const Transform &p_transform, float *p_mat4) {
|
||||||
p_mat4[0] = p_transform.basis.elements[0][0];
|
p_mat4[0] = p_transform.basis.elements[0][0];
|
||||||
p_mat4[1] = p_transform.basis.elements[1][0];
|
p_mat4[1] = p_transform.basis.elements[1][0];
|
||||||
p_mat4[2] = p_transform.basis.elements[2][0];
|
p_mat4[2] = p_transform.basis.elements[2][0];
|
||||||
@ -93,7 +93,7 @@ void RasterizerCanvasRD::_update_transform_to_mat4(const Transform &p_transform,
|
|||||||
p_mat4[15] = 1;
|
p_mat4[15] = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
RasterizerCanvas::PolygonID RasterizerCanvasRD::request_polygon(const Vector<int> &p_indices, const Vector<Point2> &p_points, const Vector<Color> &p_colors, const Vector<Point2> &p_uvs, const Vector<int> &p_bones, const Vector<float> &p_weights) {
|
RendererCanvasRender::PolygonID RendererCanvasRenderRD::request_polygon(const Vector<int> &p_indices, const Vector<Point2> &p_points, const Vector<Color> &p_colors, const Vector<Point2> &p_uvs, const Vector<int> &p_bones, const Vector<float> &p_weights) {
|
||||||
// Care must be taken to generate array formats
|
// Care must be taken to generate array formats
|
||||||
// in ways where they could be reused, so we will
|
// in ways where they could be reused, so we will
|
||||||
// put single-occuring elements first, and repeated
|
// put single-occuring elements first, and repeated
|
||||||
@ -184,7 +184,7 @@ RasterizerCanvas::PolygonID RasterizerCanvasRD::request_polygon(const Vector<int
|
|||||||
vd.stride = 0;
|
vd.stride = 0;
|
||||||
|
|
||||||
descriptions.write[1] = vd;
|
descriptions.write[1] = vd;
|
||||||
buffers.write[1] = storage->mesh_get_default_rd_buffer(RasterizerStorageRD::DEFAULT_RD_BUFFER_COLOR);
|
buffers.write[1] = storage->mesh_get_default_rd_buffer(RendererStorageRD::DEFAULT_RD_BUFFER_COLOR);
|
||||||
}
|
}
|
||||||
|
|
||||||
//uvs
|
//uvs
|
||||||
@ -212,7 +212,7 @@ RasterizerCanvas::PolygonID RasterizerCanvasRD::request_polygon(const Vector<int
|
|||||||
vd.stride = 0;
|
vd.stride = 0;
|
||||||
|
|
||||||
descriptions.write[2] = vd;
|
descriptions.write[2] = vd;
|
||||||
buffers.write[2] = storage->mesh_get_default_rd_buffer(RasterizerStorageRD::DEFAULT_RD_BUFFER_TEX_UV);
|
buffers.write[2] = storage->mesh_get_default_rd_buffer(RendererStorageRD::DEFAULT_RD_BUFFER_TEX_UV);
|
||||||
}
|
}
|
||||||
|
|
||||||
//bones
|
//bones
|
||||||
@ -245,7 +245,7 @@ RasterizerCanvas::PolygonID RasterizerCanvasRD::request_polygon(const Vector<int
|
|||||||
vd.stride = 0;
|
vd.stride = 0;
|
||||||
|
|
||||||
descriptions.write[3] = vd;
|
descriptions.write[3] = vd;
|
||||||
buffers.write[3] = storage->mesh_get_default_rd_buffer(RasterizerStorageRD::DEFAULT_RD_BUFFER_BONES);
|
buffers.write[3] = storage->mesh_get_default_rd_buffer(RendererStorageRD::DEFAULT_RD_BUFFER_BONES);
|
||||||
}
|
}
|
||||||
|
|
||||||
//weights
|
//weights
|
||||||
@ -278,7 +278,7 @@ RasterizerCanvas::PolygonID RasterizerCanvasRD::request_polygon(const Vector<int
|
|||||||
vd.stride = 0;
|
vd.stride = 0;
|
||||||
|
|
||||||
descriptions.write[4] = vd;
|
descriptions.write[4] = vd;
|
||||||
buffers.write[4] = storage->mesh_get_default_rd_buffer(RasterizerStorageRD::DEFAULT_RD_BUFFER_BONES);
|
buffers.write[4] = storage->mesh_get_default_rd_buffer(RendererStorageRD::DEFAULT_RD_BUFFER_BONES);
|
||||||
}
|
}
|
||||||
|
|
||||||
//check that everything is as it should be
|
//check that everything is as it should be
|
||||||
@ -319,7 +319,7 @@ RasterizerCanvas::PolygonID RasterizerCanvasRD::request_polygon(const Vector<int
|
|||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerCanvasRD::free_polygon(PolygonID p_polygon) {
|
void RendererCanvasRenderRD::free_polygon(PolygonID p_polygon) {
|
||||||
PolygonBuffers *pb_ptr = polygon_buffers.polygons.getptr(p_polygon);
|
PolygonBuffers *pb_ptr = polygon_buffers.polygons.getptr(p_polygon);
|
||||||
ERR_FAIL_COND(!pb_ptr);
|
ERR_FAIL_COND(!pb_ptr);
|
||||||
|
|
||||||
@ -340,7 +340,7 @@ void RasterizerCanvasRD::free_polygon(PolygonID p_polygon) {
|
|||||||
|
|
||||||
////////////////////
|
////////////////////
|
||||||
|
|
||||||
void RasterizerCanvasRD::_bind_canvas_texture(RD::DrawListID p_draw_list, RID p_texture, RS::CanvasItemTextureFilter p_base_filter, RS::CanvasItemTextureRepeat p_base_repeat, RID &r_last_texture, PushConstant &push_constant, Size2 &r_texpixel_size) {
|
void RendererCanvasRenderRD::_bind_canvas_texture(RD::DrawListID p_draw_list, RID p_texture, RS::CanvasItemTextureFilter p_base_filter, RS::CanvasItemTextureRepeat p_base_repeat, RID &r_last_texture, PushConstant &push_constant, Size2 &r_texpixel_size) {
|
||||||
if (p_texture == RID()) {
|
if (p_texture == RID()) {
|
||||||
p_texture = default_canvas_texture;
|
p_texture = default_canvas_texture;
|
||||||
}
|
}
|
||||||
@ -390,7 +390,7 @@ void RasterizerCanvasRD::_bind_canvas_texture(RD::DrawListID p_draw_list, RID p_
|
|||||||
r_last_texture = p_texture;
|
r_last_texture = p_texture;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerCanvasRD::_render_item(RD::DrawListID p_draw_list, const Item *p_item, RD::FramebufferFormatID p_framebuffer_format, const Transform2D &p_canvas_transform_inverse, Item *¤t_clip, Light *p_lights, PipelineVariants *p_pipeline_variants) {
|
void RendererCanvasRenderRD::_render_item(RD::DrawListID p_draw_list, const Item *p_item, RD::FramebufferFormatID p_framebuffer_format, const Transform2D &p_canvas_transform_inverse, Item *¤t_clip, Light *p_lights, PipelineVariants *p_pipeline_variants) {
|
||||||
//create an empty push constant
|
//create an empty push constant
|
||||||
|
|
||||||
RS::CanvasItemTextureFilter current_filter = default_filter;
|
RS::CanvasItemTextureFilter current_filter = default_filter;
|
||||||
@ -1016,7 +1016,7 @@ void RasterizerCanvasRD::_render_item(RD::DrawListID p_draw_list, const Item *p_
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
RID RasterizerCanvasRD::_create_base_uniform_set(RID p_to_render_target, bool p_backbuffer) {
|
RID RendererCanvasRenderRD::_create_base_uniform_set(RID p_to_render_target, bool p_backbuffer) {
|
||||||
//re create canvas state
|
//re create canvas state
|
||||||
Vector<RD::Uniform> uniforms;
|
Vector<RD::Uniform> uniforms;
|
||||||
|
|
||||||
@ -1070,7 +1070,7 @@ RID RasterizerCanvasRD::_create_base_uniform_set(RID p_to_render_target, bool p_
|
|||||||
} else {
|
} else {
|
||||||
screen = storage->render_target_get_rd_backbuffer(p_to_render_target);
|
screen = storage->render_target_get_rd_backbuffer(p_to_render_target);
|
||||||
if (screen.is_null()) { //unallocated backbuffer
|
if (screen.is_null()) { //unallocated backbuffer
|
||||||
screen = storage->texture_rd_get_default(RasterizerStorageRD::DEFAULT_RD_TEXTURE_WHITE);
|
screen = storage->texture_rd_get_default(RendererStorageRD::DEFAULT_RD_TEXTURE_WHITE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
u.ids.push_back(screen);
|
u.ids.push_back(screen);
|
||||||
@ -1126,7 +1126,7 @@ RID RasterizerCanvasRD::_create_base_uniform_set(RID p_to_render_target, bool p_
|
|||||||
return uniform_set;
|
return uniform_set;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerCanvasRD::_render_items(RID p_to_render_target, int p_item_count, const Transform2D &p_canvas_transform_inverse, Light *p_lights, bool p_to_backbuffer) {
|
void RendererCanvasRenderRD::_render_items(RID p_to_render_target, int p_item_count, const Transform2D &p_canvas_transform_inverse, Light *p_lights, bool p_to_backbuffer) {
|
||||||
Item *current_clip = nullptr;
|
Item *current_clip = nullptr;
|
||||||
|
|
||||||
Transform2D canvas_transform_inverse = p_canvas_transform_inverse;
|
Transform2D canvas_transform_inverse = p_canvas_transform_inverse;
|
||||||
@ -1193,7 +1193,7 @@ void RasterizerCanvasRD::_render_items(RID p_to_render_target, int p_item_count,
|
|||||||
if (material != prev_material) {
|
if (material != prev_material) {
|
||||||
MaterialData *material_data = nullptr;
|
MaterialData *material_data = nullptr;
|
||||||
if (material.is_valid()) {
|
if (material.is_valid()) {
|
||||||
material_data = (MaterialData *)storage->material_get_data(material, RasterizerStorageRD::SHADER_TYPE_2D);
|
material_data = (MaterialData *)storage->material_get_data(material, RendererStorageRD::SHADER_TYPE_2D);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (material_data) {
|
if (material_data) {
|
||||||
@ -1218,7 +1218,7 @@ void RasterizerCanvasRD::_render_items(RID p_to_render_target, int p_item_count,
|
|||||||
RD::get_singleton()->draw_list_end();
|
RD::get_singleton()->draw_list_end();
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerCanvasRD::canvas_render_items(RID p_to_render_target, Item *p_item_list, const Color &p_modulate, Light *p_light_list, Light *p_directional_light_list, const Transform2D &p_canvas_transform, RenderingServer::CanvasItemTextureFilter p_default_filter, RenderingServer::CanvasItemTextureRepeat p_default_repeat, bool p_snap_2d_vertices_to_pixel, bool &r_sdf_used) {
|
void RendererCanvasRenderRD::canvas_render_items(RID p_to_render_target, Item *p_item_list, const Color &p_modulate, Light *p_light_list, Light *p_directional_light_list, const Transform2D &p_canvas_transform, RenderingServer::CanvasItemTextureFilter p_default_filter, RenderingServer::CanvasItemTextureRepeat p_default_repeat, bool p_snap_2d_vertices_to_pixel, bool &r_sdf_used) {
|
||||||
r_sdf_used = false;
|
r_sdf_used = false;
|
||||||
int item_count = 0;
|
int item_count = 0;
|
||||||
|
|
||||||
@ -1449,7 +1449,7 @@ void RasterizerCanvasRD::canvas_render_items(RID p_to_render_target, Item *p_ite
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (ci->material.is_valid()) {
|
if (ci->material.is_valid()) {
|
||||||
MaterialData *md = (MaterialData *)storage->material_get_data(ci->material, RasterizerStorageRD::SHADER_TYPE_2D);
|
MaterialData *md = (MaterialData *)storage->material_get_data(ci->material, RendererStorageRD::SHADER_TYPE_2D);
|
||||||
if (md && md->shader_data->valid) {
|
if (md && md->shader_data->valid) {
|
||||||
if (md->shader_data->uses_screen_texture && canvas_group_owner == nullptr) {
|
if (md->shader_data->uses_screen_texture && canvas_group_owner == nullptr) {
|
||||||
if (!material_screen_texture_found) {
|
if (!material_screen_texture_found) {
|
||||||
@ -1461,12 +1461,12 @@ void RasterizerCanvasRD::canvas_render_items(RID p_to_render_target, Item *p_ite
|
|||||||
if (md->shader_data->uses_sdf) {
|
if (md->shader_data->uses_sdf) {
|
||||||
r_sdf_used = true;
|
r_sdf_used = true;
|
||||||
}
|
}
|
||||||
if (md->last_frame != RasterizerRD::singleton->get_frame_number()) {
|
if (md->last_frame != RendererCompositorRD::singleton->get_frame_number()) {
|
||||||
md->last_frame = RasterizerRD::singleton->get_frame_number();
|
md->last_frame = RendererCompositorRD::singleton->get_frame_number();
|
||||||
if (!RD::get_singleton()->uniform_set_is_valid(md->uniform_set)) {
|
if (!RD::get_singleton()->uniform_set_is_valid(md->uniform_set)) {
|
||||||
// uniform set may be gone because a dependency was erased. In this case, it will happen
|
// uniform set may be gone because a dependency was erased. In this case, it will happen
|
||||||
// if a texture is deleted, so just re-create it.
|
// if a texture is deleted, so just re-create it.
|
||||||
storage->material_force_update_textures(ci->material, RasterizerStorageRD::SHADER_TYPE_2D);
|
storage->material_force_update_textures(ci->material, RendererStorageRD::SHADER_TYPE_2D);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1527,12 +1527,12 @@ void RasterizerCanvasRD::canvas_render_items(RID p_to_render_target, Item *p_ite
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
RID RasterizerCanvasRD::light_create() {
|
RID RendererCanvasRenderRD::light_create() {
|
||||||
CanvasLight canvas_light;
|
CanvasLight canvas_light;
|
||||||
return canvas_light_owner.make_rid(canvas_light);
|
return canvas_light_owner.make_rid(canvas_light);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerCanvasRD::light_set_texture(RID p_rid, RID p_texture) {
|
void RendererCanvasRenderRD::light_set_texture(RID p_rid, RID p_texture) {
|
||||||
CanvasLight *cl = canvas_light_owner.getornull(p_rid);
|
CanvasLight *cl = canvas_light_owner.getornull(p_rid);
|
||||||
ERR_FAIL_COND(!cl);
|
ERR_FAIL_COND(!cl);
|
||||||
if (cl->texture == p_texture) {
|
if (cl->texture == p_texture) {
|
||||||
@ -1548,14 +1548,14 @@ void RasterizerCanvasRD::light_set_texture(RID p_rid, RID p_texture) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerCanvasRD::light_set_use_shadow(RID p_rid, bool p_enable) {
|
void RendererCanvasRenderRD::light_set_use_shadow(RID p_rid, bool p_enable) {
|
||||||
CanvasLight *cl = canvas_light_owner.getornull(p_rid);
|
CanvasLight *cl = canvas_light_owner.getornull(p_rid);
|
||||||
ERR_FAIL_COND(!cl);
|
ERR_FAIL_COND(!cl);
|
||||||
|
|
||||||
cl->shadow.enabled = p_enable;
|
cl->shadow.enabled = p_enable;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerCanvasRD::_update_shadow_atlas() {
|
void RendererCanvasRenderRD::_update_shadow_atlas() {
|
||||||
if (state.shadow_fb == RID()) {
|
if (state.shadow_fb == RID()) {
|
||||||
//ah, we lack the shadow texture..
|
//ah, we lack the shadow texture..
|
||||||
RD::get_singleton()->free(state.shadow_texture); //erase placeholder
|
RD::get_singleton()->free(state.shadow_texture); //erase placeholder
|
||||||
@ -1588,7 +1588,7 @@ void RasterizerCanvasRD::_update_shadow_atlas() {
|
|||||||
state.shadow_fb = RD::get_singleton()->framebuffer_create(fb_textures);
|
state.shadow_fb = RD::get_singleton()->framebuffer_create(fb_textures);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
void RasterizerCanvasRD::light_update_shadow(RID p_rid, int p_shadow_index, const Transform2D &p_light_xform, int p_light_mask, float p_near, float p_far, LightOccluderInstance *p_occluders) {
|
void RendererCanvasRenderRD::light_update_shadow(RID p_rid, int p_shadow_index, const Transform2D &p_light_xform, int p_light_mask, float p_near, float p_far, LightOccluderInstance *p_occluders) {
|
||||||
CanvasLight *cl = canvas_light_owner.getornull(p_rid);
|
CanvasLight *cl = canvas_light_owner.getornull(p_rid);
|
||||||
ERR_FAIL_COND(!cl->shadow.enabled);
|
ERR_FAIL_COND(!cl->shadow.enabled);
|
||||||
|
|
||||||
@ -1666,7 +1666,7 @@ void RasterizerCanvasRD::light_update_shadow(RID p_rid, int p_shadow_index, cons
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerCanvasRD::light_update_directional_shadow(RID p_rid, int p_shadow_index, const Transform2D &p_light_xform, int p_light_mask, float p_cull_distance, const Rect2 &p_clip_rect, LightOccluderInstance *p_occluders) {
|
void RendererCanvasRenderRD::light_update_directional_shadow(RID p_rid, int p_shadow_index, const Transform2D &p_light_xform, int p_light_mask, float p_cull_distance, const Rect2 &p_clip_rect, LightOccluderInstance *p_occluders) {
|
||||||
CanvasLight *cl = canvas_light_owner.getornull(p_rid);
|
CanvasLight *cl = canvas_light_owner.getornull(p_rid);
|
||||||
ERR_FAIL_COND(!cl->shadow.enabled);
|
ERR_FAIL_COND(!cl->shadow.enabled);
|
||||||
|
|
||||||
@ -1746,7 +1746,7 @@ void RasterizerCanvasRD::light_update_directional_shadow(RID p_rid, int p_shadow
|
|||||||
cl->shadow.directional_xform = to_shadow * to_light_xform;
|
cl->shadow.directional_xform = to_shadow * to_light_xform;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerCanvasRD::render_sdf(RID p_render_target, LightOccluderInstance *p_occluders) {
|
void RendererCanvasRenderRD::render_sdf(RID p_render_target, LightOccluderInstance *p_occluders) {
|
||||||
RID fb = storage->render_target_get_sdf_framebuffer(p_render_target);
|
RID fb = storage->render_target_get_sdf_framebuffer(p_render_target);
|
||||||
Rect2i rect = storage->render_target_get_sdf_rect(p_render_target);
|
Rect2i rect = storage->render_target_get_sdf_rect(p_render_target);
|
||||||
|
|
||||||
@ -1808,7 +1808,7 @@ void RasterizerCanvasRD::render_sdf(RID p_render_target, LightOccluderInstance *
|
|||||||
storage->render_target_sdf_process(p_render_target); //done rendering, process it
|
storage->render_target_sdf_process(p_render_target); //done rendering, process it
|
||||||
}
|
}
|
||||||
|
|
||||||
RID RasterizerCanvasRD::occluder_polygon_create() {
|
RID RendererCanvasRenderRD::occluder_polygon_create() {
|
||||||
OccluderPolygon occluder;
|
OccluderPolygon occluder;
|
||||||
occluder.line_point_count = 0;
|
occluder.line_point_count = 0;
|
||||||
occluder.sdf_point_count = 0;
|
occluder.sdf_point_count = 0;
|
||||||
@ -1817,7 +1817,7 @@ RID RasterizerCanvasRD::occluder_polygon_create() {
|
|||||||
return occluder_polygon_owner.make_rid(occluder);
|
return occluder_polygon_owner.make_rid(occluder);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerCanvasRD::occluder_polygon_set_shape(RID p_occluder, const Vector<Vector2> &p_points, bool p_closed) {
|
void RendererCanvasRenderRD::occluder_polygon_set_shape(RID p_occluder, const Vector<Vector2> &p_points, bool p_closed) {
|
||||||
OccluderPolygon *oc = occluder_polygon_owner.getornull(p_occluder);
|
OccluderPolygon *oc = occluder_polygon_owner.getornull(p_occluder);
|
||||||
ERR_FAIL_COND(!oc);
|
ERR_FAIL_COND(!oc);
|
||||||
|
|
||||||
@ -1986,13 +1986,13 @@ void RasterizerCanvasRD::occluder_polygon_set_shape(RID p_occluder, const Vector
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerCanvasRD::occluder_polygon_set_cull_mode(RID p_occluder, RS::CanvasOccluderPolygonCullMode p_mode) {
|
void RendererCanvasRenderRD::occluder_polygon_set_cull_mode(RID p_occluder, RS::CanvasOccluderPolygonCullMode p_mode) {
|
||||||
OccluderPolygon *oc = occluder_polygon_owner.getornull(p_occluder);
|
OccluderPolygon *oc = occluder_polygon_owner.getornull(p_occluder);
|
||||||
ERR_FAIL_COND(!oc);
|
ERR_FAIL_COND(!oc);
|
||||||
oc->cull_mode = p_mode;
|
oc->cull_mode = p_mode;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerCanvasRD::ShaderData::set_code(const String &p_code) {
|
void RendererCanvasRenderRD::ShaderData::set_code(const String &p_code) {
|
||||||
//compile
|
//compile
|
||||||
|
|
||||||
code = p_code;
|
code = p_code;
|
||||||
@ -2025,7 +2025,7 @@ void RasterizerCanvasRD::ShaderData::set_code(const String &p_code) {
|
|||||||
|
|
||||||
actions.uniforms = &uniforms;
|
actions.uniforms = &uniforms;
|
||||||
|
|
||||||
RasterizerCanvasRD *canvas_singleton = (RasterizerCanvasRD *)RasterizerCanvas::singleton;
|
RendererCanvasRenderRD *canvas_singleton = (RendererCanvasRenderRD *)RendererCanvasRender::singleton;
|
||||||
|
|
||||||
Error err = canvas_singleton->shader.compiler.compile(RS::SHADER_CANVAS_ITEM, code, &actions, path, gen_code);
|
Error err = canvas_singleton->shader.compiler.compile(RS::SHADER_CANVAS_ITEM, code, &actions, path, gen_code);
|
||||||
|
|
||||||
@ -2170,7 +2170,7 @@ void RasterizerCanvasRD::ShaderData::set_code(const String &p_code) {
|
|||||||
valid = true;
|
valid = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerCanvasRD::ShaderData::set_default_texture_param(const StringName &p_name, RID p_texture) {
|
void RendererCanvasRenderRD::ShaderData::set_default_texture_param(const StringName &p_name, RID p_texture) {
|
||||||
if (!p_texture.is_valid()) {
|
if (!p_texture.is_valid()) {
|
||||||
default_texture_params.erase(p_name);
|
default_texture_params.erase(p_name);
|
||||||
} else {
|
} else {
|
||||||
@ -2178,7 +2178,7 @@ void RasterizerCanvasRD::ShaderData::set_default_texture_param(const StringName
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerCanvasRD::ShaderData::get_param_list(List<PropertyInfo> *p_param_list) const {
|
void RendererCanvasRenderRD::ShaderData::get_param_list(List<PropertyInfo> *p_param_list) const {
|
||||||
Map<int, StringName> order;
|
Map<int, StringName> order;
|
||||||
|
|
||||||
for (Map<StringName, ShaderLanguage::ShaderNode::Uniform>::Element *E = uniforms.front(); E; E = E->next()) {
|
for (Map<StringName, ShaderLanguage::ShaderNode::Uniform>::Element *E = uniforms.front(); E; E = E->next()) {
|
||||||
@ -2199,13 +2199,13 @@ void RasterizerCanvasRD::ShaderData::get_param_list(List<PropertyInfo> *p_param_
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerCanvasRD::ShaderData::get_instance_param_list(List<RasterizerStorage::InstanceShaderParam> *p_param_list) const {
|
void RendererCanvasRenderRD::ShaderData::get_instance_param_list(List<RendererStorage::InstanceShaderParam> *p_param_list) const {
|
||||||
for (Map<StringName, ShaderLanguage::ShaderNode::Uniform>::Element *E = uniforms.front(); E; E = E->next()) {
|
for (Map<StringName, ShaderLanguage::ShaderNode::Uniform>::Element *E = uniforms.front(); E; E = E->next()) {
|
||||||
if (E->get().scope != ShaderLanguage::ShaderNode::Uniform::SCOPE_INSTANCE) {
|
if (E->get().scope != ShaderLanguage::ShaderNode::Uniform::SCOPE_INSTANCE) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
RasterizerStorage::InstanceShaderParam p;
|
RendererStorage::InstanceShaderParam p;
|
||||||
p.info = ShaderLanguage::uniform_to_property_info(E->get());
|
p.info = ShaderLanguage::uniform_to_property_info(E->get());
|
||||||
p.info.name = E->key(); //supply name
|
p.info.name = E->key(); //supply name
|
||||||
p.index = E->get().instance_index;
|
p.index = E->get().instance_index;
|
||||||
@ -2214,7 +2214,7 @@ void RasterizerCanvasRD::ShaderData::get_instance_param_list(List<RasterizerStor
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool RasterizerCanvasRD::ShaderData::is_param_texture(const StringName &p_param) const {
|
bool RendererCanvasRenderRD::ShaderData::is_param_texture(const StringName &p_param) const {
|
||||||
if (!uniforms.has(p_param)) {
|
if (!uniforms.has(p_param)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -2222,15 +2222,15 @@ bool RasterizerCanvasRD::ShaderData::is_param_texture(const StringName &p_param)
|
|||||||
return uniforms[p_param].texture_order >= 0;
|
return uniforms[p_param].texture_order >= 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool RasterizerCanvasRD::ShaderData::is_animated() const {
|
bool RendererCanvasRenderRD::ShaderData::is_animated() const {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool RasterizerCanvasRD::ShaderData::casts_shadows() const {
|
bool RendererCanvasRenderRD::ShaderData::casts_shadows() const {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
Variant RasterizerCanvasRD::ShaderData::get_default_parameter(const StringName &p_parameter) const {
|
Variant RendererCanvasRenderRD::ShaderData::get_default_parameter(const StringName &p_parameter) const {
|
||||||
if (uniforms.has(p_parameter)) {
|
if (uniforms.has(p_parameter)) {
|
||||||
ShaderLanguage::ShaderNode::Uniform uniform = uniforms[p_parameter];
|
ShaderLanguage::ShaderNode::Uniform uniform = uniforms[p_parameter];
|
||||||
Vector<ShaderLanguage::ConstantNode::Value> default_value = uniform.default_value;
|
Vector<ShaderLanguage::ConstantNode::Value> default_value = uniform.default_value;
|
||||||
@ -2239,14 +2239,14 @@ Variant RasterizerCanvasRD::ShaderData::get_default_parameter(const StringName &
|
|||||||
return Variant();
|
return Variant();
|
||||||
}
|
}
|
||||||
|
|
||||||
RasterizerCanvasRD::ShaderData::ShaderData() {
|
RendererCanvasRenderRD::ShaderData::ShaderData() {
|
||||||
valid = false;
|
valid = false;
|
||||||
uses_screen_texture = false;
|
uses_screen_texture = false;
|
||||||
uses_sdf = false;
|
uses_sdf = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
RasterizerCanvasRD::ShaderData::~ShaderData() {
|
RendererCanvasRenderRD::ShaderData::~ShaderData() {
|
||||||
RasterizerCanvasRD *canvas_singleton = (RasterizerCanvasRD *)RasterizerCanvas::singleton;
|
RendererCanvasRenderRD *canvas_singleton = (RendererCanvasRenderRD *)RendererCanvasRender::singleton;
|
||||||
ERR_FAIL_COND(!canvas_singleton);
|
ERR_FAIL_COND(!canvas_singleton);
|
||||||
//pipeline variants will clear themselves if shader is gone
|
//pipeline variants will clear themselves if shader is gone
|
||||||
if (version.is_valid()) {
|
if (version.is_valid()) {
|
||||||
@ -2254,13 +2254,13 @@ RasterizerCanvasRD::ShaderData::~ShaderData() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
RasterizerStorageRD::ShaderData *RasterizerCanvasRD::_create_shader_func() {
|
RendererStorageRD::ShaderData *RendererCanvasRenderRD::_create_shader_func() {
|
||||||
ShaderData *shader_data = memnew(ShaderData);
|
ShaderData *shader_data = memnew(ShaderData);
|
||||||
return shader_data;
|
return shader_data;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerCanvasRD::MaterialData::update_parameters(const Map<StringName, Variant> &p_parameters, bool p_uniform_dirty, bool p_textures_dirty) {
|
void RendererCanvasRenderRD::MaterialData::update_parameters(const Map<StringName, Variant> &p_parameters, bool p_uniform_dirty, bool p_textures_dirty) {
|
||||||
RasterizerCanvasRD *canvas_singleton = (RasterizerCanvasRD *)RasterizerCanvas::singleton;
|
RendererCanvasRenderRD *canvas_singleton = (RendererCanvasRenderRD *)RendererCanvasRender::singleton;
|
||||||
|
|
||||||
if ((uint32_t)ubo_data.size() != shader_data->ubo_size) {
|
if ((uint32_t)ubo_data.size() != shader_data->ubo_size) {
|
||||||
p_uniform_dirty = true;
|
p_uniform_dirty = true;
|
||||||
@ -2339,7 +2339,7 @@ void RasterizerCanvasRD::MaterialData::update_parameters(const Map<StringName, V
|
|||||||
uniform_set = RD::get_singleton()->uniform_set_create(uniforms, canvas_singleton->shader.canvas_shader.version_get_shader(shader_data->version, 0), MATERIAL_UNIFORM_SET);
|
uniform_set = RD::get_singleton()->uniform_set_create(uniforms, canvas_singleton->shader.canvas_shader.version_get_shader(shader_data->version, 0), MATERIAL_UNIFORM_SET);
|
||||||
}
|
}
|
||||||
|
|
||||||
RasterizerCanvasRD::MaterialData::~MaterialData() {
|
RendererCanvasRenderRD::MaterialData::~MaterialData() {
|
||||||
if (uniform_set.is_valid() && RD::get_singleton()->uniform_set_is_valid(uniform_set)) {
|
if (uniform_set.is_valid() && RD::get_singleton()->uniform_set_is_valid(uniform_set)) {
|
||||||
RD::get_singleton()->free(uniform_set);
|
RD::get_singleton()->free(uniform_set);
|
||||||
}
|
}
|
||||||
@ -2349,7 +2349,7 @@ RasterizerCanvasRD::MaterialData::~MaterialData() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
RasterizerStorageRD::MaterialData *RasterizerCanvasRD::_create_material_func(ShaderData *p_shader) {
|
RendererStorageRD::MaterialData *RendererCanvasRenderRD::_create_material_func(ShaderData *p_shader) {
|
||||||
MaterialData *material_data = memnew(MaterialData);
|
MaterialData *material_data = memnew(MaterialData);
|
||||||
material_data->shader_data = p_shader;
|
material_data->shader_data = p_shader;
|
||||||
material_data->last_frame = false;
|
material_data->last_frame = false;
|
||||||
@ -2357,14 +2357,14 @@ RasterizerStorageRD::MaterialData *RasterizerCanvasRD::_create_material_func(Sha
|
|||||||
return material_data;
|
return material_data;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerCanvasRD::set_time(double p_time) {
|
void RendererCanvasRenderRD::set_time(double p_time) {
|
||||||
state.time = p_time;
|
state.time = p_time;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerCanvasRD::update() {
|
void RendererCanvasRenderRD::update() {
|
||||||
}
|
}
|
||||||
|
|
||||||
RasterizerCanvasRD::RasterizerCanvasRD(RasterizerStorageRD *p_storage) {
|
RendererCanvasRenderRD::RendererCanvasRenderRD(RendererStorageRD *p_storage) {
|
||||||
storage = p_storage;
|
storage = p_storage;
|
||||||
|
|
||||||
{ //create default samplers
|
{ //create default samplers
|
||||||
@ -2695,8 +2695,8 @@ RasterizerCanvasRD::RasterizerCanvasRD(RasterizerStorageRD *p_storage) {
|
|||||||
state.shadow_texture_size = GLOBAL_GET("rendering/quality/2d_shadow_atlas/size");
|
state.shadow_texture_size = GLOBAL_GET("rendering/quality/2d_shadow_atlas/size");
|
||||||
|
|
||||||
//create functions for shader and material
|
//create functions for shader and material
|
||||||
storage->shader_set_data_request_function(RasterizerStorageRD::SHADER_TYPE_2D, _create_shader_funcs);
|
storage->shader_set_data_request_function(RendererStorageRD::SHADER_TYPE_2D, _create_shader_funcs);
|
||||||
storage->material_set_data_request_function(RasterizerStorageRD::SHADER_TYPE_2D, _create_material_funcs);
|
storage->material_set_data_request_function(RendererStorageRD::SHADER_TYPE_2D, _create_material_funcs);
|
||||||
|
|
||||||
state.time = 0;
|
state.time = 0;
|
||||||
|
|
||||||
@ -2710,7 +2710,7 @@ RasterizerCanvasRD::RasterizerCanvasRD(RasterizerStorageRD *p_storage) {
|
|||||||
static_assert(sizeof(PushConstant) == 128);
|
static_assert(sizeof(PushConstant) == 128);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool RasterizerCanvasRD::free(RID p_rid) {
|
bool RendererCanvasRenderRD::free(RID p_rid) {
|
||||||
if (canvas_light_owner.owns(p_rid)) {
|
if (canvas_light_owner.owns(p_rid)) {
|
||||||
CanvasLight *cl = canvas_light_owner.getornull(p_rid);
|
CanvasLight *cl = canvas_light_owner.getornull(p_rid);
|
||||||
ERR_FAIL_COND_V(!cl, false);
|
ERR_FAIL_COND_V(!cl, false);
|
||||||
@ -2726,7 +2726,7 @@ bool RasterizerCanvasRD::free(RID p_rid) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerCanvasRD::set_shadow_texture_size(int p_size) {
|
void RendererCanvasRenderRD::set_shadow_texture_size(int p_size) {
|
||||||
p_size = nearest_power_of_2_templated(p_size);
|
p_size = nearest_power_of_2_templated(p_size);
|
||||||
if (p_size == state.shadow_texture_size) {
|
if (p_size == state.shadow_texture_size) {
|
||||||
return;
|
return;
|
||||||
@ -2751,7 +2751,7 @@ void RasterizerCanvasRD::set_shadow_texture_size(int p_size) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
RasterizerCanvasRD::~RasterizerCanvasRD() {
|
RendererCanvasRenderRD::~RendererCanvasRenderRD() {
|
||||||
//canvas state
|
//canvas state
|
||||||
|
|
||||||
storage->free(default_canvas_group_material);
|
storage->free(default_canvas_group_material);
|
@ -1,5 +1,5 @@
|
|||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
/* rasterizer_canvas_rd.h */
|
/* renderer_canvas_render_rd.h */
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
/* This file is part of: */
|
/* This file is part of: */
|
||||||
/* GODOT ENGINE */
|
/* GODOT ENGINE */
|
||||||
@ -28,19 +28,20 @@
|
|||||||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
|
|
||||||
#ifndef RASTERIZER_CANVAS_RD_H
|
#ifndef RENDERING_SERVER_CANVAS_RENDER_RD_H
|
||||||
#define RASTERIZER_CANVAS_RD_H
|
#define RENDERING_SERVER_CANVAS_RENDER_RD_H
|
||||||
|
|
||||||
#include "servers/rendering/rasterizer.h"
|
#include "servers/rendering/renderer_canvas_render.h"
|
||||||
#include "servers/rendering/rasterizer_rd/rasterizer_storage_rd.h"
|
#include "servers/rendering/renderer_compositor.h"
|
||||||
#include "servers/rendering/rasterizer_rd/render_pipeline_vertex_format_cache_rd.h"
|
#include "servers/rendering/renderer_rd/pipeline_cache_rd.h"
|
||||||
#include "servers/rendering/rasterizer_rd/shader_compiler_rd.h"
|
#include "servers/rendering/renderer_rd/renderer_storage_rd.h"
|
||||||
#include "servers/rendering/rasterizer_rd/shaders/canvas.glsl.gen.h"
|
#include "servers/rendering/renderer_rd/shader_compiler_rd.h"
|
||||||
#include "servers/rendering/rasterizer_rd/shaders/canvas_occlusion.glsl.gen.h"
|
#include "servers/rendering/renderer_rd/shaders/canvas.glsl.gen.h"
|
||||||
|
#include "servers/rendering/renderer_rd/shaders/canvas_occlusion.glsl.gen.h"
|
||||||
#include "servers/rendering/rendering_device.h"
|
#include "servers/rendering/rendering_device.h"
|
||||||
|
|
||||||
class RasterizerCanvasRD : public RasterizerCanvas {
|
class RendererCanvasRenderRD : public RendererCanvasRender {
|
||||||
RasterizerStorageRD *storage;
|
RendererStorageRD *storage;
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
BASE_UNIFORM_SET = 0,
|
BASE_UNIFORM_SET = 0,
|
||||||
@ -133,7 +134,7 @@ class RasterizerCanvasRD : public RasterizerCanvas {
|
|||||||
};
|
};
|
||||||
|
|
||||||
struct PipelineVariants {
|
struct PipelineVariants {
|
||||||
RenderPipelineVertexFormatCacheRD variants[PIPELINE_LIGHT_MODE_MAX][PIPELINE_VARIANT_MAX];
|
PipelineCacheRD variants[PIPELINE_LIGHT_MODE_MAX][PIPELINE_VARIANT_MAX];
|
||||||
};
|
};
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
@ -151,7 +152,7 @@ class RasterizerCanvasRD : public RasterizerCanvas {
|
|||||||
ShaderCompilerRD compiler;
|
ShaderCompilerRD compiler;
|
||||||
} shader;
|
} shader;
|
||||||
|
|
||||||
struct ShaderData : public RasterizerStorageRD::ShaderData {
|
struct ShaderData : public RendererStorageRD::ShaderData {
|
||||||
enum BlendMode { //used internally
|
enum BlendMode { //used internally
|
||||||
BLEND_MODE_MIX,
|
BLEND_MODE_MIX,
|
||||||
BLEND_MODE_ADD,
|
BLEND_MODE_ADD,
|
||||||
@ -181,7 +182,7 @@ class RasterizerCanvasRD : public RasterizerCanvas {
|
|||||||
virtual void set_code(const String &p_Code);
|
virtual void set_code(const String &p_Code);
|
||||||
virtual void set_default_texture_param(const StringName &p_name, RID p_texture);
|
virtual void set_default_texture_param(const StringName &p_name, RID p_texture);
|
||||||
virtual void get_param_list(List<PropertyInfo> *p_param_list) const;
|
virtual void get_param_list(List<PropertyInfo> *p_param_list) const;
|
||||||
virtual void get_instance_param_list(List<RasterizerStorage::InstanceShaderParam> *p_param_list) const;
|
virtual void get_instance_param_list(List<RendererStorage::InstanceShaderParam> *p_param_list) const;
|
||||||
|
|
||||||
virtual bool is_param_texture(const StringName &p_param) const;
|
virtual bool is_param_texture(const StringName &p_param) const;
|
||||||
virtual bool is_animated() const;
|
virtual bool is_animated() const;
|
||||||
@ -191,12 +192,12 @@ class RasterizerCanvasRD : public RasterizerCanvas {
|
|||||||
virtual ~ShaderData();
|
virtual ~ShaderData();
|
||||||
};
|
};
|
||||||
|
|
||||||
RasterizerStorageRD::ShaderData *_create_shader_func();
|
RendererStorageRD::ShaderData *_create_shader_func();
|
||||||
static RasterizerStorageRD::ShaderData *_create_shader_funcs() {
|
static RendererStorageRD::ShaderData *_create_shader_funcs() {
|
||||||
return static_cast<RasterizerCanvasRD *>(singleton)->_create_shader_func();
|
return static_cast<RendererCanvasRenderRD *>(singleton)->_create_shader_func();
|
||||||
}
|
}
|
||||||
|
|
||||||
struct MaterialData : public RasterizerStorageRD::MaterialData {
|
struct MaterialData : public RendererStorageRD::MaterialData {
|
||||||
uint64_t last_frame;
|
uint64_t last_frame;
|
||||||
ShaderData *shader_data;
|
ShaderData *shader_data;
|
||||||
RID uniform_buffer;
|
RID uniform_buffer;
|
||||||
@ -210,9 +211,9 @@ class RasterizerCanvasRD : public RasterizerCanvas {
|
|||||||
virtual ~MaterialData();
|
virtual ~MaterialData();
|
||||||
};
|
};
|
||||||
|
|
||||||
RasterizerStorageRD::MaterialData *_create_material_func(ShaderData *p_shader);
|
RendererStorageRD::MaterialData *_create_material_func(ShaderData *p_shader);
|
||||||
static RasterizerStorageRD::MaterialData *_create_material_funcs(RasterizerStorageRD::ShaderData *p_shader) {
|
static RendererStorageRD::MaterialData *_create_material_funcs(RendererStorageRD::ShaderData *p_shader) {
|
||||||
return static_cast<RasterizerCanvasRD *>(singleton)->_create_material_func(static_cast<ShaderData *>(p_shader));
|
return static_cast<RendererCanvasRenderRD *>(singleton)->_create_material_func(static_cast<ShaderData *>(p_shader));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**************************/
|
/**************************/
|
||||||
@ -462,8 +463,8 @@ public:
|
|||||||
void set_time(double p_time);
|
void set_time(double p_time);
|
||||||
void update();
|
void update();
|
||||||
bool free(RID p_rid);
|
bool free(RID p_rid);
|
||||||
RasterizerCanvasRD(RasterizerStorageRD *p_storage);
|
RendererCanvasRenderRD(RendererStorageRD *p_storage);
|
||||||
~RasterizerCanvasRD();
|
~RendererCanvasRenderRD();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // RASTERIZER_CANVAS_RD_H
|
#endif // RASTERIZER_CANVAS_RD_H
|
@ -1,5 +1,5 @@
|
|||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
/* rasterizer_rd.cpp */
|
/* renderer_compositor_rd.cpp */
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
/* This file is part of: */
|
/* This file is part of: */
|
||||||
/* GODOT ENGINE */
|
/* GODOT ENGINE */
|
||||||
@ -28,15 +28,15 @@
|
|||||||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
|
|
||||||
#include "rasterizer_rd.h"
|
#include "renderer_compositor_rd.h"
|
||||||
|
|
||||||
#include "core/config/project_settings.h"
|
#include "core/config/project_settings.h"
|
||||||
|
|
||||||
void RasterizerRD::prepare_for_blitting_render_targets() {
|
void RendererCompositorRD::prepare_for_blitting_render_targets() {
|
||||||
RD::get_singleton()->prepare_screen_for_drawing();
|
RD::get_singleton()->prepare_screen_for_drawing();
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerRD::blit_render_targets_to_screen(DisplayServer::WindowID p_screen, const BlitToScreen *p_render_targets, int p_amount) {
|
void RendererCompositorRD::blit_render_targets_to_screen(DisplayServer::WindowID p_screen, const BlitToScreen *p_render_targets, int p_amount) {
|
||||||
RD::DrawListID draw_list = RD::get_singleton()->draw_list_begin_for_screen(p_screen);
|
RD::DrawListID draw_list = RD::get_singleton()->draw_list_begin_for_screen(p_screen);
|
||||||
|
|
||||||
for (int i = 0; i < p_amount; i++) {
|
for (int i = 0; i < p_amount; i++) {
|
||||||
@ -76,7 +76,7 @@ void RasterizerRD::blit_render_targets_to_screen(DisplayServer::WindowID p_scree
|
|||||||
RD::get_singleton()->draw_list_end();
|
RD::get_singleton()->draw_list_end();
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerRD::begin_frame(double frame_step) {
|
void RendererCompositorRD::begin_frame(double frame_step) {
|
||||||
frame++;
|
frame++;
|
||||||
delta = frame_step;
|
delta = frame_step;
|
||||||
time += frame_step;
|
time += frame_step;
|
||||||
@ -88,14 +88,14 @@ void RasterizerRD::begin_frame(double frame_step) {
|
|||||||
scene->set_time(time, frame_step);
|
scene->set_time(time, frame_step);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerRD::end_frame(bool p_swap_buffers) {
|
void RendererCompositorRD::end_frame(bool p_swap_buffers) {
|
||||||
#ifndef _MSC_VER
|
#ifndef _MSC_VER
|
||||||
#warning TODO: likely pass a bool to swap buffers to avoid display?
|
#warning TODO: likely pass a bool to swap buffers to avoid display?
|
||||||
#endif
|
#endif
|
||||||
RD::get_singleton()->swap_buffers(); //probably should pass some bool to avoid display?
|
RD::get_singleton()->swap_buffers(); //probably should pass some bool to avoid display?
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerRD::initialize() {
|
void RendererCompositorRD::initialize() {
|
||||||
{ //create framebuffer copy shader
|
{ //create framebuffer copy shader
|
||||||
RenderingDevice::ShaderStageData vert;
|
RenderingDevice::ShaderStageData vert;
|
||||||
vert.shader_stage = RenderingDevice::SHADER_STAGE_VERTEX;
|
vert.shader_stage = RenderingDevice::SHADER_STAGE_VERTEX;
|
||||||
@ -154,10 +154,10 @@ void RasterizerRD::initialize() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ThreadWorkPool RasterizerRD::thread_work_pool;
|
ThreadWorkPool RendererCompositorRD::thread_work_pool;
|
||||||
uint64_t RasterizerRD::frame = 1;
|
uint64_t RendererCompositorRD::frame = 1;
|
||||||
|
|
||||||
void RasterizerRD::finalize() {
|
void RendererCompositorRD::finalize() {
|
||||||
thread_work_pool.finish();
|
thread_work_pool.finish();
|
||||||
|
|
||||||
memdelete(scene);
|
memdelete(scene);
|
||||||
@ -170,14 +170,14 @@ void RasterizerRD::finalize() {
|
|||||||
RD::get_singleton()->free(copy_viewports_sampler);
|
RD::get_singleton()->free(copy_viewports_sampler);
|
||||||
}
|
}
|
||||||
|
|
||||||
RasterizerRD *RasterizerRD::singleton = nullptr;
|
RendererCompositorRD *RendererCompositorRD::singleton = nullptr;
|
||||||
|
|
||||||
RasterizerRD::RasterizerRD() {
|
RendererCompositorRD::RendererCompositorRD() {
|
||||||
singleton = this;
|
singleton = this;
|
||||||
thread_work_pool.init();
|
thread_work_pool.init();
|
||||||
time = 0;
|
time = 0;
|
||||||
|
|
||||||
storage = memnew(RasterizerStorageRD);
|
storage = memnew(RendererStorageRD);
|
||||||
canvas = memnew(RasterizerCanvasRD(storage));
|
canvas = memnew(RendererCanvasRenderRD(storage));
|
||||||
scene = memnew(RasterizerSceneHighEndRD(storage));
|
scene = memnew(RendererSceneRenderForward(storage));
|
||||||
}
|
}
|
@ -1,5 +1,5 @@
|
|||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
/* rasterizer_rd.h */
|
/* renderer_compositor_rd.h */
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
/* This file is part of: */
|
/* This file is part of: */
|
||||||
/* GODOT ENGINE */
|
/* GODOT ENGINE */
|
||||||
@ -28,21 +28,21 @@
|
|||||||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
|
|
||||||
#ifndef RASTERIZER_RD_H
|
#ifndef RENDERING_SERVER_COMPOSITOR_RD_H
|
||||||
#define RASTERIZER_RD_H
|
#define RENDERING_SERVER_COMPOSITOR_RD_H
|
||||||
|
|
||||||
#include "core/os/os.h"
|
#include "core/os/os.h"
|
||||||
#include "core/templates/thread_work_pool.h"
|
#include "core/templates/thread_work_pool.h"
|
||||||
#include "servers/rendering/rasterizer.h"
|
#include "servers/rendering/renderer_compositor.h"
|
||||||
#include "servers/rendering/rasterizer_rd/rasterizer_canvas_rd.h"
|
#include "servers/rendering/renderer_rd/renderer_canvas_render_rd.h"
|
||||||
#include "servers/rendering/rasterizer_rd/rasterizer_scene_high_end_rd.h"
|
#include "servers/rendering/renderer_rd/renderer_scene_render_forward.h"
|
||||||
#include "servers/rendering/rasterizer_rd/rasterizer_storage_rd.h"
|
#include "servers/rendering/renderer_rd/renderer_storage_rd.h"
|
||||||
|
|
||||||
class RasterizerRD : public Rasterizer {
|
class RendererCompositorRD : public RendererCompositor {
|
||||||
protected:
|
protected:
|
||||||
RasterizerCanvasRD *canvas;
|
RendererCanvasRenderRD *canvas;
|
||||||
RasterizerStorageRD *storage;
|
RendererStorageRD *storage;
|
||||||
RasterizerSceneHighEndRD *scene;
|
RendererSceneRenderForward *scene;
|
||||||
|
|
||||||
RID copy_viewports_rd_shader;
|
RID copy_viewports_rd_shader;
|
||||||
RID copy_viewports_rd_pipeline;
|
RID copy_viewports_rd_pipeline;
|
||||||
@ -58,9 +58,9 @@ protected:
|
|||||||
static uint64_t frame;
|
static uint64_t frame;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
RasterizerStorage *get_storage() { return storage; }
|
RendererStorage *get_storage() { return storage; }
|
||||||
RasterizerCanvas *get_canvas() { return canvas; }
|
RendererCanvasRender *get_canvas() { return canvas; }
|
||||||
RasterizerScene *get_scene() { return scene; }
|
RendererSceneRender *get_scene() { return scene; }
|
||||||
|
|
||||||
void set_boot_image(const Ref<Image> &p_image, const Color &p_color, bool p_scale, bool p_use_filter) {}
|
void set_boot_image(const Ref<Image> &p_image, const Color &p_color, bool p_scale, bool p_use_filter) {}
|
||||||
|
|
||||||
@ -80,8 +80,8 @@ public:
|
|||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static Rasterizer *_create_current() {
|
static RendererCompositor *_create_current() {
|
||||||
return memnew(RasterizerRD);
|
return memnew(RendererCompositorRD);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void make_current() {
|
static void make_current() {
|
||||||
@ -92,8 +92,8 @@ public:
|
|||||||
|
|
||||||
static ThreadWorkPool thread_work_pool;
|
static ThreadWorkPool thread_work_pool;
|
||||||
|
|
||||||
static RasterizerRD *singleton;
|
static RendererCompositorRD *singleton;
|
||||||
RasterizerRD();
|
RendererCompositorRD();
|
||||||
~RasterizerRD() {}
|
~RendererCompositorRD() {}
|
||||||
};
|
};
|
||||||
#endif // RASTERIZER_RD_H
|
#endif // RASTERIZER_RD_H
|
@ -1,5 +1,5 @@
|
|||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
/* rasterizer_scene_high_end_rd.cpp */
|
/* renderer_scene_render_forward.cpp */
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
/* This file is part of: */
|
/* This file is part of: */
|
||||||
/* GODOT ENGINE */
|
/* GODOT ENGINE */
|
||||||
@ -28,13 +28,13 @@
|
|||||||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
|
|
||||||
#include "rasterizer_scene_high_end_rd.h"
|
#include "renderer_scene_render_forward.h"
|
||||||
#include "core/config/project_settings.h"
|
#include "core/config/project_settings.h"
|
||||||
#include "servers/rendering/rendering_device.h"
|
#include "servers/rendering/rendering_device.h"
|
||||||
#include "servers/rendering/rendering_server_default.h"
|
#include "servers/rendering/rendering_server_default.h"
|
||||||
|
|
||||||
/* SCENE SHADER */
|
/* SCENE SHADER */
|
||||||
void RasterizerSceneHighEndRD::ShaderData::set_code(const String &p_code) {
|
void RendererSceneRenderForward::ShaderData::set_code(const String &p_code) {
|
||||||
//compile
|
//compile
|
||||||
|
|
||||||
code = p_code;
|
code = p_code;
|
||||||
@ -123,7 +123,7 @@ void RasterizerSceneHighEndRD::ShaderData::set_code(const String &p_code) {
|
|||||||
|
|
||||||
actions.uniforms = &uniforms;
|
actions.uniforms = &uniforms;
|
||||||
|
|
||||||
RasterizerSceneHighEndRD *scene_singleton = (RasterizerSceneHighEndRD *)RasterizerSceneHighEndRD::singleton;
|
RendererSceneRenderForward *scene_singleton = (RendererSceneRenderForward *)RendererSceneRenderForward::singleton;
|
||||||
|
|
||||||
Error err = scene_singleton->shader.compiler.compile(RS::SHADER_SPATIAL, code, &actions, path, gen_code);
|
Error err = scene_singleton->shader.compiler.compile(RS::SHADER_SPATIAL, code, &actions, path, gen_code);
|
||||||
|
|
||||||
@ -321,7 +321,7 @@ void RasterizerSceneHighEndRD::ShaderData::set_code(const String &p_code) {
|
|||||||
valid = true;
|
valid = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerSceneHighEndRD::ShaderData::set_default_texture_param(const StringName &p_name, RID p_texture) {
|
void RendererSceneRenderForward::ShaderData::set_default_texture_param(const StringName &p_name, RID p_texture) {
|
||||||
if (!p_texture.is_valid()) {
|
if (!p_texture.is_valid()) {
|
||||||
default_texture_params.erase(p_name);
|
default_texture_params.erase(p_name);
|
||||||
} else {
|
} else {
|
||||||
@ -329,7 +329,7 @@ void RasterizerSceneHighEndRD::ShaderData::set_default_texture_param(const Strin
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerSceneHighEndRD::ShaderData::get_param_list(List<PropertyInfo> *p_param_list) const {
|
void RendererSceneRenderForward::ShaderData::get_param_list(List<PropertyInfo> *p_param_list) const {
|
||||||
Map<int, StringName> order;
|
Map<int, StringName> order;
|
||||||
|
|
||||||
for (Map<StringName, ShaderLanguage::ShaderNode::Uniform>::Element *E = uniforms.front(); E; E = E->next()) {
|
for (Map<StringName, ShaderLanguage::ShaderNode::Uniform>::Element *E = uniforms.front(); E; E = E->next()) {
|
||||||
@ -351,13 +351,13 @@ void RasterizerSceneHighEndRD::ShaderData::get_param_list(List<PropertyInfo> *p_
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerSceneHighEndRD::ShaderData::get_instance_param_list(List<RasterizerStorage::InstanceShaderParam> *p_param_list) const {
|
void RendererSceneRenderForward::ShaderData::get_instance_param_list(List<RendererStorage::InstanceShaderParam> *p_param_list) const {
|
||||||
for (Map<StringName, ShaderLanguage::ShaderNode::Uniform>::Element *E = uniforms.front(); E; E = E->next()) {
|
for (Map<StringName, ShaderLanguage::ShaderNode::Uniform>::Element *E = uniforms.front(); E; E = E->next()) {
|
||||||
if (E->get().scope != ShaderLanguage::ShaderNode::Uniform::SCOPE_INSTANCE) {
|
if (E->get().scope != ShaderLanguage::ShaderNode::Uniform::SCOPE_INSTANCE) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
RasterizerStorage::InstanceShaderParam p;
|
RendererStorage::InstanceShaderParam p;
|
||||||
p.info = ShaderLanguage::uniform_to_property_info(E->get());
|
p.info = ShaderLanguage::uniform_to_property_info(E->get());
|
||||||
p.info.name = E->key(); //supply name
|
p.info.name = E->key(); //supply name
|
||||||
p.index = E->get().instance_index;
|
p.index = E->get().instance_index;
|
||||||
@ -366,7 +366,7 @@ void RasterizerSceneHighEndRD::ShaderData::get_instance_param_list(List<Rasteriz
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool RasterizerSceneHighEndRD::ShaderData::is_param_texture(const StringName &p_param) const {
|
bool RendererSceneRenderForward::ShaderData::is_param_texture(const StringName &p_param) const {
|
||||||
if (!uniforms.has(p_param)) {
|
if (!uniforms.has(p_param)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -374,15 +374,15 @@ bool RasterizerSceneHighEndRD::ShaderData::is_param_texture(const StringName &p_
|
|||||||
return uniforms[p_param].texture_order >= 0;
|
return uniforms[p_param].texture_order >= 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool RasterizerSceneHighEndRD::ShaderData::is_animated() const {
|
bool RendererSceneRenderForward::ShaderData::is_animated() const {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool RasterizerSceneHighEndRD::ShaderData::casts_shadows() const {
|
bool RendererSceneRenderForward::ShaderData::casts_shadows() const {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
Variant RasterizerSceneHighEndRD::ShaderData::get_default_parameter(const StringName &p_parameter) const {
|
Variant RendererSceneRenderForward::ShaderData::get_default_parameter(const StringName &p_parameter) const {
|
||||||
if (uniforms.has(p_parameter)) {
|
if (uniforms.has(p_parameter)) {
|
||||||
ShaderLanguage::ShaderNode::Uniform uniform = uniforms[p_parameter];
|
ShaderLanguage::ShaderNode::Uniform uniform = uniforms[p_parameter];
|
||||||
Vector<ShaderLanguage::ConstantNode::Value> default_value = uniform.default_value;
|
Vector<ShaderLanguage::ConstantNode::Value> default_value = uniform.default_value;
|
||||||
@ -391,13 +391,13 @@ Variant RasterizerSceneHighEndRD::ShaderData::get_default_parameter(const String
|
|||||||
return Variant();
|
return Variant();
|
||||||
}
|
}
|
||||||
|
|
||||||
RasterizerSceneHighEndRD::ShaderData::ShaderData() {
|
RendererSceneRenderForward::ShaderData::ShaderData() {
|
||||||
valid = false;
|
valid = false;
|
||||||
uses_screen_texture = false;
|
uses_screen_texture = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
RasterizerSceneHighEndRD::ShaderData::~ShaderData() {
|
RendererSceneRenderForward::ShaderData::~ShaderData() {
|
||||||
RasterizerSceneHighEndRD *scene_singleton = (RasterizerSceneHighEndRD *)RasterizerSceneHighEndRD::singleton;
|
RendererSceneRenderForward *scene_singleton = (RendererSceneRenderForward *)RendererSceneRenderForward::singleton;
|
||||||
ERR_FAIL_COND(!scene_singleton);
|
ERR_FAIL_COND(!scene_singleton);
|
||||||
//pipeline variants will clear themselves if shader is gone
|
//pipeline variants will clear themselves if shader is gone
|
||||||
if (version.is_valid()) {
|
if (version.is_valid()) {
|
||||||
@ -405,21 +405,21 @@ RasterizerSceneHighEndRD::ShaderData::~ShaderData() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
RasterizerStorageRD::ShaderData *RasterizerSceneHighEndRD::_create_shader_func() {
|
RendererStorageRD::ShaderData *RendererSceneRenderForward::_create_shader_func() {
|
||||||
ShaderData *shader_data = memnew(ShaderData);
|
ShaderData *shader_data = memnew(ShaderData);
|
||||||
return shader_data;
|
return shader_data;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerSceneHighEndRD::MaterialData::set_render_priority(int p_priority) {
|
void RendererSceneRenderForward::MaterialData::set_render_priority(int p_priority) {
|
||||||
priority = p_priority - RS::MATERIAL_RENDER_PRIORITY_MIN; //8 bits
|
priority = p_priority - RS::MATERIAL_RENDER_PRIORITY_MIN; //8 bits
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerSceneHighEndRD::MaterialData::set_next_pass(RID p_pass) {
|
void RendererSceneRenderForward::MaterialData::set_next_pass(RID p_pass) {
|
||||||
next_pass = p_pass;
|
next_pass = p_pass;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerSceneHighEndRD::MaterialData::update_parameters(const Map<StringName, Variant> &p_parameters, bool p_uniform_dirty, bool p_textures_dirty) {
|
void RendererSceneRenderForward::MaterialData::update_parameters(const Map<StringName, Variant> &p_parameters, bool p_uniform_dirty, bool p_textures_dirty) {
|
||||||
RasterizerSceneHighEndRD *scene_singleton = (RasterizerSceneHighEndRD *)RasterizerSceneHighEndRD::singleton;
|
RendererSceneRenderForward *scene_singleton = (RendererSceneRenderForward *)RendererSceneRenderForward::singleton;
|
||||||
|
|
||||||
if ((uint32_t)ubo_data.size() != shader_data->ubo_size) {
|
if ((uint32_t)ubo_data.size() != shader_data->ubo_size) {
|
||||||
p_uniform_dirty = true;
|
p_uniform_dirty = true;
|
||||||
@ -498,7 +498,7 @@ void RasterizerSceneHighEndRD::MaterialData::update_parameters(const Map<StringN
|
|||||||
uniform_set = RD::get_singleton()->uniform_set_create(uniforms, scene_singleton->shader.scene_shader.version_get_shader(shader_data->version, 0), MATERIAL_UNIFORM_SET);
|
uniform_set = RD::get_singleton()->uniform_set_create(uniforms, scene_singleton->shader.scene_shader.version_get_shader(shader_data->version, 0), MATERIAL_UNIFORM_SET);
|
||||||
}
|
}
|
||||||
|
|
||||||
RasterizerSceneHighEndRD::MaterialData::~MaterialData() {
|
RendererSceneRenderForward::MaterialData::~MaterialData() {
|
||||||
if (uniform_set.is_valid() && RD::get_singleton()->uniform_set_is_valid(uniform_set)) {
|
if (uniform_set.is_valid() && RD::get_singleton()->uniform_set_is_valid(uniform_set)) {
|
||||||
RD::get_singleton()->free(uniform_set);
|
RD::get_singleton()->free(uniform_set);
|
||||||
}
|
}
|
||||||
@ -508,7 +508,7 @@ RasterizerSceneHighEndRD::MaterialData::~MaterialData() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
RasterizerStorageRD::MaterialData *RasterizerSceneHighEndRD::_create_material_func(ShaderData *p_shader) {
|
RendererStorageRD::MaterialData *RendererSceneRenderForward::_create_material_func(ShaderData *p_shader) {
|
||||||
MaterialData *material_data = memnew(MaterialData);
|
MaterialData *material_data = memnew(MaterialData);
|
||||||
material_data->shader_data = p_shader;
|
material_data->shader_data = p_shader;
|
||||||
material_data->last_frame = false;
|
material_data->last_frame = false;
|
||||||
@ -516,11 +516,11 @@ RasterizerStorageRD::MaterialData *RasterizerSceneHighEndRD::_create_material_fu
|
|||||||
return material_data;
|
return material_data;
|
||||||
}
|
}
|
||||||
|
|
||||||
RasterizerSceneHighEndRD::RenderBufferDataHighEnd::~RenderBufferDataHighEnd() {
|
RendererSceneRenderForward::RenderBufferDataHighEnd::~RenderBufferDataHighEnd() {
|
||||||
clear();
|
clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerSceneHighEndRD::RenderBufferDataHighEnd::ensure_specular() {
|
void RendererSceneRenderForward::RenderBufferDataHighEnd::ensure_specular() {
|
||||||
if (!specular.is_valid()) {
|
if (!specular.is_valid()) {
|
||||||
RD::TextureFormat tf;
|
RD::TextureFormat tf;
|
||||||
tf.format = RD::DATA_FORMAT_R16G16B16A16_SFLOAT;
|
tf.format = RD::DATA_FORMAT_R16G16B16A16_SFLOAT;
|
||||||
@ -574,7 +574,7 @@ void RasterizerSceneHighEndRD::RenderBufferDataHighEnd::ensure_specular() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerSceneHighEndRD::RenderBufferDataHighEnd::ensure_gi() {
|
void RendererSceneRenderForward::RenderBufferDataHighEnd::ensure_gi() {
|
||||||
if (!reflection_buffer.is_valid()) {
|
if (!reflection_buffer.is_valid()) {
|
||||||
RD::TextureFormat tf;
|
RD::TextureFormat tf;
|
||||||
tf.format = RD::DATA_FORMAT_R16G16B16A16_SFLOAT;
|
tf.format = RD::DATA_FORMAT_R16G16B16A16_SFLOAT;
|
||||||
@ -587,7 +587,7 @@ void RasterizerSceneHighEndRD::RenderBufferDataHighEnd::ensure_gi() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerSceneHighEndRD::RenderBufferDataHighEnd::ensure_giprobe() {
|
void RendererSceneRenderForward::RenderBufferDataHighEnd::ensure_giprobe() {
|
||||||
if (!giprobe_buffer.is_valid()) {
|
if (!giprobe_buffer.is_valid()) {
|
||||||
RD::TextureFormat tf;
|
RD::TextureFormat tf;
|
||||||
tf.format = RD::DATA_FORMAT_R8G8_UINT;
|
tf.format = RD::DATA_FORMAT_R8G8_UINT;
|
||||||
@ -623,7 +623,7 @@ void RasterizerSceneHighEndRD::RenderBufferDataHighEnd::ensure_giprobe() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerSceneHighEndRD::RenderBufferDataHighEnd::clear() {
|
void RendererSceneRenderForward::RenderBufferDataHighEnd::clear() {
|
||||||
if (ambient_buffer != RID() && ambient_buffer != color) {
|
if (ambient_buffer != RID() && ambient_buffer != color) {
|
||||||
RD::get_singleton()->free(ambient_buffer);
|
RD::get_singleton()->free(ambient_buffer);
|
||||||
ambient_buffer = RID();
|
ambient_buffer = RID();
|
||||||
@ -687,7 +687,7 @@ void RasterizerSceneHighEndRD::RenderBufferDataHighEnd::clear() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerSceneHighEndRD::RenderBufferDataHighEnd::configure(RID p_color_buffer, RID p_depth_buffer, int p_width, int p_height, RS::ViewportMSAA p_msaa) {
|
void RendererSceneRenderForward::RenderBufferDataHighEnd::configure(RID p_color_buffer, RID p_depth_buffer, int p_width, int p_height, RS::ViewportMSAA p_msaa) {
|
||||||
clear();
|
clear();
|
||||||
|
|
||||||
msaa = p_msaa;
|
msaa = p_msaa;
|
||||||
@ -754,7 +754,7 @@ void RasterizerSceneHighEndRD::RenderBufferDataHighEnd::configure(RID p_color_bu
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerSceneHighEndRD::_allocate_normal_roughness_texture(RenderBufferDataHighEnd *rb) {
|
void RendererSceneRenderForward::_allocate_normal_roughness_texture(RenderBufferDataHighEnd *rb) {
|
||||||
if (rb->normal_roughness_buffer.is_valid()) {
|
if (rb->normal_roughness_buffer.is_valid()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -792,18 +792,18 @@ void RasterizerSceneHighEndRD::_allocate_normal_roughness_texture(RenderBufferDa
|
|||||||
_render_buffers_clear_uniform_set(rb);
|
_render_buffers_clear_uniform_set(rb);
|
||||||
}
|
}
|
||||||
|
|
||||||
RasterizerSceneRD::RenderBufferData *RasterizerSceneHighEndRD::_create_render_buffer_data() {
|
RendererSceneRenderRD::RenderBufferData *RendererSceneRenderForward::_create_render_buffer_data() {
|
||||||
return memnew(RenderBufferDataHighEnd);
|
return memnew(RenderBufferDataHighEnd);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool RasterizerSceneHighEndRD::free(RID p_rid) {
|
bool RendererSceneRenderForward::free(RID p_rid) {
|
||||||
if (RasterizerSceneRD::free(p_rid)) {
|
if (RendererSceneRenderRD::free(p_rid)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerSceneHighEndRD::_fill_instances(RenderList::Element **p_elements, int p_element_count, bool p_for_depth, bool p_has_sdfgi, bool p_has_opaque_gi) {
|
void RendererSceneRenderForward::_fill_instances(RenderList::Element **p_elements, int p_element_count, bool p_for_depth, bool p_has_sdfgi, bool p_has_opaque_gi) {
|
||||||
uint32_t lightmap_captures_used = 0;
|
uint32_t lightmap_captures_used = 0;
|
||||||
|
|
||||||
for (int i = 0; i < p_element_count; i++) {
|
for (int i = 0; i < p_element_count; i++) {
|
||||||
@ -862,11 +862,11 @@ void RasterizerSceneHighEndRD::_fill_instances(RenderList::Element **p_elements,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (store_transform) {
|
if (store_transform) {
|
||||||
RasterizerStorageRD::store_transform(e->instance->transform, id.transform);
|
RendererStorageRD::store_transform(e->instance->transform, id.transform);
|
||||||
RasterizerStorageRD::store_transform(Transform(e->instance->transform.basis.inverse().transposed()), id.normal_transform);
|
RendererStorageRD::store_transform(Transform(e->instance->transform.basis.inverse().transposed()), id.normal_transform);
|
||||||
} else {
|
} else {
|
||||||
RasterizerStorageRD::store_transform(Transform(), id.transform);
|
RendererStorageRD::store_transform(Transform(), id.transform);
|
||||||
RasterizerStorageRD::store_transform(Transform(), id.normal_transform);
|
RendererStorageRD::store_transform(Transform(), id.normal_transform);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (p_for_depth) {
|
if (p_for_depth) {
|
||||||
@ -950,7 +950,7 @@ void RasterizerSceneHighEndRD::_fill_instances(RenderList::Element **p_elements,
|
|||||||
|
|
||||||
/// RENDERING ///
|
/// RENDERING ///
|
||||||
|
|
||||||
void RasterizerSceneHighEndRD::_render_list(RenderingDevice::DrawListID p_draw_list, RenderingDevice::FramebufferFormatID p_framebuffer_Format, RenderList::Element **p_elements, int p_element_count, bool p_reverse_cull, PassMode p_pass_mode, bool p_no_gi, RID p_radiance_uniform_set, RID p_render_buffers_uniform_set, bool p_force_wireframe, const Vector2 &p_uv_offset) {
|
void RendererSceneRenderForward::_render_list(RenderingDevice::DrawListID p_draw_list, RenderingDevice::FramebufferFormatID p_framebuffer_Format, RenderList::Element **p_elements, int p_element_count, bool p_reverse_cull, PassMode p_pass_mode, bool p_no_gi, RID p_radiance_uniform_set, RID p_render_buffers_uniform_set, bool p_force_wireframe, const Vector2 &p_uv_offset) {
|
||||||
RD::DrawListID draw_list = p_draw_list;
|
RD::DrawListID draw_list = p_draw_list;
|
||||||
RD::FramebufferFormatID framebuffer_format = p_framebuffer_Format;
|
RD::FramebufferFormatID framebuffer_format = p_framebuffer_Format;
|
||||||
|
|
||||||
@ -1076,7 +1076,7 @@ void RasterizerSceneHighEndRD::_render_list(RenderingDevice::DrawListID p_draw_l
|
|||||||
} break;
|
} break;
|
||||||
}
|
}
|
||||||
|
|
||||||
RenderPipelineVertexFormatCacheRD *pipeline = nullptr;
|
PipelineCacheRD *pipeline = nullptr;
|
||||||
|
|
||||||
pipeline = &shader->pipelines[cull_variant][primitive][shader_version];
|
pipeline = &shader->pipelines[cull_variant][primitive][shader_version];
|
||||||
|
|
||||||
@ -1165,7 +1165,7 @@ void RasterizerSceneHighEndRD::_render_list(RenderingDevice::DrawListID p_draw_l
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerSceneHighEndRD::_setup_environment(RID p_environment, RID p_render_buffers, const CameraMatrix &p_cam_projection, const Transform &p_cam_transform, RID p_reflection_probe, bool p_no_fog, const Size2 &p_screen_pixel_size, RID p_shadow_atlas, bool p_flip_y, const Color &p_default_bg_color, float p_znear, float p_zfar, bool p_opaque_render_buffers, bool p_pancake_shadows) {
|
void RendererSceneRenderForward::_setup_environment(RID p_environment, RID p_render_buffers, const CameraMatrix &p_cam_projection, const Transform &p_cam_transform, RID p_reflection_probe, bool p_no_fog, const Size2 &p_screen_pixel_size, RID p_shadow_atlas, bool p_flip_y, const Color &p_default_bg_color, float p_znear, float p_zfar, bool p_opaque_render_buffers, bool p_pancake_shadows) {
|
||||||
//CameraMatrix projection = p_cam_projection;
|
//CameraMatrix projection = p_cam_projection;
|
||||||
//projection.flip_y(); // Vulkan and modern APIs use Y-Down
|
//projection.flip_y(); // Vulkan and modern APIs use Y-Down
|
||||||
CameraMatrix correction;
|
CameraMatrix correction;
|
||||||
@ -1173,20 +1173,20 @@ void RasterizerSceneHighEndRD::_setup_environment(RID p_environment, RID p_rende
|
|||||||
CameraMatrix projection = correction * p_cam_projection;
|
CameraMatrix projection = correction * p_cam_projection;
|
||||||
|
|
||||||
//store camera into ubo
|
//store camera into ubo
|
||||||
RasterizerStorageRD::store_camera(projection, scene_state.ubo.projection_matrix);
|
RendererStorageRD::store_camera(projection, scene_state.ubo.projection_matrix);
|
||||||
RasterizerStorageRD::store_camera(projection.inverse(), scene_state.ubo.inv_projection_matrix);
|
RendererStorageRD::store_camera(projection.inverse(), scene_state.ubo.inv_projection_matrix);
|
||||||
RasterizerStorageRD::store_transform(p_cam_transform, scene_state.ubo.camera_matrix);
|
RendererStorageRD::store_transform(p_cam_transform, scene_state.ubo.camera_matrix);
|
||||||
RasterizerStorageRD::store_transform(p_cam_transform.affine_inverse(), scene_state.ubo.inv_camera_matrix);
|
RendererStorageRD::store_transform(p_cam_transform.affine_inverse(), scene_state.ubo.inv_camera_matrix);
|
||||||
|
|
||||||
scene_state.ubo.z_far = p_zfar;
|
scene_state.ubo.z_far = p_zfar;
|
||||||
scene_state.ubo.z_near = p_znear;
|
scene_state.ubo.z_near = p_znear;
|
||||||
|
|
||||||
scene_state.ubo.pancake_shadows = p_pancake_shadows;
|
scene_state.ubo.pancake_shadows = p_pancake_shadows;
|
||||||
|
|
||||||
RasterizerStorageRD::store_soft_shadow_kernel(directional_penumbra_shadow_kernel_get(), scene_state.ubo.directional_penumbra_shadow_kernel);
|
RendererStorageRD::store_soft_shadow_kernel(directional_penumbra_shadow_kernel_get(), scene_state.ubo.directional_penumbra_shadow_kernel);
|
||||||
RasterizerStorageRD::store_soft_shadow_kernel(directional_soft_shadow_kernel_get(), scene_state.ubo.directional_soft_shadow_kernel);
|
RendererStorageRD::store_soft_shadow_kernel(directional_soft_shadow_kernel_get(), scene_state.ubo.directional_soft_shadow_kernel);
|
||||||
RasterizerStorageRD::store_soft_shadow_kernel(penumbra_shadow_kernel_get(), scene_state.ubo.penumbra_shadow_kernel);
|
RendererStorageRD::store_soft_shadow_kernel(penumbra_shadow_kernel_get(), scene_state.ubo.penumbra_shadow_kernel);
|
||||||
RasterizerStorageRD::store_soft_shadow_kernel(soft_shadow_kernel_get(), scene_state.ubo.soft_shadow_kernel);
|
RendererStorageRD::store_soft_shadow_kernel(soft_shadow_kernel_get(), scene_state.ubo.soft_shadow_kernel);
|
||||||
|
|
||||||
scene_state.ubo.directional_penumbra_shadow_samples = directional_penumbra_shadow_samples_get();
|
scene_state.ubo.directional_penumbra_shadow_samples = directional_penumbra_shadow_samples_get();
|
||||||
scene_state.ubo.directional_soft_shadow_samples = directional_soft_shadow_samples_get();
|
scene_state.ubo.directional_soft_shadow_samples = directional_soft_shadow_samples_get();
|
||||||
@ -1330,7 +1330,7 @@ void RasterizerSceneHighEndRD::_setup_environment(RID p_environment, RID p_rende
|
|||||||
|
|
||||||
Basis sky_transform = environment_get_sky_orientation(p_environment);
|
Basis sky_transform = environment_get_sky_orientation(p_environment);
|
||||||
sky_transform = sky_transform.inverse() * p_cam_transform.basis;
|
sky_transform = sky_transform.inverse() * p_cam_transform.basis;
|
||||||
RasterizerStorageRD::store_transform_3x3(sky_transform, scene_state.ubo.radiance_inverse_xform);
|
RendererStorageRD::store_transform_3x3(sky_transform, scene_state.ubo.radiance_inverse_xform);
|
||||||
|
|
||||||
scene_state.ubo.use_ambient_cubemap = (ambient_src == RS::ENV_AMBIENT_SOURCE_BG && env_bg == RS::ENV_BG_SKY) || ambient_src == RS::ENV_AMBIENT_SOURCE_SKY;
|
scene_state.ubo.use_ambient_cubemap = (ambient_src == RS::ENV_AMBIENT_SOURCE_BG && env_bg == RS::ENV_BG_SKY) || ambient_src == RS::ENV_AMBIENT_SOURCE_SKY;
|
||||||
scene_state.ubo.use_ambient_light = scene_state.ubo.use_ambient_cubemap || ambient_src == RS::ENV_AMBIENT_SOURCE_COLOR;
|
scene_state.ubo.use_ambient_light = scene_state.ubo.use_ambient_cubemap || ambient_src == RS::ENV_AMBIENT_SOURCE_COLOR;
|
||||||
@ -1397,7 +1397,7 @@ void RasterizerSceneHighEndRD::_setup_environment(RID p_environment, RID p_rende
|
|||||||
RD::get_singleton()->buffer_update(scene_state.uniform_buffer, 0, sizeof(SceneState::UBO), &scene_state.ubo, true);
|
RD::get_singleton()->buffer_update(scene_state.uniform_buffer, 0, sizeof(SceneState::UBO), &scene_state.ubo, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerSceneHighEndRD::_add_geometry(InstanceBase *p_instance, uint32_t p_surface, RID p_material, PassMode p_pass_mode, uint32_t p_geometry_index, bool p_using_sdfgi) {
|
void RendererSceneRenderForward::_add_geometry(InstanceBase *p_instance, uint32_t p_surface, RID p_material, PassMode p_pass_mode, uint32_t p_geometry_index, bool p_using_sdfgi) {
|
||||||
RID m_src;
|
RID m_src;
|
||||||
|
|
||||||
m_src = p_instance->material_override.is_valid() ? p_instance->material_override : p_material;
|
m_src = p_instance->material_override.is_valid() ? p_instance->material_override : p_material;
|
||||||
@ -1413,14 +1413,14 @@ void RasterizerSceneHighEndRD::_add_geometry(InstanceBase *p_instance, uint32_t
|
|||||||
MaterialData *material = nullptr;
|
MaterialData *material = nullptr;
|
||||||
|
|
||||||
if (m_src.is_valid()) {
|
if (m_src.is_valid()) {
|
||||||
material = (MaterialData *)storage->material_get_data(m_src, RasterizerStorageRD::SHADER_TYPE_3D);
|
material = (MaterialData *)storage->material_get_data(m_src, RendererStorageRD::SHADER_TYPE_3D);
|
||||||
if (!material || !material->shader_data->valid) {
|
if (!material || !material->shader_data->valid) {
|
||||||
material = nullptr;
|
material = nullptr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!material) {
|
if (!material) {
|
||||||
material = (MaterialData *)storage->material_get_data(default_material, RasterizerStorageRD::SHADER_TYPE_3D);
|
material = (MaterialData *)storage->material_get_data(default_material, RendererStorageRD::SHADER_TYPE_3D);
|
||||||
m_src = default_material;
|
m_src = default_material;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1429,7 +1429,7 @@ void RasterizerSceneHighEndRD::_add_geometry(InstanceBase *p_instance, uint32_t
|
|||||||
_add_geometry_with_material(p_instance, p_surface, material, m_src, p_pass_mode, p_geometry_index, p_using_sdfgi);
|
_add_geometry_with_material(p_instance, p_surface, material, m_src, p_pass_mode, p_geometry_index, p_using_sdfgi);
|
||||||
|
|
||||||
while (material->next_pass.is_valid()) {
|
while (material->next_pass.is_valid()) {
|
||||||
material = (MaterialData *)storage->material_get_data(material->next_pass, RasterizerStorageRD::SHADER_TYPE_3D);
|
material = (MaterialData *)storage->material_get_data(material->next_pass, RendererStorageRD::SHADER_TYPE_3D);
|
||||||
if (!material || !material->shader_data->valid) {
|
if (!material || !material->shader_data->valid) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -1437,7 +1437,7 @@ void RasterizerSceneHighEndRD::_add_geometry(InstanceBase *p_instance, uint32_t
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerSceneHighEndRD::_add_geometry_with_material(InstanceBase *p_instance, uint32_t p_surface, MaterialData *p_material, RID p_material_rid, PassMode p_pass_mode, uint32_t p_geometry_index, bool p_using_sdfgi) {
|
void RendererSceneRenderForward::_add_geometry_with_material(InstanceBase *p_instance, uint32_t p_surface, MaterialData *p_material, RID p_material_rid, PassMode p_pass_mode, uint32_t p_geometry_index, bool p_using_sdfgi) {
|
||||||
bool has_read_screen_alpha = p_material->shader_data->uses_screen_texture || p_material->shader_data->uses_depth_texture || p_material->shader_data->uses_normal_texture;
|
bool has_read_screen_alpha = p_material->shader_data->uses_screen_texture || p_material->shader_data->uses_depth_texture || p_material->shader_data->uses_normal_texture;
|
||||||
bool has_base_alpha = (p_material->shader_data->uses_alpha || has_read_screen_alpha);
|
bool has_base_alpha = (p_material->shader_data->uses_alpha || has_read_screen_alpha);
|
||||||
bool has_blend_alpha = p_material->shader_data->uses_blend_alpha;
|
bool has_blend_alpha = p_material->shader_data->uses_blend_alpha;
|
||||||
@ -1468,9 +1468,9 @@ void RasterizerSceneHighEndRD::_add_geometry_with_material(InstanceBase *p_insta
|
|||||||
if ((p_pass_mode != PASS_MODE_DEPTH_MATERIAL && p_pass_mode != PASS_MODE_SDF) && !p_material->shader_data->writes_modelview_or_projection && !p_material->shader_data->uses_vertex && !p_material->shader_data->uses_discard && !p_material->shader_data->uses_depth_pre_pass) {
|
if ((p_pass_mode != PASS_MODE_DEPTH_MATERIAL && p_pass_mode != PASS_MODE_SDF) && !p_material->shader_data->writes_modelview_or_projection && !p_material->shader_data->uses_vertex && !p_material->shader_data->uses_discard && !p_material->shader_data->uses_depth_pre_pass) {
|
||||||
//shader does not use discard and does not write a vertex position, use generic material
|
//shader does not use discard and does not write a vertex position, use generic material
|
||||||
if (p_pass_mode == PASS_MODE_SHADOW || p_pass_mode == PASS_MODE_DEPTH) {
|
if (p_pass_mode == PASS_MODE_SHADOW || p_pass_mode == PASS_MODE_DEPTH) {
|
||||||
p_material = (MaterialData *)storage->material_get_data(default_material, RasterizerStorageRD::SHADER_TYPE_3D);
|
p_material = (MaterialData *)storage->material_get_data(default_material, RendererStorageRD::SHADER_TYPE_3D);
|
||||||
} else if ((p_pass_mode == PASS_MODE_DEPTH_NORMAL_ROUGHNESS || p_pass_mode == PASS_MODE_DEPTH_NORMAL_ROUGHNESS_GIPROBE) && !p_material->shader_data->uses_normal && !p_material->shader_data->uses_roughness) {
|
} else if ((p_pass_mode == PASS_MODE_DEPTH_NORMAL_ROUGHNESS || p_pass_mode == PASS_MODE_DEPTH_NORMAL_ROUGHNESS_GIPROBE) && !p_material->shader_data->uses_normal && !p_material->shader_data->uses_roughness) {
|
||||||
p_material = (MaterialData *)storage->material_get_data(default_material, RasterizerStorageRD::SHADER_TYPE_3D);
|
p_material = (MaterialData *)storage->material_get_data(default_material, RendererStorageRD::SHADER_TYPE_3D);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1493,7 +1493,7 @@ void RasterizerSceneHighEndRD::_add_geometry_with_material(InstanceBase *p_insta
|
|||||||
if (e->material->last_pass != render_pass) {
|
if (e->material->last_pass != render_pass) {
|
||||||
if (!RD::get_singleton()->uniform_set_is_valid(e->material->uniform_set)) {
|
if (!RD::get_singleton()->uniform_set_is_valid(e->material->uniform_set)) {
|
||||||
//uniform set no longer valid, probably a texture changed
|
//uniform set no longer valid, probably a texture changed
|
||||||
storage->material_force_update_textures(p_material_rid, RasterizerStorageRD::SHADER_TYPE_3D);
|
storage->material_force_update_textures(p_material_rid, RendererStorageRD::SHADER_TYPE_3D);
|
||||||
}
|
}
|
||||||
e->material->last_pass = render_pass;
|
e->material->last_pass = render_pass;
|
||||||
e->material->index = scene_state.current_material_index++;
|
e->material->index = scene_state.current_material_index++;
|
||||||
@ -1516,7 +1516,7 @@ void RasterizerSceneHighEndRD::_add_geometry_with_material(InstanceBase *p_insta
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerSceneHighEndRD::_fill_render_list(InstanceBase **p_cull_result, int p_cull_count, PassMode p_pass_mode, bool p_using_sdfgi) {
|
void RendererSceneRenderForward::_fill_render_list(InstanceBase **p_cull_result, int p_cull_count, PassMode p_pass_mode, bool p_using_sdfgi) {
|
||||||
scene_state.current_shader_index = 0;
|
scene_state.current_shader_index = 0;
|
||||||
scene_state.current_material_index = 0;
|
scene_state.current_material_index = 0;
|
||||||
scene_state.used_sss = false;
|
scene_state.used_sss = false;
|
||||||
@ -1619,7 +1619,7 @@ void RasterizerSceneHighEndRD::_fill_render_list(InstanceBase **p_cull_result, i
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerSceneHighEndRD::_setup_lightmaps(InstanceBase **p_lightmap_cull_result, int p_lightmap_cull_count, const Transform &p_cam_transform) {
|
void RendererSceneRenderForward::_setup_lightmaps(InstanceBase **p_lightmap_cull_result, int p_lightmap_cull_count, const Transform &p_cam_transform) {
|
||||||
uint32_t lightmaps_used = 0;
|
uint32_t lightmaps_used = 0;
|
||||||
for (int i = 0; i < p_lightmap_cull_count; i++) {
|
for (int i = 0; i < p_lightmap_cull_count; i++) {
|
||||||
if (i >= (int)scene_state.max_lightmaps) {
|
if (i >= (int)scene_state.max_lightmaps) {
|
||||||
@ -1629,7 +1629,7 @@ void RasterizerSceneHighEndRD::_setup_lightmaps(InstanceBase **p_lightmap_cull_r
|
|||||||
InstanceBase *lm = p_lightmap_cull_result[i];
|
InstanceBase *lm = p_lightmap_cull_result[i];
|
||||||
Basis to_lm = lm->transform.basis.inverse() * p_cam_transform.basis;
|
Basis to_lm = lm->transform.basis.inverse() * p_cam_transform.basis;
|
||||||
to_lm = to_lm.inverse().transposed(); //will transform normals
|
to_lm = to_lm.inverse().transposed(); //will transform normals
|
||||||
RasterizerStorageRD::store_transform_3x3(to_lm, scene_state.lightmaps[i].normal_xform);
|
RendererStorageRD::store_transform_3x3(to_lm, scene_state.lightmaps[i].normal_xform);
|
||||||
lm->lightmap_cull_index = i;
|
lm->lightmap_cull_index = i;
|
||||||
lightmaps_used++;
|
lightmaps_used++;
|
||||||
}
|
}
|
||||||
@ -1638,7 +1638,7 @@ void RasterizerSceneHighEndRD::_setup_lightmaps(InstanceBase **p_lightmap_cull_r
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerSceneHighEndRD::_render_scene(RID p_render_buffer, const Transform &p_cam_transform, const CameraMatrix &p_cam_projection, bool p_cam_ortogonal, InstanceBase **p_cull_result, int p_cull_count, int p_directional_light_count, RID *p_gi_probe_cull_result, int p_gi_probe_cull_count, InstanceBase **p_lightmap_cull_result, int p_lightmap_cull_count, RID p_environment, RID p_camera_effects, RID p_shadow_atlas, RID p_reflection_atlas, RID p_reflection_probe, int p_reflection_probe_pass, const Color &p_default_bg_color) {
|
void RendererSceneRenderForward::_render_scene(RID p_render_buffer, const Transform &p_cam_transform, const CameraMatrix &p_cam_projection, bool p_cam_ortogonal, InstanceBase **p_cull_result, int p_cull_count, int p_directional_light_count, RID *p_gi_probe_cull_result, int p_gi_probe_cull_count, InstanceBase **p_lightmap_cull_result, int p_lightmap_cull_count, RID p_environment, RID p_camera_effects, RID p_shadow_atlas, RID p_reflection_atlas, RID p_reflection_probe, int p_reflection_probe_pass, const Color &p_default_bg_color) {
|
||||||
RenderBufferDataHighEnd *render_buffer = nullptr;
|
RenderBufferDataHighEnd *render_buffer = nullptr;
|
||||||
if (p_render_buffer.is_valid()) {
|
if (p_render_buffer.is_valid()) {
|
||||||
render_buffer = (RenderBufferDataHighEnd *)render_buffers_get_data(p_render_buffer);
|
render_buffer = (RenderBufferDataHighEnd *)render_buffers_get_data(p_render_buffer);
|
||||||
@ -2011,7 +2011,7 @@ void RasterizerSceneHighEndRD::_render_scene(RID p_render_buffer, const Transfor
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerSceneHighEndRD::_render_shadow(RID p_framebuffer, InstanceBase **p_cull_result, int p_cull_count, const CameraMatrix &p_projection, const Transform &p_transform, float p_zfar, float p_bias, float p_normal_bias, bool p_use_dp, bool p_use_dp_flip, bool p_use_pancake) {
|
void RendererSceneRenderForward::_render_shadow(RID p_framebuffer, InstanceBase **p_cull_result, int p_cull_count, const CameraMatrix &p_projection, const Transform &p_transform, float p_zfar, float p_bias, float p_normal_bias, bool p_use_dp, bool p_use_dp_flip, bool p_use_pancake) {
|
||||||
RENDER_TIMESTAMP("Setup Rendering Shadow");
|
RENDER_TIMESTAMP("Setup Rendering Shadow");
|
||||||
|
|
||||||
_update_render_base_uniform_set();
|
_update_render_base_uniform_set();
|
||||||
@ -2044,7 +2044,7 @@ void RasterizerSceneHighEndRD::_render_shadow(RID p_framebuffer, InstanceBase **
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerSceneHighEndRD::_render_particle_collider_heightfield(RID p_fb, const Transform &p_cam_transform, const CameraMatrix &p_cam_projection, InstanceBase **p_cull_result, int p_cull_count) {
|
void RendererSceneRenderForward::_render_particle_collider_heightfield(RID p_fb, const Transform &p_cam_transform, const CameraMatrix &p_cam_projection, InstanceBase **p_cull_result, int p_cull_count) {
|
||||||
RENDER_TIMESTAMP("Setup Render Collider Heightfield");
|
RENDER_TIMESTAMP("Setup Render Collider Heightfield");
|
||||||
|
|
||||||
_update_render_base_uniform_set();
|
_update_render_base_uniform_set();
|
||||||
@ -2077,7 +2077,7 @@ void RasterizerSceneHighEndRD::_render_particle_collider_heightfield(RID p_fb, c
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerSceneHighEndRD::_render_material(const Transform &p_cam_transform, const CameraMatrix &p_cam_projection, bool p_cam_ortogonal, InstanceBase **p_cull_result, int p_cull_count, RID p_framebuffer, const Rect2i &p_region) {
|
void RendererSceneRenderForward::_render_material(const Transform &p_cam_transform, const CameraMatrix &p_cam_projection, bool p_cam_ortogonal, InstanceBase **p_cull_result, int p_cull_count, RID p_framebuffer, const Rect2i &p_region) {
|
||||||
RENDER_TIMESTAMP("Setup Rendering Material");
|
RENDER_TIMESTAMP("Setup Rendering Material");
|
||||||
|
|
||||||
_update_render_base_uniform_set();
|
_update_render_base_uniform_set();
|
||||||
@ -2116,7 +2116,7 @@ void RasterizerSceneHighEndRD::_render_material(const Transform &p_cam_transform
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerSceneHighEndRD::_render_uv2(InstanceBase **p_cull_result, int p_cull_count, RID p_framebuffer, const Rect2i &p_region) {
|
void RendererSceneRenderForward::_render_uv2(InstanceBase **p_cull_result, int p_cull_count, RID p_framebuffer, const Rect2i &p_region) {
|
||||||
RENDER_TIMESTAMP("Setup Rendering UV2");
|
RENDER_TIMESTAMP("Setup Rendering UV2");
|
||||||
|
|
||||||
_update_render_base_uniform_set();
|
_update_render_base_uniform_set();
|
||||||
@ -2177,7 +2177,7 @@ void RasterizerSceneHighEndRD::_render_uv2(InstanceBase **p_cull_result, int p_c
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerSceneHighEndRD::_render_sdfgi(RID p_render_buffers, const Vector3i &p_from, const Vector3i &p_size, const AABB &p_bounds, InstanceBase **p_cull_result, int p_cull_count, const RID &p_albedo_texture, const RID &p_emission_texture, const RID &p_emission_aniso_texture, const RID &p_geom_facing_texture) {
|
void RendererSceneRenderForward::_render_sdfgi(RID p_render_buffers, const Vector3i &p_from, const Vector3i &p_size, const AABB &p_bounds, InstanceBase **p_cull_result, int p_cull_count, const RID &p_albedo_texture, const RID &p_emission_texture, const RID &p_emission_aniso_texture, const RID &p_geom_facing_texture) {
|
||||||
RENDER_TIMESTAMP("Render SDFGI");
|
RENDER_TIMESTAMP("Render SDFGI");
|
||||||
|
|
||||||
_update_render_base_uniform_set();
|
_update_render_base_uniform_set();
|
||||||
@ -2276,7 +2276,7 @@ void RasterizerSceneHighEndRD::_render_sdfgi(RID p_render_buffers, const Vector3
|
|||||||
to_bounds.origin = p_bounds.position;
|
to_bounds.origin = p_bounds.position;
|
||||||
to_bounds.basis.scale(p_bounds.size);
|
to_bounds.basis.scale(p_bounds.size);
|
||||||
|
|
||||||
RasterizerStorageRD::store_transform(to_bounds.affine_inverse() * cam_xform, scene_state.ubo.sdf_to_bounds);
|
RendererStorageRD::store_transform(to_bounds.affine_inverse() * cam_xform, scene_state.ubo.sdf_to_bounds);
|
||||||
|
|
||||||
_setup_environment(RID(), RID(), camera_proj, cam_xform, RID(), true, Vector2(1, 1), RID(), false, Color(), 0, 0);
|
_setup_environment(RID(), RID(), camera_proj, cam_xform, RID(), true, Vector2(1, 1), RID(), false, Color(), 0, 0);
|
||||||
|
|
||||||
@ -2292,14 +2292,14 @@ void RasterizerSceneHighEndRD::_render_sdfgi(RID p_render_buffers, const Vector3
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerSceneHighEndRD::_base_uniforms_changed() {
|
void RendererSceneRenderForward::_base_uniforms_changed() {
|
||||||
if (!render_base_uniform_set.is_null() && RD::get_singleton()->uniform_set_is_valid(render_base_uniform_set)) {
|
if (!render_base_uniform_set.is_null() && RD::get_singleton()->uniform_set_is_valid(render_base_uniform_set)) {
|
||||||
RD::get_singleton()->free(render_base_uniform_set);
|
RD::get_singleton()->free(render_base_uniform_set);
|
||||||
}
|
}
|
||||||
render_base_uniform_set = RID();
|
render_base_uniform_set = RID();
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerSceneHighEndRD::_update_render_base_uniform_set() {
|
void RendererSceneRenderForward::_update_render_base_uniform_set() {
|
||||||
if (render_base_uniform_set.is_null() || !RD::get_singleton()->uniform_set_is_valid(render_base_uniform_set) || (lightmap_texture_array_version != storage->lightmap_array_get_version())) {
|
if (render_base_uniform_set.is_null() || !RD::get_singleton()->uniform_set_is_valid(render_base_uniform_set) || (lightmap_texture_array_version != storage->lightmap_array_get_version())) {
|
||||||
if (render_base_uniform_set.is_valid() && RD::get_singleton()->uniform_set_is_valid(render_base_uniform_set)) {
|
if (render_base_uniform_set.is_valid() && RD::get_singleton()->uniform_set_is_valid(render_base_uniform_set)) {
|
||||||
RD::get_singleton()->free(render_base_uniform_set);
|
RD::get_singleton()->free(render_base_uniform_set);
|
||||||
@ -2442,7 +2442,7 @@ void RasterizerSceneHighEndRD::_update_render_base_uniform_set() {
|
|||||||
if (directional_shadow_get_texture().is_valid()) {
|
if (directional_shadow_get_texture().is_valid()) {
|
||||||
u.ids.push_back(directional_shadow_get_texture());
|
u.ids.push_back(directional_shadow_get_texture());
|
||||||
} else {
|
} else {
|
||||||
u.ids.push_back(storage->texture_rd_get_default(RasterizerStorageRD::DEFAULT_RD_TEXTURE_WHITE));
|
u.ids.push_back(storage->texture_rd_get_default(RendererStorageRD::DEFAULT_RD_TEXTURE_WHITE));
|
||||||
}
|
}
|
||||||
uniforms.push_back(u);
|
uniforms.push_back(u);
|
||||||
}
|
}
|
||||||
@ -2467,7 +2467,7 @@ void RasterizerSceneHighEndRD::_update_render_base_uniform_set() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerSceneHighEndRD::_setup_view_dependant_uniform_set(RID p_shadow_atlas, RID p_reflection_atlas, RID *p_gi_probe_cull_result, int p_gi_probe_cull_count) {
|
void RendererSceneRenderForward::_setup_view_dependant_uniform_set(RID p_shadow_atlas, RID p_reflection_atlas, RID *p_gi_probe_cull_result, int p_gi_probe_cull_count) {
|
||||||
if (view_dependant_uniform_set.is_valid() && RD::get_singleton()->uniform_set_is_valid(view_dependant_uniform_set)) {
|
if (view_dependant_uniform_set.is_valid() && RD::get_singleton()->uniform_set_is_valid(view_dependant_uniform_set)) {
|
||||||
RD::get_singleton()->free(view_dependant_uniform_set);
|
RD::get_singleton()->free(view_dependant_uniform_set);
|
||||||
}
|
}
|
||||||
@ -2484,7 +2484,7 @@ void RasterizerSceneHighEndRD::_setup_view_dependant_uniform_set(RID p_shadow_at
|
|||||||
if (ref_texture.is_valid()) {
|
if (ref_texture.is_valid()) {
|
||||||
u.ids.push_back(ref_texture);
|
u.ids.push_back(ref_texture);
|
||||||
} else {
|
} else {
|
||||||
u.ids.push_back(storage->texture_rd_get_default(RasterizerStorageRD::DEFAULT_RD_TEXTURE_CUBEMAP_ARRAY_BLACK));
|
u.ids.push_back(storage->texture_rd_get_default(RendererStorageRD::DEFAULT_RD_TEXTURE_CUBEMAP_ARRAY_BLACK));
|
||||||
}
|
}
|
||||||
uniforms.push_back(u);
|
uniforms.push_back(u);
|
||||||
}
|
}
|
||||||
@ -2498,7 +2498,7 @@ void RasterizerSceneHighEndRD::_setup_view_dependant_uniform_set(RID p_shadow_at
|
|||||||
texture = shadow_atlas_get_texture(p_shadow_atlas);
|
texture = shadow_atlas_get_texture(p_shadow_atlas);
|
||||||
}
|
}
|
||||||
if (!texture.is_valid()) {
|
if (!texture.is_valid()) {
|
||||||
texture = storage->texture_rd_get_default(RasterizerStorageRD::DEFAULT_RD_TEXTURE_WHITE);
|
texture = storage->texture_rd_get_default(RendererStorageRD::DEFAULT_RD_TEXTURE_WHITE);
|
||||||
}
|
}
|
||||||
u.ids.push_back(texture);
|
u.ids.push_back(texture);
|
||||||
uniforms.push_back(u);
|
uniforms.push_back(u);
|
||||||
@ -2508,7 +2508,7 @@ void RasterizerSceneHighEndRD::_setup_view_dependant_uniform_set(RID p_shadow_at
|
|||||||
RD::Uniform u;
|
RD::Uniform u;
|
||||||
u.binding = 2;
|
u.binding = 2;
|
||||||
u.type = RD::UNIFORM_TYPE_TEXTURE;
|
u.type = RD::UNIFORM_TYPE_TEXTURE;
|
||||||
RID default_tex = storage->texture_rd_get_default(RasterizerStorageRD::DEFAULT_RD_TEXTURE_3D_WHITE);
|
RID default_tex = storage->texture_rd_get_default(RendererStorageRD::DEFAULT_RD_TEXTURE_3D_WHITE);
|
||||||
for (int i = 0; i < MAX_GI_PROBES; i++) {
|
for (int i = 0; i < MAX_GI_PROBES; i++) {
|
||||||
if (i < p_gi_probe_cull_count) {
|
if (i < p_gi_probe_cull_count) {
|
||||||
RID tex = gi_probe_instance_get_texture(p_gi_probe_cull_result[i]);
|
RID tex = gi_probe_instance_get_texture(p_gi_probe_cull_result[i]);
|
||||||
@ -2526,38 +2526,38 @@ void RasterizerSceneHighEndRD::_setup_view_dependant_uniform_set(RID p_shadow_at
|
|||||||
view_dependant_uniform_set = RD::get_singleton()->uniform_set_create(uniforms, default_shader_rd, VIEW_DEPENDANT_UNIFORM_SET);
|
view_dependant_uniform_set = RD::get_singleton()->uniform_set_create(uniforms, default_shader_rd, VIEW_DEPENDANT_UNIFORM_SET);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerSceneHighEndRD::_render_buffers_clear_uniform_set(RenderBufferDataHighEnd *rb) {
|
void RendererSceneRenderForward::_render_buffers_clear_uniform_set(RenderBufferDataHighEnd *rb) {
|
||||||
if (!rb->uniform_set.is_null() && RD::get_singleton()->uniform_set_is_valid(rb->uniform_set)) {
|
if (!rb->uniform_set.is_null() && RD::get_singleton()->uniform_set_is_valid(rb->uniform_set)) {
|
||||||
RD::get_singleton()->free(rb->uniform_set);
|
RD::get_singleton()->free(rb->uniform_set);
|
||||||
}
|
}
|
||||||
rb->uniform_set = RID();
|
rb->uniform_set = RID();
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerSceneHighEndRD::_render_buffers_uniform_set_changed(RID p_render_buffers) {
|
void RendererSceneRenderForward::_render_buffers_uniform_set_changed(RID p_render_buffers) {
|
||||||
RenderBufferDataHighEnd *rb = (RenderBufferDataHighEnd *)render_buffers_get_data(p_render_buffers);
|
RenderBufferDataHighEnd *rb = (RenderBufferDataHighEnd *)render_buffers_get_data(p_render_buffers);
|
||||||
|
|
||||||
_render_buffers_clear_uniform_set(rb);
|
_render_buffers_clear_uniform_set(rb);
|
||||||
}
|
}
|
||||||
|
|
||||||
RID RasterizerSceneHighEndRD::_render_buffers_get_normal_texture(RID p_render_buffers) {
|
RID RendererSceneRenderForward::_render_buffers_get_normal_texture(RID p_render_buffers) {
|
||||||
RenderBufferDataHighEnd *rb = (RenderBufferDataHighEnd *)render_buffers_get_data(p_render_buffers);
|
RenderBufferDataHighEnd *rb = (RenderBufferDataHighEnd *)render_buffers_get_data(p_render_buffers);
|
||||||
|
|
||||||
return rb->normal_roughness_buffer;
|
return rb->normal_roughness_buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
RID RasterizerSceneHighEndRD::_render_buffers_get_ambient_texture(RID p_render_buffers) {
|
RID RendererSceneRenderForward::_render_buffers_get_ambient_texture(RID p_render_buffers) {
|
||||||
RenderBufferDataHighEnd *rb = (RenderBufferDataHighEnd *)render_buffers_get_data(p_render_buffers);
|
RenderBufferDataHighEnd *rb = (RenderBufferDataHighEnd *)render_buffers_get_data(p_render_buffers);
|
||||||
|
|
||||||
return rb->ambient_buffer;
|
return rb->ambient_buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
RID RasterizerSceneHighEndRD::_render_buffers_get_reflection_texture(RID p_render_buffers) {
|
RID RendererSceneRenderForward::_render_buffers_get_reflection_texture(RID p_render_buffers) {
|
||||||
RenderBufferDataHighEnd *rb = (RenderBufferDataHighEnd *)render_buffers_get_data(p_render_buffers);
|
RenderBufferDataHighEnd *rb = (RenderBufferDataHighEnd *)render_buffers_get_data(p_render_buffers);
|
||||||
|
|
||||||
return rb->reflection_buffer;
|
return rb->reflection_buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerSceneHighEndRD::_update_render_buffers_uniform_set(RID p_render_buffers) {
|
void RendererSceneRenderForward::_update_render_buffers_uniform_set(RID p_render_buffers) {
|
||||||
RenderBufferDataHighEnd *rb = (RenderBufferDataHighEnd *)render_buffers_get_data(p_render_buffers);
|
RenderBufferDataHighEnd *rb = (RenderBufferDataHighEnd *)render_buffers_get_data(p_render_buffers);
|
||||||
|
|
||||||
if (rb->uniform_set.is_null() || !RD::get_singleton()->uniform_set_is_valid(rb->uniform_set)) {
|
if (rb->uniform_set.is_null() || !RD::get_singleton()->uniform_set_is_valid(rb->uniform_set)) {
|
||||||
@ -2566,7 +2566,7 @@ void RasterizerSceneHighEndRD::_update_render_buffers_uniform_set(RID p_render_b
|
|||||||
RD::Uniform u;
|
RD::Uniform u;
|
||||||
u.binding = 0;
|
u.binding = 0;
|
||||||
u.type = RD::UNIFORM_TYPE_TEXTURE;
|
u.type = RD::UNIFORM_TYPE_TEXTURE;
|
||||||
RID texture = false && rb->depth.is_valid() ? rb->depth : storage->texture_rd_get_default(RasterizerStorageRD::DEFAULT_RD_TEXTURE_WHITE);
|
RID texture = false && rb->depth.is_valid() ? rb->depth : storage->texture_rd_get_default(RendererStorageRD::DEFAULT_RD_TEXTURE_WHITE);
|
||||||
u.ids.push_back(texture);
|
u.ids.push_back(texture);
|
||||||
uniforms.push_back(u);
|
uniforms.push_back(u);
|
||||||
}
|
}
|
||||||
@ -2575,7 +2575,7 @@ void RasterizerSceneHighEndRD::_update_render_buffers_uniform_set(RID p_render_b
|
|||||||
u.binding = 1;
|
u.binding = 1;
|
||||||
u.type = RD::UNIFORM_TYPE_TEXTURE;
|
u.type = RD::UNIFORM_TYPE_TEXTURE;
|
||||||
RID bbt = render_buffers_get_back_buffer_texture(p_render_buffers);
|
RID bbt = render_buffers_get_back_buffer_texture(p_render_buffers);
|
||||||
RID texture = bbt.is_valid() ? bbt : storage->texture_rd_get_default(RasterizerStorageRD::DEFAULT_RD_TEXTURE_BLACK);
|
RID texture = bbt.is_valid() ? bbt : storage->texture_rd_get_default(RendererStorageRD::DEFAULT_RD_TEXTURE_BLACK);
|
||||||
u.ids.push_back(texture);
|
u.ids.push_back(texture);
|
||||||
uniforms.push_back(u);
|
uniforms.push_back(u);
|
||||||
}
|
}
|
||||||
@ -2583,7 +2583,7 @@ void RasterizerSceneHighEndRD::_update_render_buffers_uniform_set(RID p_render_b
|
|||||||
RD::Uniform u;
|
RD::Uniform u;
|
||||||
u.binding = 2;
|
u.binding = 2;
|
||||||
u.type = RD::UNIFORM_TYPE_TEXTURE;
|
u.type = RD::UNIFORM_TYPE_TEXTURE;
|
||||||
RID texture = rb->normal_roughness_buffer.is_valid() ? rb->normal_roughness_buffer : storage->texture_rd_get_default(RasterizerStorageRD::DEFAULT_RD_TEXTURE_NORMAL);
|
RID texture = rb->normal_roughness_buffer.is_valid() ? rb->normal_roughness_buffer : storage->texture_rd_get_default(RendererStorageRD::DEFAULT_RD_TEXTURE_NORMAL);
|
||||||
u.ids.push_back(texture);
|
u.ids.push_back(texture);
|
||||||
uniforms.push_back(u);
|
uniforms.push_back(u);
|
||||||
}
|
}
|
||||||
@ -2593,7 +2593,7 @@ void RasterizerSceneHighEndRD::_update_render_buffers_uniform_set(RID p_render_b
|
|||||||
u.binding = 4;
|
u.binding = 4;
|
||||||
u.type = RD::UNIFORM_TYPE_TEXTURE;
|
u.type = RD::UNIFORM_TYPE_TEXTURE;
|
||||||
RID aot = render_buffers_get_ao_texture(p_render_buffers);
|
RID aot = render_buffers_get_ao_texture(p_render_buffers);
|
||||||
RID texture = aot.is_valid() ? aot : storage->texture_rd_get_default(RasterizerStorageRD::DEFAULT_RD_TEXTURE_BLACK);
|
RID texture = aot.is_valid() ? aot : storage->texture_rd_get_default(RendererStorageRD::DEFAULT_RD_TEXTURE_BLACK);
|
||||||
u.ids.push_back(texture);
|
u.ids.push_back(texture);
|
||||||
uniforms.push_back(u);
|
uniforms.push_back(u);
|
||||||
}
|
}
|
||||||
@ -2602,7 +2602,7 @@ void RasterizerSceneHighEndRD::_update_render_buffers_uniform_set(RID p_render_b
|
|||||||
RD::Uniform u;
|
RD::Uniform u;
|
||||||
u.binding = 5;
|
u.binding = 5;
|
||||||
u.type = RD::UNIFORM_TYPE_TEXTURE;
|
u.type = RD::UNIFORM_TYPE_TEXTURE;
|
||||||
RID texture = rb->ambient_buffer.is_valid() ? rb->ambient_buffer : storage->texture_rd_get_default(RasterizerStorageRD::DEFAULT_RD_TEXTURE_BLACK);
|
RID texture = rb->ambient_buffer.is_valid() ? rb->ambient_buffer : storage->texture_rd_get_default(RendererStorageRD::DEFAULT_RD_TEXTURE_BLACK);
|
||||||
u.ids.push_back(texture);
|
u.ids.push_back(texture);
|
||||||
uniforms.push_back(u);
|
uniforms.push_back(u);
|
||||||
}
|
}
|
||||||
@ -2611,7 +2611,7 @@ void RasterizerSceneHighEndRD::_update_render_buffers_uniform_set(RID p_render_b
|
|||||||
RD::Uniform u;
|
RD::Uniform u;
|
||||||
u.binding = 6;
|
u.binding = 6;
|
||||||
u.type = RD::UNIFORM_TYPE_TEXTURE;
|
u.type = RD::UNIFORM_TYPE_TEXTURE;
|
||||||
RID texture = rb->reflection_buffer.is_valid() ? rb->reflection_buffer : storage->texture_rd_get_default(RasterizerStorageRD::DEFAULT_RD_TEXTURE_BLACK);
|
RID texture = rb->reflection_buffer.is_valid() ? rb->reflection_buffer : storage->texture_rd_get_default(RendererStorageRD::DEFAULT_RD_TEXTURE_BLACK);
|
||||||
u.ids.push_back(texture);
|
u.ids.push_back(texture);
|
||||||
uniforms.push_back(u);
|
uniforms.push_back(u);
|
||||||
}
|
}
|
||||||
@ -2623,7 +2623,7 @@ void RasterizerSceneHighEndRD::_update_render_buffers_uniform_set(RID p_render_b
|
|||||||
if (render_buffers_is_sdfgi_enabled(p_render_buffers)) {
|
if (render_buffers_is_sdfgi_enabled(p_render_buffers)) {
|
||||||
t = render_buffers_get_sdfgi_irradiance_probes(p_render_buffers);
|
t = render_buffers_get_sdfgi_irradiance_probes(p_render_buffers);
|
||||||
} else {
|
} else {
|
||||||
t = storage->texture_rd_get_default(RasterizerStorageRD::DEFAULT_RD_TEXTURE_2D_ARRAY_WHITE);
|
t = storage->texture_rd_get_default(RendererStorageRD::DEFAULT_RD_TEXTURE_2D_ARRAY_WHITE);
|
||||||
}
|
}
|
||||||
u.ids.push_back(t);
|
u.ids.push_back(t);
|
||||||
uniforms.push_back(u);
|
uniforms.push_back(u);
|
||||||
@ -2635,7 +2635,7 @@ void RasterizerSceneHighEndRD::_update_render_buffers_uniform_set(RID p_render_b
|
|||||||
if (render_buffers_is_sdfgi_enabled(p_render_buffers)) {
|
if (render_buffers_is_sdfgi_enabled(p_render_buffers)) {
|
||||||
u.ids.push_back(render_buffers_get_sdfgi_occlusion_texture(p_render_buffers));
|
u.ids.push_back(render_buffers_get_sdfgi_occlusion_texture(p_render_buffers));
|
||||||
} else {
|
} else {
|
||||||
u.ids.push_back(storage->texture_rd_get_default(RasterizerStorageRD::DEFAULT_RD_TEXTURE_3D_WHITE));
|
u.ids.push_back(storage->texture_rd_get_default(RendererStorageRD::DEFAULT_RD_TEXTURE_3D_WHITE));
|
||||||
}
|
}
|
||||||
uniforms.push_back(u);
|
uniforms.push_back(u);
|
||||||
}
|
}
|
||||||
@ -2654,10 +2654,10 @@ void RasterizerSceneHighEndRD::_update_render_buffers_uniform_set(RID p_render_b
|
|||||||
if (p_render_buffers.is_valid() && render_buffers_has_volumetric_fog(p_render_buffers)) {
|
if (p_render_buffers.is_valid() && render_buffers_has_volumetric_fog(p_render_buffers)) {
|
||||||
vfog = render_buffers_get_volumetric_fog_texture(p_render_buffers);
|
vfog = render_buffers_get_volumetric_fog_texture(p_render_buffers);
|
||||||
if (vfog.is_null()) {
|
if (vfog.is_null()) {
|
||||||
vfog = storage->texture_rd_get_default(RasterizerStorageRD::DEFAULT_RD_TEXTURE_3D_WHITE);
|
vfog = storage->texture_rd_get_default(RendererStorageRD::DEFAULT_RD_TEXTURE_3D_WHITE);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
vfog = storage->texture_rd_get_default(RasterizerStorageRD::DEFAULT_RD_TEXTURE_3D_WHITE);
|
vfog = storage->texture_rd_get_default(RendererStorageRD::DEFAULT_RD_TEXTURE_3D_WHITE);
|
||||||
}
|
}
|
||||||
u.ids.push_back(vfog);
|
u.ids.push_back(vfog);
|
||||||
uniforms.push_back(u);
|
uniforms.push_back(u);
|
||||||
@ -2666,15 +2666,15 @@ void RasterizerSceneHighEndRD::_update_render_buffers_uniform_set(RID p_render_b
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
RasterizerSceneHighEndRD *RasterizerSceneHighEndRD::singleton = nullptr;
|
RendererSceneRenderForward *RendererSceneRenderForward::singleton = nullptr;
|
||||||
|
|
||||||
void RasterizerSceneHighEndRD::set_time(double p_time, double p_step) {
|
void RendererSceneRenderForward::set_time(double p_time, double p_step) {
|
||||||
time = p_time;
|
time = p_time;
|
||||||
RasterizerSceneRD::set_time(p_time, p_step);
|
RendererSceneRenderRD::set_time(p_time, p_step);
|
||||||
}
|
}
|
||||||
|
|
||||||
RasterizerSceneHighEndRD::RasterizerSceneHighEndRD(RasterizerStorageRD *p_storage) :
|
RendererSceneRenderForward::RendererSceneRenderForward(RendererStorageRD *p_storage) :
|
||||||
RasterizerSceneRD(p_storage) {
|
RendererSceneRenderRD(p_storage) {
|
||||||
singleton = this;
|
singleton = this;
|
||||||
storage = p_storage;
|
storage = p_storage;
|
||||||
|
|
||||||
@ -2723,8 +2723,8 @@ RasterizerSceneHighEndRD::RasterizerSceneHighEndRD(RasterizerStorageRD *p_storag
|
|||||||
shader.scene_shader.initialize(shader_versions, defines);
|
shader.scene_shader.initialize(shader_versions, defines);
|
||||||
}
|
}
|
||||||
|
|
||||||
storage->shader_set_data_request_function(RasterizerStorageRD::SHADER_TYPE_3D, _create_shader_funcs);
|
storage->shader_set_data_request_function(RendererStorageRD::SHADER_TYPE_3D, _create_shader_funcs);
|
||||||
storage->material_set_data_request_function(RasterizerStorageRD::SHADER_TYPE_3D, _create_material_funcs);
|
storage->material_set_data_request_function(RendererStorageRD::SHADER_TYPE_3D, _create_material_funcs);
|
||||||
|
|
||||||
{
|
{
|
||||||
//shader compiler
|
//shader compiler
|
||||||
@ -2922,7 +2922,7 @@ RasterizerSceneHighEndRD::RasterizerSceneHighEndRD(RasterizerStorageRD *p_storag
|
|||||||
default_material = storage->material_create();
|
default_material = storage->material_create();
|
||||||
storage->material_set_shader(default_material, default_shader);
|
storage->material_set_shader(default_material, default_shader);
|
||||||
|
|
||||||
MaterialData *md = (MaterialData *)storage->material_get_data(default_material, RasterizerStorageRD::SHADER_TYPE_3D);
|
MaterialData *md = (MaterialData *)storage->material_get_data(default_material, RendererStorageRD::SHADER_TYPE_3D);
|
||||||
default_shader_rd = shader.scene_shader.version_get_shader(md->shader_data->version, SHADER_VERSION_COLOR_PASS);
|
default_shader_rd = shader.scene_shader.version_get_shader(md->shader_data->version, SHADER_VERSION_COLOR_PASS);
|
||||||
default_shader_sdfgi_rd = shader.scene_shader.version_get_shader(md->shader_data->version, SHADER_VERSION_DEPTH_PASS_WITH_SDF);
|
default_shader_sdfgi_rd = shader.scene_shader.version_get_shader(md->shader_data->version, SHADER_VERSION_DEPTH_PASS_WITH_SDF);
|
||||||
}
|
}
|
||||||
@ -2965,7 +2965,7 @@ RasterizerSceneHighEndRD::RasterizerSceneHighEndRD(RasterizerStorageRD *p_storag
|
|||||||
RD::Uniform u;
|
RD::Uniform u;
|
||||||
u.binding = 0;
|
u.binding = 0;
|
||||||
u.type = RD::UNIFORM_TYPE_TEXTURE;
|
u.type = RD::UNIFORM_TYPE_TEXTURE;
|
||||||
RID texture = storage->texture_rd_get_default(is_using_radiance_cubemap_array() ? RasterizerStorageRD::DEFAULT_RD_TEXTURE_CUBEMAP_ARRAY_BLACK : RasterizerStorageRD::DEFAULT_RD_TEXTURE_CUBEMAP_BLACK);
|
RID texture = storage->texture_rd_get_default(is_using_radiance_cubemap_array() ? RendererStorageRD::DEFAULT_RD_TEXTURE_CUBEMAP_ARRAY_BLACK : RendererStorageRD::DEFAULT_RD_TEXTURE_CUBEMAP_BLACK);
|
||||||
u.ids.push_back(texture);
|
u.ids.push_back(texture);
|
||||||
uniforms.push_back(u);
|
uniforms.push_back(u);
|
||||||
|
|
||||||
@ -2978,7 +2978,7 @@ RasterizerSceneHighEndRD::RasterizerSceneHighEndRD(RasterizerStorageRD *p_storag
|
|||||||
RD::Uniform u;
|
RD::Uniform u;
|
||||||
u.binding = i;
|
u.binding = i;
|
||||||
u.type = RD::UNIFORM_TYPE_TEXTURE;
|
u.type = RD::UNIFORM_TYPE_TEXTURE;
|
||||||
RID texture = storage->texture_rd_get_default(i == 0 ? RasterizerStorageRD::DEFAULT_RD_TEXTURE_WHITE : (i == 2 ? RasterizerStorageRD::DEFAULT_RD_TEXTURE_NORMAL : RasterizerStorageRD::DEFAULT_RD_TEXTURE_BLACK));
|
RID texture = storage->texture_rd_get_default(i == 0 ? RendererStorageRD::DEFAULT_RD_TEXTURE_WHITE : (i == 2 ? RendererStorageRD::DEFAULT_RD_TEXTURE_NORMAL : RendererStorageRD::DEFAULT_RD_TEXTURE_BLACK));
|
||||||
u.ids.push_back(texture);
|
u.ids.push_back(texture);
|
||||||
uniforms.push_back(u);
|
uniforms.push_back(u);
|
||||||
}
|
}
|
||||||
@ -2986,7 +2986,7 @@ RasterizerSceneHighEndRD::RasterizerSceneHighEndRD(RasterizerStorageRD *p_storag
|
|||||||
RD::Uniform u;
|
RD::Uniform u;
|
||||||
u.binding = 7;
|
u.binding = 7;
|
||||||
u.type = RD::UNIFORM_TYPE_TEXTURE;
|
u.type = RD::UNIFORM_TYPE_TEXTURE;
|
||||||
RID texture = storage->texture_rd_get_default(RasterizerStorageRD::DEFAULT_RD_TEXTURE_2D_ARRAY_WHITE);
|
RID texture = storage->texture_rd_get_default(RendererStorageRD::DEFAULT_RD_TEXTURE_2D_ARRAY_WHITE);
|
||||||
u.ids.push_back(texture);
|
u.ids.push_back(texture);
|
||||||
uniforms.push_back(u);
|
uniforms.push_back(u);
|
||||||
}
|
}
|
||||||
@ -2994,7 +2994,7 @@ RasterizerSceneHighEndRD::RasterizerSceneHighEndRD(RasterizerStorageRD *p_storag
|
|||||||
RD::Uniform u;
|
RD::Uniform u;
|
||||||
u.binding = 8;
|
u.binding = 8;
|
||||||
u.type = RD::UNIFORM_TYPE_TEXTURE;
|
u.type = RD::UNIFORM_TYPE_TEXTURE;
|
||||||
u.ids.push_back(storage->texture_rd_get_default(RasterizerStorageRD::DEFAULT_RD_TEXTURE_3D_WHITE));
|
u.ids.push_back(storage->texture_rd_get_default(RendererStorageRD::DEFAULT_RD_TEXTURE_3D_WHITE));
|
||||||
uniforms.push_back(u);
|
uniforms.push_back(u);
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
@ -3008,7 +3008,7 @@ RasterizerSceneHighEndRD::RasterizerSceneHighEndRD(RasterizerStorageRD *p_storag
|
|||||||
RD::Uniform u;
|
RD::Uniform u;
|
||||||
u.binding = 10;
|
u.binding = 10;
|
||||||
u.type = RD::UNIFORM_TYPE_TEXTURE;
|
u.type = RD::UNIFORM_TYPE_TEXTURE;
|
||||||
u.ids.push_back(storage->texture_rd_get_default(RasterizerStorageRD::DEFAULT_RD_TEXTURE_3D_WHITE));
|
u.ids.push_back(storage->texture_rd_get_default(RendererStorageRD::DEFAULT_RD_TEXTURE_3D_WHITE));
|
||||||
uniforms.push_back(u);
|
uniforms.push_back(u);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3016,7 +3016,7 @@ RasterizerSceneHighEndRD::RasterizerSceneHighEndRD(RasterizerStorageRD *p_storag
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
RasterizerSceneHighEndRD::~RasterizerSceneHighEndRD() {
|
RendererSceneRenderForward::~RendererSceneRenderForward() {
|
||||||
directional_shadow_atlas_set_size(0);
|
directional_shadow_atlas_set_size(0);
|
||||||
|
|
||||||
//clear base uniform set if still valid
|
//clear base uniform set if still valid
|
@ -1,5 +1,5 @@
|
|||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
/* rasterizer_scene_high_end_rd.h */
|
/* renderer_scene_render_forward.h */
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
/* This file is part of: */
|
/* This file is part of: */
|
||||||
/* GODOT ENGINE */
|
/* GODOT ENGINE */
|
||||||
@ -28,15 +28,15 @@
|
|||||||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
|
|
||||||
#ifndef RASTERIZER_SCENE_HIGHEND_RD_H
|
#ifndef RENDERING_SERVER_SCENE_RENDER_FORWARD_H
|
||||||
#define RASTERIZER_SCENE_HIGHEND_RD_H
|
#define RENDERING_SERVER_SCENE_RENDER_FORWARD_H
|
||||||
|
|
||||||
#include "servers/rendering/rasterizer_rd/rasterizer_scene_rd.h"
|
#include "servers/rendering/renderer_rd/pipeline_cache_rd.h"
|
||||||
#include "servers/rendering/rasterizer_rd/rasterizer_storage_rd.h"
|
#include "servers/rendering/renderer_rd/renderer_scene_render_rd.h"
|
||||||
#include "servers/rendering/rasterizer_rd/render_pipeline_vertex_format_cache_rd.h"
|
#include "servers/rendering/renderer_rd/renderer_storage_rd.h"
|
||||||
#include "servers/rendering/rasterizer_rd/shaders/scene_high_end.glsl.gen.h"
|
#include "servers/rendering/renderer_rd/shaders/scene_high_end.glsl.gen.h"
|
||||||
|
|
||||||
class RasterizerSceneHighEndRD : public RasterizerSceneRD {
|
class RendererSceneRenderForward : public RendererSceneRenderRD {
|
||||||
enum {
|
enum {
|
||||||
SCENE_UNIFORM_SET = 0,
|
SCENE_UNIFORM_SET = 0,
|
||||||
RADIANCE_UNIFORM_SET = 1,
|
RADIANCE_UNIFORM_SET = 1,
|
||||||
@ -73,11 +73,11 @@ class RasterizerSceneHighEndRD : public RasterizerSceneRD {
|
|||||||
ShaderCompilerRD compiler;
|
ShaderCompilerRD compiler;
|
||||||
} shader;
|
} shader;
|
||||||
|
|
||||||
RasterizerStorageRD *storage;
|
RendererStorageRD *storage;
|
||||||
|
|
||||||
/* Material */
|
/* Material */
|
||||||
|
|
||||||
struct ShaderData : public RasterizerStorageRD::ShaderData {
|
struct ShaderData : public RendererStorageRD::ShaderData {
|
||||||
enum BlendMode { //used internally
|
enum BlendMode { //used internally
|
||||||
BLEND_MODE_MIX,
|
BLEND_MODE_MIX,
|
||||||
BLEND_MODE_ADD,
|
BLEND_MODE_ADD,
|
||||||
@ -120,7 +120,7 @@ class RasterizerSceneHighEndRD : public RasterizerSceneRD {
|
|||||||
bool valid;
|
bool valid;
|
||||||
RID version;
|
RID version;
|
||||||
uint32_t vertex_input_mask;
|
uint32_t vertex_input_mask;
|
||||||
RenderPipelineVertexFormatCacheRD pipelines[CULL_VARIANT_MAX][RS::PRIMITIVE_MAX][SHADER_VERSION_MAX];
|
PipelineCacheRD pipelines[CULL_VARIANT_MAX][RS::PRIMITIVE_MAX][SHADER_VERSION_MAX];
|
||||||
|
|
||||||
String path;
|
String path;
|
||||||
|
|
||||||
@ -162,7 +162,7 @@ class RasterizerSceneHighEndRD : public RasterizerSceneRD {
|
|||||||
virtual void set_code(const String &p_Code);
|
virtual void set_code(const String &p_Code);
|
||||||
virtual void set_default_texture_param(const StringName &p_name, RID p_texture);
|
virtual void set_default_texture_param(const StringName &p_name, RID p_texture);
|
||||||
virtual void get_param_list(List<PropertyInfo> *p_param_list) const;
|
virtual void get_param_list(List<PropertyInfo> *p_param_list) const;
|
||||||
void get_instance_param_list(List<RasterizerStorage::InstanceShaderParam> *p_param_list) const;
|
void get_instance_param_list(List<RendererStorage::InstanceShaderParam> *p_param_list) const;
|
||||||
|
|
||||||
virtual bool is_param_texture(const StringName &p_param) const;
|
virtual bool is_param_texture(const StringName &p_param) const;
|
||||||
virtual bool is_animated() const;
|
virtual bool is_animated() const;
|
||||||
@ -172,12 +172,12 @@ class RasterizerSceneHighEndRD : public RasterizerSceneRD {
|
|||||||
virtual ~ShaderData();
|
virtual ~ShaderData();
|
||||||
};
|
};
|
||||||
|
|
||||||
RasterizerStorageRD::ShaderData *_create_shader_func();
|
RendererStorageRD::ShaderData *_create_shader_func();
|
||||||
static RasterizerStorageRD::ShaderData *_create_shader_funcs() {
|
static RendererStorageRD::ShaderData *_create_shader_funcs() {
|
||||||
return static_cast<RasterizerSceneHighEndRD *>(singleton)->_create_shader_func();
|
return static_cast<RendererSceneRenderForward *>(singleton)->_create_shader_func();
|
||||||
}
|
}
|
||||||
|
|
||||||
struct MaterialData : public RasterizerStorageRD::MaterialData {
|
struct MaterialData : public RendererStorageRD::MaterialData {
|
||||||
uint64_t last_frame;
|
uint64_t last_frame;
|
||||||
ShaderData *shader_data;
|
ShaderData *shader_data;
|
||||||
RID uniform_buffer;
|
RID uniform_buffer;
|
||||||
@ -194,9 +194,9 @@ class RasterizerSceneHighEndRD : public RasterizerSceneRD {
|
|||||||
virtual ~MaterialData();
|
virtual ~MaterialData();
|
||||||
};
|
};
|
||||||
|
|
||||||
RasterizerStorageRD::MaterialData *_create_material_func(ShaderData *p_shader);
|
RendererStorageRD::MaterialData *_create_material_func(ShaderData *p_shader);
|
||||||
static RasterizerStorageRD::MaterialData *_create_material_funcs(RasterizerStorageRD::ShaderData *p_shader) {
|
static RendererStorageRD::MaterialData *_create_material_funcs(RendererStorageRD::ShaderData *p_shader) {
|
||||||
return static_cast<RasterizerSceneHighEndRD *>(singleton)->_create_material_func(static_cast<ShaderData *>(p_shader));
|
return static_cast<RendererSceneRenderForward *>(singleton)->_create_material_func(static_cast<ShaderData *>(p_shader));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Push Constant */
|
/* Push Constant */
|
||||||
@ -415,7 +415,7 @@ class RasterizerSceneHighEndRD : public RasterizerSceneRD {
|
|||||||
int max_elements;
|
int max_elements;
|
||||||
|
|
||||||
struct Element {
|
struct Element {
|
||||||
RasterizerScene::InstanceBase *instance;
|
RendererSceneRender::InstanceBase *instance;
|
||||||
MaterialData *material;
|
MaterialData *material;
|
||||||
union {
|
union {
|
||||||
struct {
|
struct {
|
||||||
@ -541,7 +541,7 @@ class RasterizerSceneHighEndRD : public RasterizerSceneRD {
|
|||||||
|
|
||||||
RenderList render_list;
|
RenderList render_list;
|
||||||
|
|
||||||
static RasterizerSceneHighEndRD *singleton;
|
static RendererSceneRenderForward *singleton;
|
||||||
uint64_t render_pass;
|
uint64_t render_pass;
|
||||||
double time;
|
double time;
|
||||||
RID default_shader;
|
RID default_shader;
|
||||||
@ -596,7 +596,7 @@ public:
|
|||||||
|
|
||||||
virtual bool free(RID p_rid);
|
virtual bool free(RID p_rid);
|
||||||
|
|
||||||
RasterizerSceneHighEndRD(RasterizerStorageRD *p_storage);
|
RendererSceneRenderForward(RendererStorageRD *p_storage);
|
||||||
~RasterizerSceneHighEndRD();
|
~RendererSceneRenderForward();
|
||||||
};
|
};
|
||||||
#endif // RASTERIZER_SCENE_HIGHEND_RD_H
|
#endif // RASTERIZER_SCENE_HIGHEND_RD_H
|
File diff suppressed because it is too large
Load Diff
@ -1,5 +1,5 @@
|
|||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
/* rasterizer_scene_rd.h */
|
/* renderer_scene_render_rd.h */
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
/* This file is part of: */
|
/* This file is part of: */
|
||||||
/* GODOT ENGINE */
|
/* GODOT ENGINE */
|
||||||
@ -28,27 +28,28 @@
|
|||||||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
|
|
||||||
#ifndef RASTERIZER_SCENE_RD_H
|
#ifndef RENDERING_SERVER_SCENE_RENDER_RD_H
|
||||||
#define RASTERIZER_SCENE_RD_H
|
#define RENDERING_SERVER_SCENE_RENDER_RD_H
|
||||||
|
|
||||||
#include "core/templates/local_vector.h"
|
#include "core/templates/local_vector.h"
|
||||||
#include "core/templates/rid_owner.h"
|
#include "core/templates/rid_owner.h"
|
||||||
#include "servers/rendering/rasterizer.h"
|
#include "servers/rendering/renderer_compositor.h"
|
||||||
#include "servers/rendering/rasterizer_rd/light_cluster_builder.h"
|
#include "servers/rendering/renderer_rd/light_cluster_builder.h"
|
||||||
#include "servers/rendering/rasterizer_rd/rasterizer_storage_rd.h"
|
#include "servers/rendering/renderer_rd/renderer_storage_rd.h"
|
||||||
#include "servers/rendering/rasterizer_rd/shaders/gi.glsl.gen.h"
|
#include "servers/rendering/renderer_rd/shaders/gi.glsl.gen.h"
|
||||||
#include "servers/rendering/rasterizer_rd/shaders/giprobe.glsl.gen.h"
|
#include "servers/rendering/renderer_rd/shaders/giprobe.glsl.gen.h"
|
||||||
#include "servers/rendering/rasterizer_rd/shaders/giprobe_debug.glsl.gen.h"
|
#include "servers/rendering/renderer_rd/shaders/giprobe_debug.glsl.gen.h"
|
||||||
#include "servers/rendering/rasterizer_rd/shaders/sdfgi_debug.glsl.gen.h"
|
#include "servers/rendering/renderer_rd/shaders/sdfgi_debug.glsl.gen.h"
|
||||||
#include "servers/rendering/rasterizer_rd/shaders/sdfgi_debug_probes.glsl.gen.h"
|
#include "servers/rendering/renderer_rd/shaders/sdfgi_debug_probes.glsl.gen.h"
|
||||||
#include "servers/rendering/rasterizer_rd/shaders/sdfgi_direct_light.glsl.gen.h"
|
#include "servers/rendering/renderer_rd/shaders/sdfgi_direct_light.glsl.gen.h"
|
||||||
#include "servers/rendering/rasterizer_rd/shaders/sdfgi_integrate.glsl.gen.h"
|
#include "servers/rendering/renderer_rd/shaders/sdfgi_integrate.glsl.gen.h"
|
||||||
#include "servers/rendering/rasterizer_rd/shaders/sdfgi_preprocess.glsl.gen.h"
|
#include "servers/rendering/renderer_rd/shaders/sdfgi_preprocess.glsl.gen.h"
|
||||||
#include "servers/rendering/rasterizer_rd/shaders/sky.glsl.gen.h"
|
#include "servers/rendering/renderer_rd/shaders/sky.glsl.gen.h"
|
||||||
#include "servers/rendering/rasterizer_rd/shaders/volumetric_fog.glsl.gen.h"
|
#include "servers/rendering/renderer_rd/shaders/volumetric_fog.glsl.gen.h"
|
||||||
|
#include "servers/rendering/renderer_scene_render.h"
|
||||||
#include "servers/rendering/rendering_device.h"
|
#include "servers/rendering/rendering_device.h"
|
||||||
|
|
||||||
class RasterizerSceneRD : public RasterizerScene {
|
class RendererSceneRenderRD : public RendererSceneRender {
|
||||||
protected:
|
protected:
|
||||||
double time;
|
double time;
|
||||||
|
|
||||||
@ -138,11 +139,11 @@ protected:
|
|||||||
private:
|
private:
|
||||||
RS::ViewportDebugDraw debug_draw = RS::VIEWPORT_DEBUG_DRAW_DISABLED;
|
RS::ViewportDebugDraw debug_draw = RS::VIEWPORT_DEBUG_DRAW_DISABLED;
|
||||||
double time_step = 0;
|
double time_step = 0;
|
||||||
static RasterizerSceneRD *singleton;
|
static RendererSceneRenderRD *singleton;
|
||||||
|
|
||||||
int roughness_layers;
|
int roughness_layers;
|
||||||
|
|
||||||
RasterizerStorageRD *storage;
|
RendererStorageRD *storage;
|
||||||
|
|
||||||
struct ReflectionData {
|
struct ReflectionData {
|
||||||
struct Layer {
|
struct Layer {
|
||||||
@ -200,11 +201,11 @@ private:
|
|||||||
RID default_shader_rd;
|
RID default_shader_rd;
|
||||||
} sky_shader;
|
} sky_shader;
|
||||||
|
|
||||||
struct SkyShaderData : public RasterizerStorageRD::ShaderData {
|
struct SkyShaderData : public RendererStorageRD::ShaderData {
|
||||||
bool valid;
|
bool valid;
|
||||||
RID version;
|
RID version;
|
||||||
|
|
||||||
RenderPipelineVertexFormatCacheRD pipelines[SKY_VERSION_MAX];
|
PipelineCacheRD pipelines[SKY_VERSION_MAX];
|
||||||
Map<StringName, ShaderLanguage::ShaderNode::Uniform> uniforms;
|
Map<StringName, ShaderLanguage::ShaderNode::Uniform> uniforms;
|
||||||
Vector<ShaderCompilerRD::GeneratedCode::Texture> texture_uniforms;
|
Vector<ShaderCompilerRD::GeneratedCode::Texture> texture_uniforms;
|
||||||
|
|
||||||
@ -224,7 +225,7 @@ private:
|
|||||||
virtual void set_code(const String &p_Code);
|
virtual void set_code(const String &p_Code);
|
||||||
virtual void set_default_texture_param(const StringName &p_name, RID p_texture);
|
virtual void set_default_texture_param(const StringName &p_name, RID p_texture);
|
||||||
virtual void get_param_list(List<PropertyInfo> *p_param_list) const;
|
virtual void get_param_list(List<PropertyInfo> *p_param_list) const;
|
||||||
virtual void get_instance_param_list(List<RasterizerStorage::InstanceShaderParam> *p_param_list) const;
|
virtual void get_instance_param_list(List<RendererStorage::InstanceShaderParam> *p_param_list) const;
|
||||||
virtual bool is_param_texture(const StringName &p_param) const;
|
virtual bool is_param_texture(const StringName &p_param) const;
|
||||||
virtual bool is_animated() const;
|
virtual bool is_animated() const;
|
||||||
virtual bool casts_shadows() const;
|
virtual bool casts_shadows() const;
|
||||||
@ -233,12 +234,12 @@ private:
|
|||||||
virtual ~SkyShaderData();
|
virtual ~SkyShaderData();
|
||||||
};
|
};
|
||||||
|
|
||||||
RasterizerStorageRD::ShaderData *_create_sky_shader_func();
|
RendererStorageRD::ShaderData *_create_sky_shader_func();
|
||||||
static RasterizerStorageRD::ShaderData *_create_sky_shader_funcs() {
|
static RendererStorageRD::ShaderData *_create_sky_shader_funcs() {
|
||||||
return static_cast<RasterizerSceneRD *>(singleton)->_create_sky_shader_func();
|
return static_cast<RendererSceneRenderRD *>(singleton)->_create_sky_shader_func();
|
||||||
};
|
};
|
||||||
|
|
||||||
struct SkyMaterialData : public RasterizerStorageRD::MaterialData {
|
struct SkyMaterialData : public RendererStorageRD::MaterialData {
|
||||||
uint64_t last_frame;
|
uint64_t last_frame;
|
||||||
SkyShaderData *shader_data;
|
SkyShaderData *shader_data;
|
||||||
RID uniform_buffer;
|
RID uniform_buffer;
|
||||||
@ -253,9 +254,9 @@ private:
|
|||||||
virtual ~SkyMaterialData();
|
virtual ~SkyMaterialData();
|
||||||
};
|
};
|
||||||
|
|
||||||
RasterizerStorageRD::MaterialData *_create_sky_material_func(SkyShaderData *p_shader);
|
RendererStorageRD::MaterialData *_create_sky_material_func(SkyShaderData *p_shader);
|
||||||
static RasterizerStorageRD::MaterialData *_create_sky_material_funcs(RasterizerStorageRD::ShaderData *p_shader) {
|
static RendererStorageRD::MaterialData *_create_sky_material_funcs(RendererStorageRD::ShaderData *p_shader) {
|
||||||
return static_cast<RasterizerSceneRD *>(singleton)->_create_sky_material_func(static_cast<SkyShaderData *>(p_shader));
|
return static_cast<RendererSceneRenderRD *>(singleton)->_create_sky_material_func(static_cast<SkyShaderData *>(p_shader));
|
||||||
};
|
};
|
||||||
|
|
||||||
enum SkyTextureSetVersion {
|
enum SkyTextureSetVersion {
|
||||||
@ -512,7 +513,7 @@ private:
|
|||||||
GiprobeDebugShaderRD giprobe_debug_shader;
|
GiprobeDebugShaderRD giprobe_debug_shader;
|
||||||
RID giprobe_debug_shader_version;
|
RID giprobe_debug_shader_version;
|
||||||
RID giprobe_debug_shader_version_shaders[GI_PROBE_DEBUG_MAX];
|
RID giprobe_debug_shader_version_shaders[GI_PROBE_DEBUG_MAX];
|
||||||
RenderPipelineVertexFormatCacheRD giprobe_debug_shader_version_pipelines[GI_PROBE_DEBUG_MAX];
|
PipelineCacheRD giprobe_debug_shader_version_pipelines[GI_PROBE_DEBUG_MAX];
|
||||||
RID giprobe_debug_uniform_set;
|
RID giprobe_debug_uniform_set;
|
||||||
|
|
||||||
/* SHADOW ATLAS */
|
/* SHADOW ATLAS */
|
||||||
@ -1077,7 +1078,7 @@ private:
|
|||||||
RID debug_probes_shader;
|
RID debug_probes_shader;
|
||||||
RID debug_probes_shader_version;
|
RID debug_probes_shader_version;
|
||||||
|
|
||||||
RenderPipelineVertexFormatCacheRD debug_probes_pipeline[PROBE_DEBUG_MAX];
|
PipelineCacheRD debug_probes_pipeline[PROBE_DEBUG_MAX];
|
||||||
|
|
||||||
struct Light {
|
struct Light {
|
||||||
float color[3];
|
float color[3];
|
||||||
@ -1951,8 +1952,8 @@ public:
|
|||||||
|
|
||||||
void sdfgi_set_debug_probe_select(const Vector3 &p_position, const Vector3 &p_dir);
|
void sdfgi_set_debug_probe_select(const Vector3 &p_position, const Vector3 &p_dir);
|
||||||
|
|
||||||
RasterizerSceneRD(RasterizerStorageRD *p_storage);
|
RendererSceneRenderRD(RendererStorageRD *p_storage);
|
||||||
~RasterizerSceneRD();
|
~RendererSceneRenderRD();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // RASTERIZER_SCENE_RD_H
|
#endif // RASTERIZER_SCENE_RD_H
|
File diff suppressed because it is too large
Load Diff
@ -1,5 +1,5 @@
|
|||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
/* rasterizer_storage_rd.h */
|
/* renderer_storage_rd.h */
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
/* This file is part of: */
|
/* This file is part of: */
|
||||||
/* GODOT ENGINE */
|
/* GODOT ENGINE */
|
||||||
@ -28,20 +28,21 @@
|
|||||||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
|
|
||||||
#ifndef RASTERIZER_STORAGE_RD_H
|
#ifndef RENDERING_SERVER_STORAGE_RD_H
|
||||||
#define RASTERIZER_STORAGE_RD_H
|
#define RENDERING_SERVER_STORAGE_RD_H
|
||||||
|
|
||||||
#include "core/templates/rid_owner.h"
|
#include "core/templates/rid_owner.h"
|
||||||
#include "servers/rendering/rasterizer.h"
|
#include "servers/rendering/renderer_compositor.h"
|
||||||
#include "servers/rendering/rasterizer_rd/rasterizer_effects_rd.h"
|
#include "servers/rendering/renderer_rd/effects_rd.h"
|
||||||
#include "servers/rendering/rasterizer_rd/shader_compiler_rd.h"
|
#include "servers/rendering/renderer_rd/shader_compiler_rd.h"
|
||||||
#include "servers/rendering/rasterizer_rd/shaders/canvas_sdf.glsl.gen.h"
|
#include "servers/rendering/renderer_rd/shaders/canvas_sdf.glsl.gen.h"
|
||||||
#include "servers/rendering/rasterizer_rd/shaders/giprobe_sdf.glsl.gen.h"
|
#include "servers/rendering/renderer_rd/shaders/giprobe_sdf.glsl.gen.h"
|
||||||
#include "servers/rendering/rasterizer_rd/shaders/particles.glsl.gen.h"
|
#include "servers/rendering/renderer_rd/shaders/particles.glsl.gen.h"
|
||||||
#include "servers/rendering/rasterizer_rd/shaders/particles_copy.glsl.gen.h"
|
#include "servers/rendering/renderer_rd/shaders/particles_copy.glsl.gen.h"
|
||||||
|
#include "servers/rendering/renderer_scene_render.h"
|
||||||
#include "servers/rendering/rendering_device.h"
|
#include "servers/rendering/rendering_device.h"
|
||||||
|
|
||||||
class RasterizerStorageRD : public RasterizerStorage {
|
class RendererStorageRD : public RendererStorage {
|
||||||
public:
|
public:
|
||||||
static _FORCE_INLINE_ void store_transform(const Transform &p_mtx, float *p_array) {
|
static _FORCE_INLINE_ void store_transform(const Transform &p_mtx, float *p_array) {
|
||||||
p_array[0] = p_mtx.basis.elements[0][0];
|
p_array[0] = p_mtx.basis.elements[0][0];
|
||||||
@ -139,7 +140,7 @@ public:
|
|||||||
virtual ~MaterialData();
|
virtual ~MaterialData();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
friend class RasterizerStorageRD;
|
friend class RendererStorageRD;
|
||||||
RID self;
|
RID self;
|
||||||
List<RID>::Element *global_buffer_E = nullptr;
|
List<RID>::Element *global_buffer_E = nullptr;
|
||||||
List<RID>::Element *global_texture_E = nullptr;
|
List<RID>::Element *global_texture_E = nullptr;
|
||||||
@ -364,7 +365,7 @@ private:
|
|||||||
Map<StringName, Variant> params;
|
Map<StringName, Variant> params;
|
||||||
int32_t priority;
|
int32_t priority;
|
||||||
RID next_pass;
|
RID next_pass;
|
||||||
RasterizerScene::InstanceDependency instance_dependency;
|
RendererStorage::InstanceDependency instance_dependency;
|
||||||
};
|
};
|
||||||
|
|
||||||
MaterialDataRequestFunction material_data_request_func[SHADER_TYPE_MAX];
|
MaterialDataRequestFunction material_data_request_func[SHADER_TYPE_MAX];
|
||||||
@ -447,7 +448,7 @@ private:
|
|||||||
|
|
||||||
Vector<RID> material_cache;
|
Vector<RID> material_cache;
|
||||||
|
|
||||||
RasterizerScene::InstanceDependency instance_dependency;
|
RendererStorage::InstanceDependency instance_dependency;
|
||||||
};
|
};
|
||||||
|
|
||||||
mutable RID_Owner<Mesh> mesh_owner;
|
mutable RID_Owner<Mesh> mesh_owner;
|
||||||
@ -481,7 +482,7 @@ private:
|
|||||||
bool dirty = false;
|
bool dirty = false;
|
||||||
MultiMesh *dirty_list = nullptr;
|
MultiMesh *dirty_list = nullptr;
|
||||||
|
|
||||||
RasterizerScene::InstanceDependency instance_dependency;
|
RendererStorage::InstanceDependency instance_dependency;
|
||||||
};
|
};
|
||||||
|
|
||||||
mutable RID_Owner<MultiMesh> multimesh_owner;
|
mutable RID_Owner<MultiMesh> multimesh_owner;
|
||||||
@ -652,7 +653,7 @@ private:
|
|||||||
ParticleEmissionBuffer *emission_buffer = nullptr;
|
ParticleEmissionBuffer *emission_buffer = nullptr;
|
||||||
RID emission_storage_buffer;
|
RID emission_storage_buffer;
|
||||||
|
|
||||||
Set<RasterizerScene::InstanceBase *> collisions;
|
Set<RendererSceneRender::InstanceBase *> collisions;
|
||||||
|
|
||||||
Particles() :
|
Particles() :
|
||||||
inactive(true),
|
inactive(true),
|
||||||
@ -679,7 +680,7 @@ private:
|
|||||||
clear(true) {
|
clear(true) {
|
||||||
}
|
}
|
||||||
|
|
||||||
RasterizerScene::InstanceDependency instance_dependency;
|
RendererStorage::InstanceDependency instance_dependency;
|
||||||
|
|
||||||
ParticlesFrameParams frame_params;
|
ParticlesFrameParams frame_params;
|
||||||
};
|
};
|
||||||
@ -734,7 +735,7 @@ private:
|
|||||||
bool valid;
|
bool valid;
|
||||||
RID version;
|
RID version;
|
||||||
|
|
||||||
//RenderPipelineVertexFormatCacheRD pipelines[SKY_VERSION_MAX];
|
//PipelineCacheRD pipelines[SKY_VERSION_MAX];
|
||||||
Map<StringName, ShaderLanguage::ShaderNode::Uniform> uniforms;
|
Map<StringName, ShaderLanguage::ShaderNode::Uniform> uniforms;
|
||||||
Vector<ShaderCompilerRD::GeneratedCode::Texture> texture_uniforms;
|
Vector<ShaderCompilerRD::GeneratedCode::Texture> texture_uniforms;
|
||||||
|
|
||||||
@ -752,7 +753,7 @@ private:
|
|||||||
virtual void set_code(const String &p_Code);
|
virtual void set_code(const String &p_Code);
|
||||||
virtual void set_default_texture_param(const StringName &p_name, RID p_texture);
|
virtual void set_default_texture_param(const StringName &p_name, RID p_texture);
|
||||||
virtual void get_param_list(List<PropertyInfo> *p_param_list) const;
|
virtual void get_param_list(List<PropertyInfo> *p_param_list) const;
|
||||||
virtual void get_instance_param_list(List<RasterizerStorage::InstanceShaderParam> *p_param_list) const;
|
virtual void get_instance_param_list(List<RendererStorage::InstanceShaderParam> *p_param_list) const;
|
||||||
virtual bool is_param_texture(const StringName &p_param) const;
|
virtual bool is_param_texture(const StringName &p_param) const;
|
||||||
virtual bool is_animated() const;
|
virtual bool is_animated() const;
|
||||||
virtual bool casts_shadows() const;
|
virtual bool casts_shadows() const;
|
||||||
@ -762,7 +763,7 @@ private:
|
|||||||
};
|
};
|
||||||
|
|
||||||
ShaderData *_create_particles_shader_func();
|
ShaderData *_create_particles_shader_func();
|
||||||
static RasterizerStorageRD::ShaderData *_create_particles_shader_funcs() {
|
static RendererStorageRD::ShaderData *_create_particles_shader_funcs() {
|
||||||
return base_singleton->_create_particles_shader_func();
|
return base_singleton->_create_particles_shader_func();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -782,7 +783,7 @@ private:
|
|||||||
};
|
};
|
||||||
|
|
||||||
MaterialData *_create_particles_material_func(ParticlesShaderData *p_shader);
|
MaterialData *_create_particles_material_func(ParticlesShaderData *p_shader);
|
||||||
static RasterizerStorageRD::MaterialData *_create_particles_material_funcs(ShaderData *p_shader) {
|
static RendererStorageRD::MaterialData *_create_particles_material_funcs(ShaderData *p_shader) {
|
||||||
return base_singleton->_create_particles_material_func(static_cast<ParticlesShaderData *>(p_shader));
|
return base_singleton->_create_particles_material_func(static_cast<ParticlesShaderData *>(p_shader));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -807,7 +808,7 @@ private:
|
|||||||
|
|
||||||
RS::ParticlesCollisionHeightfieldResolution heightfield_resolution = RS::PARTICLES_COLLISION_HEIGHTFIELD_RESOLUTION_1024;
|
RS::ParticlesCollisionHeightfieldResolution heightfield_resolution = RS::PARTICLES_COLLISION_HEIGHTFIELD_RESOLUTION_1024;
|
||||||
|
|
||||||
RasterizerScene::InstanceDependency instance_dependency;
|
RendererStorage::InstanceDependency instance_dependency;
|
||||||
};
|
};
|
||||||
|
|
||||||
mutable RID_Owner<ParticlesCollision> particles_collision_owner;
|
mutable RID_Owner<ParticlesCollision> particles_collision_owner;
|
||||||
@ -826,7 +827,7 @@ private:
|
|||||||
|
|
||||||
RID uniform_set_3d;
|
RID uniform_set_3d;
|
||||||
|
|
||||||
RasterizerScene::InstanceDependency instance_dependency;
|
RendererStorage::InstanceDependency instance_dependency;
|
||||||
};
|
};
|
||||||
|
|
||||||
mutable RID_Owner<Skeleton> skeleton_owner;
|
mutable RID_Owner<Skeleton> skeleton_owner;
|
||||||
@ -858,7 +859,7 @@ private:
|
|||||||
bool directional_sky_only = false;
|
bool directional_sky_only = false;
|
||||||
uint64_t version = 0;
|
uint64_t version = 0;
|
||||||
|
|
||||||
RasterizerScene::InstanceDependency instance_dependency;
|
RendererStorage::InstanceDependency instance_dependency;
|
||||||
};
|
};
|
||||||
|
|
||||||
mutable RID_Owner<Light> light_owner;
|
mutable RID_Owner<Light> light_owner;
|
||||||
@ -880,7 +881,7 @@ private:
|
|||||||
bool enable_shadows = false;
|
bool enable_shadows = false;
|
||||||
uint32_t cull_mask = (1 << 20) - 1;
|
uint32_t cull_mask = (1 << 20) - 1;
|
||||||
|
|
||||||
RasterizerScene::InstanceDependency instance_dependency;
|
RendererStorage::InstanceDependency instance_dependency;
|
||||||
};
|
};
|
||||||
|
|
||||||
mutable RID_Owner<ReflectionProbe> reflection_probe_owner;
|
mutable RID_Owner<ReflectionProbe> reflection_probe_owner;
|
||||||
@ -901,7 +902,7 @@ private:
|
|||||||
float distance_fade_length = 1;
|
float distance_fade_length = 1;
|
||||||
float normal_fade = 0.0;
|
float normal_fade = 0.0;
|
||||||
|
|
||||||
RasterizerScene::InstanceDependency instance_dependency;
|
RendererStorage::InstanceDependency instance_dependency;
|
||||||
};
|
};
|
||||||
|
|
||||||
mutable RID_Owner<Decal> decal_owner;
|
mutable RID_Owner<Decal> decal_owner;
|
||||||
@ -939,7 +940,7 @@ private:
|
|||||||
uint32_t version = 1;
|
uint32_t version = 1;
|
||||||
uint32_t data_version = 1;
|
uint32_t data_version = 1;
|
||||||
|
|
||||||
RasterizerScene::InstanceDependency instance_dependency;
|
RendererStorage::InstanceDependency instance_dependency;
|
||||||
};
|
};
|
||||||
|
|
||||||
GiprobeSdfShaderRD giprobe_sdf_shader;
|
GiprobeSdfShaderRD giprobe_sdf_shader;
|
||||||
@ -968,7 +969,7 @@ private:
|
|||||||
int32_t over = EMPTY_LEAF, under = EMPTY_LEAF;
|
int32_t over = EMPTY_LEAF, under = EMPTY_LEAF;
|
||||||
};
|
};
|
||||||
|
|
||||||
RasterizerScene::InstanceDependency instance_dependency;
|
RendererStorage::InstanceDependency instance_dependency;
|
||||||
};
|
};
|
||||||
|
|
||||||
bool using_lightmap_array; //high end uses this
|
bool using_lightmap_array; //high end uses this
|
||||||
@ -1129,7 +1130,7 @@ private:
|
|||||||
void _update_global_variables();
|
void _update_global_variables();
|
||||||
/* EFFECTS */
|
/* EFFECTS */
|
||||||
|
|
||||||
RasterizerEffectsRD effects;
|
EffectsRD effects;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
/* TEXTURE API */
|
/* TEXTURE API */
|
||||||
@ -1261,7 +1262,7 @@ public:
|
|||||||
|
|
||||||
void material_get_instance_shader_parameters(RID p_material, List<InstanceShaderParam> *r_parameters);
|
void material_get_instance_shader_parameters(RID p_material, List<InstanceShaderParam> *r_parameters);
|
||||||
|
|
||||||
void material_update_dependency(RID p_material, RasterizerScene::InstanceBase *p_instance);
|
void material_update_dependency(RID p_material, InstanceBaseDependency *p_instance);
|
||||||
void material_force_update_textures(RID p_material, ShaderType p_shader_type);
|
void material_force_update_textures(RID p_material, ShaderType p_shader_type);
|
||||||
|
|
||||||
void material_set_data_request_function(ShaderType p_shader_type, MaterialDataRequestFunction p_function);
|
void material_set_data_request_function(ShaderType p_shader_type, MaterialDataRequestFunction p_function);
|
||||||
@ -1660,8 +1661,8 @@ public:
|
|||||||
Color reflection_probe_get_ambient_color(RID p_probe) const;
|
Color reflection_probe_get_ambient_color(RID p_probe) const;
|
||||||
float reflection_probe_get_ambient_color_energy(RID p_probe) const;
|
float reflection_probe_get_ambient_color_energy(RID p_probe) const;
|
||||||
|
|
||||||
void base_update_dependency(RID p_base, RasterizerScene::InstanceBase *p_instance);
|
void base_update_dependency(RID p_base, InstanceBaseDependency *p_instance);
|
||||||
void skeleton_update_dependency(RID p_skeleton, RasterizerScene::InstanceBase *p_instance);
|
void skeleton_update_dependency(RID p_skeleton, InstanceBaseDependency *p_instance);
|
||||||
|
|
||||||
/* DECAL API */
|
/* DECAL API */
|
||||||
|
|
||||||
@ -1911,8 +1912,8 @@ public:
|
|||||||
return particles->particles_transforms_buffer_uniform_set;
|
return particles->particles_transforms_buffer_uniform_set;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void particles_add_collision(RID p_particles, RasterizerScene::InstanceBase *p_instance);
|
virtual void particles_add_collision(RID p_particles, InstanceBaseDependency *p_instance);
|
||||||
virtual void particles_remove_collision(RID p_particles, RasterizerScene::InstanceBase *p_instance);
|
virtual void particles_remove_collision(RID p_particles, InstanceBaseDependency *p_instance);
|
||||||
|
|
||||||
/* PARTICLES COLLISION */
|
/* PARTICLES COLLISION */
|
||||||
|
|
||||||
@ -2021,12 +2022,12 @@ public:
|
|||||||
|
|
||||||
RID get_default_rd_storage_buffer() { return default_rd_storage_buffer; }
|
RID get_default_rd_storage_buffer() { return default_rd_storage_buffer; }
|
||||||
|
|
||||||
static RasterizerStorageRD *base_singleton;
|
static RendererStorageRD *base_singleton;
|
||||||
|
|
||||||
RasterizerEffectsRD *get_effects();
|
EffectsRD *get_effects();
|
||||||
|
|
||||||
RasterizerStorageRD();
|
RendererStorageRD();
|
||||||
~RasterizerStorageRD();
|
~RendererStorageRD();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // RASTERIZER_STORAGE_RD_H
|
#endif // RASTERIZER_STORAGE_RD_H
|
@ -32,7 +32,7 @@
|
|||||||
|
|
||||||
#include "core/config/project_settings.h"
|
#include "core/config/project_settings.h"
|
||||||
#include "core/os/os.h"
|
#include "core/os/os.h"
|
||||||
#include "rasterizer_storage_rd.h"
|
#include "renderer_storage_rd.h"
|
||||||
#include "servers/rendering_server.h"
|
#include "servers/rendering_server.h"
|
||||||
|
|
||||||
#define SL ShaderLanguage
|
#define SL ShaderLanguage
|
||||||
@ -1238,7 +1238,7 @@ String ShaderCompilerRD::_dump_node_code(const SL::Node *p_node, int p_level, Ge
|
|||||||
}
|
}
|
||||||
|
|
||||||
ShaderLanguage::DataType ShaderCompilerRD::_get_variable_type(const StringName &p_type) {
|
ShaderLanguage::DataType ShaderCompilerRD::_get_variable_type(const StringName &p_type) {
|
||||||
RS::GlobalVariableType gvt = ((RasterizerStorageRD *)(RasterizerStorage::base_singleton))->global_variable_get_type_internal(p_type);
|
RS::GlobalVariableType gvt = ((RendererStorageRD *)(RendererStorage::base_singleton))->global_variable_get_type_internal(p_type);
|
||||||
return RS::global_variable_type_get_shader_datatype(gvt);
|
return RS::global_variable_type_get_shader_datatype(gvt);
|
||||||
}
|
}
|
||||||
|
|
@ -31,7 +31,7 @@
|
|||||||
#include "shader_rd.h"
|
#include "shader_rd.h"
|
||||||
|
|
||||||
#include "core/string/string_builder.h"
|
#include "core/string/string_builder.h"
|
||||||
#include "rasterizer_rd.h"
|
#include "renderer_compositor_rd.h"
|
||||||
#include "servers/rendering/rendering_device.h"
|
#include "servers/rendering/rendering_device.h"
|
||||||
|
|
||||||
void ShaderRD::setup(const char *p_vertex_code, const char *p_fragment_code, const char *p_compute_code, const char *p_name) {
|
void ShaderRD::setup(const char *p_vertex_code, const char *p_fragment_code, const char *p_compute_code, const char *p_name) {
|
||||||
@ -356,7 +356,7 @@ void ShaderRD::_compile_version(Version *p_version) {
|
|||||||
p_version->variants = memnew_arr(RID, variant_defines.size());
|
p_version->variants = memnew_arr(RID, variant_defines.size());
|
||||||
#if 1
|
#if 1
|
||||||
|
|
||||||
RasterizerRD::thread_work_pool.do_work(variant_defines.size(), this, &ShaderRD::_compile_variant, p_version);
|
RendererCompositorRD::thread_work_pool.do_work(variant_defines.size(), this, &ShaderRD::_compile_variant, p_version);
|
||||||
#else
|
#else
|
||||||
for (int i = 0; i < variant_defines.size(); i++) {
|
for (int i = 0; i < variant_defines.size(); i++) {
|
||||||
_compile_variant(i, p_version);
|
_compile_variant(i, p_version);
|
@ -1,5 +1,5 @@
|
|||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
/* rendering_server_scene.cpp */
|
/* renderer_scene.cpp */
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
/* This file is part of: */
|
/* This file is part of: */
|
||||||
/* GODOT ENGINE */
|
/* GODOT ENGINE */
|
||||||
@ -28,10 +28,10 @@
|
|||||||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
|
|
||||||
#include "rendering_server_scene.h"
|
#include "renderer_scene.h"
|
||||||
|
|
||||||
RenderingServerScene::RenderingServerScene() {
|
RendererScene::RendererScene() {
|
||||||
}
|
}
|
||||||
|
|
||||||
RenderingServerScene::~RenderingServerScene() {
|
RendererScene::~RendererScene() {
|
||||||
}
|
}
|
@ -1,5 +1,5 @@
|
|||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
/* rendering_server_scene.h */
|
/* renderer_scene.h */
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
/* This file is part of: */
|
/* This file is part of: */
|
||||||
/* GODOT ENGINE */
|
/* GODOT ENGINE */
|
||||||
@ -31,10 +31,10 @@
|
|||||||
#ifndef RENDERINGSERVERSCENE_H
|
#ifndef RENDERINGSERVERSCENE_H
|
||||||
#define RENDERINGSERVERSCENE_H
|
#define RENDERINGSERVERSCENE_H
|
||||||
|
|
||||||
#include "servers/rendering/rasterizer.h"
|
#include "servers/rendering/renderer_compositor.h"
|
||||||
#include "servers/xr/xr_interface.h"
|
#include "servers/xr/xr_interface.h"
|
||||||
|
|
||||||
class RenderingServerScene {
|
class RendererScene {
|
||||||
public:
|
public:
|
||||||
virtual RID camera_create() = 0;
|
virtual RID camera_create() = 0;
|
||||||
|
|
||||||
@ -195,8 +195,8 @@ public:
|
|||||||
|
|
||||||
virtual bool free(RID p_rid) = 0;
|
virtual bool free(RID p_rid) = 0;
|
||||||
|
|
||||||
RenderingServerScene();
|
RendererScene();
|
||||||
virtual ~RenderingServerScene();
|
virtual ~RendererScene();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // RENDERINGSERVERSCENE_H
|
#endif // RENDERINGSERVERSCENE_H
|
@ -1,5 +1,5 @@
|
|||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
/* rendering_server_scene_raster.cpp */
|
/* renderer_scene_cull.cpp */
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
/* This file is part of: */
|
/* This file is part of: */
|
||||||
/* GODOT ENGINE */
|
/* GODOT ENGINE */
|
||||||
@ -28,7 +28,7 @@
|
|||||||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
|
|
||||||
#include "rendering_server_scene_raster.h"
|
#include "renderer_scene_cull.h"
|
||||||
|
|
||||||
#include "core/os/os.h"
|
#include "core/os/os.h"
|
||||||
#include "rendering_server_default.h"
|
#include "rendering_server_default.h"
|
||||||
@ -38,12 +38,12 @@
|
|||||||
|
|
||||||
/* CAMERA API */
|
/* CAMERA API */
|
||||||
|
|
||||||
RID RenderingServerSceneRaster::camera_create() {
|
RID RendererSceneCull::camera_create() {
|
||||||
Camera *camera = memnew(Camera);
|
Camera *camera = memnew(Camera);
|
||||||
return camera_owner.make_rid(camera);
|
return camera_owner.make_rid(camera);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerSceneRaster::camera_set_perspective(RID p_camera, float p_fovy_degrees, float p_z_near, float p_z_far) {
|
void RendererSceneCull::camera_set_perspective(RID p_camera, float p_fovy_degrees, float p_z_near, float p_z_far) {
|
||||||
Camera *camera = camera_owner.getornull(p_camera);
|
Camera *camera = camera_owner.getornull(p_camera);
|
||||||
ERR_FAIL_COND(!camera);
|
ERR_FAIL_COND(!camera);
|
||||||
camera->type = Camera::PERSPECTIVE;
|
camera->type = Camera::PERSPECTIVE;
|
||||||
@ -52,7 +52,7 @@ void RenderingServerSceneRaster::camera_set_perspective(RID p_camera, float p_fo
|
|||||||
camera->zfar = p_z_far;
|
camera->zfar = p_z_far;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerSceneRaster::camera_set_orthogonal(RID p_camera, float p_size, float p_z_near, float p_z_far) {
|
void RendererSceneCull::camera_set_orthogonal(RID p_camera, float p_size, float p_z_near, float p_z_far) {
|
||||||
Camera *camera = camera_owner.getornull(p_camera);
|
Camera *camera = camera_owner.getornull(p_camera);
|
||||||
ERR_FAIL_COND(!camera);
|
ERR_FAIL_COND(!camera);
|
||||||
camera->type = Camera::ORTHOGONAL;
|
camera->type = Camera::ORTHOGONAL;
|
||||||
@ -61,7 +61,7 @@ void RenderingServerSceneRaster::camera_set_orthogonal(RID p_camera, float p_siz
|
|||||||
camera->zfar = p_z_far;
|
camera->zfar = p_z_far;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerSceneRaster::camera_set_frustum(RID p_camera, float p_size, Vector2 p_offset, float p_z_near, float p_z_far) {
|
void RendererSceneCull::camera_set_frustum(RID p_camera, float p_size, Vector2 p_offset, float p_z_near, float p_z_far) {
|
||||||
Camera *camera = camera_owner.getornull(p_camera);
|
Camera *camera = camera_owner.getornull(p_camera);
|
||||||
ERR_FAIL_COND(!camera);
|
ERR_FAIL_COND(!camera);
|
||||||
camera->type = Camera::FRUSTUM;
|
camera->type = Camera::FRUSTUM;
|
||||||
@ -71,45 +71,45 @@ void RenderingServerSceneRaster::camera_set_frustum(RID p_camera, float p_size,
|
|||||||
camera->zfar = p_z_far;
|
camera->zfar = p_z_far;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerSceneRaster::camera_set_transform(RID p_camera, const Transform &p_transform) {
|
void RendererSceneCull::camera_set_transform(RID p_camera, const Transform &p_transform) {
|
||||||
Camera *camera = camera_owner.getornull(p_camera);
|
Camera *camera = camera_owner.getornull(p_camera);
|
||||||
ERR_FAIL_COND(!camera);
|
ERR_FAIL_COND(!camera);
|
||||||
camera->transform = p_transform.orthonormalized();
|
camera->transform = p_transform.orthonormalized();
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerSceneRaster::camera_set_cull_mask(RID p_camera, uint32_t p_layers) {
|
void RendererSceneCull::camera_set_cull_mask(RID p_camera, uint32_t p_layers) {
|
||||||
Camera *camera = camera_owner.getornull(p_camera);
|
Camera *camera = camera_owner.getornull(p_camera);
|
||||||
ERR_FAIL_COND(!camera);
|
ERR_FAIL_COND(!camera);
|
||||||
|
|
||||||
camera->visible_layers = p_layers;
|
camera->visible_layers = p_layers;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerSceneRaster::camera_set_environment(RID p_camera, RID p_env) {
|
void RendererSceneCull::camera_set_environment(RID p_camera, RID p_env) {
|
||||||
Camera *camera = camera_owner.getornull(p_camera);
|
Camera *camera = camera_owner.getornull(p_camera);
|
||||||
ERR_FAIL_COND(!camera);
|
ERR_FAIL_COND(!camera);
|
||||||
camera->env = p_env;
|
camera->env = p_env;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerSceneRaster::camera_set_camera_effects(RID p_camera, RID p_fx) {
|
void RendererSceneCull::camera_set_camera_effects(RID p_camera, RID p_fx) {
|
||||||
Camera *camera = camera_owner.getornull(p_camera);
|
Camera *camera = camera_owner.getornull(p_camera);
|
||||||
ERR_FAIL_COND(!camera);
|
ERR_FAIL_COND(!camera);
|
||||||
camera->effects = p_fx;
|
camera->effects = p_fx;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerSceneRaster::camera_set_use_vertical_aspect(RID p_camera, bool p_enable) {
|
void RendererSceneCull::camera_set_use_vertical_aspect(RID p_camera, bool p_enable) {
|
||||||
Camera *camera = camera_owner.getornull(p_camera);
|
Camera *camera = camera_owner.getornull(p_camera);
|
||||||
ERR_FAIL_COND(!camera);
|
ERR_FAIL_COND(!camera);
|
||||||
camera->vaspect = p_enable;
|
camera->vaspect = p_enable;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool RenderingServerSceneRaster::is_camera(RID p_camera) const {
|
bool RendererSceneCull::is_camera(RID p_camera) const {
|
||||||
return camera_owner.owns(p_camera);
|
return camera_owner.owns(p_camera);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* SCENARIO API */
|
/* SCENARIO API */
|
||||||
|
|
||||||
void *RenderingServerSceneRaster::_instance_pair(void *p_self, OctreeElementID, Instance *p_A, int, OctreeElementID, Instance *p_B, int) {
|
void *RendererSceneCull::_instance_pair(void *p_self, OctreeElementID, Instance *p_A, int, OctreeElementID, Instance *p_B, int) {
|
||||||
//RenderingServerSceneRaster *self = (RenderingServerSceneRaster*)p_self;
|
//RendererSceneCull *self = (RendererSceneCull*)p_self;
|
||||||
Instance *A = p_A;
|
Instance *A = p_A;
|
||||||
Instance *B = p_B;
|
Instance *B = p_B;
|
||||||
|
|
||||||
@ -169,7 +169,7 @@ void *RenderingServerSceneRaster::_instance_pair(void *p_self, OctreeElementID,
|
|||||||
pinfo.geometry = A;
|
pinfo.geometry = A;
|
||||||
pinfo.L = geom->lightmap_captures.push_back(B);
|
pinfo.L = geom->lightmap_captures.push_back(B);
|
||||||
List<InstanceLightmapData::PairInfo>::Element *E = lightmap_data->geometries.push_back(pinfo);
|
List<InstanceLightmapData::PairInfo>::Element *E = lightmap_data->geometries.push_back(pinfo);
|
||||||
((RenderingServerSceneRaster *)p_self)->_instance_queue_update(A, false, false); //need to update capture
|
((RendererSceneCull *)p_self)->_instance_queue_update(A, false, false); //need to update capture
|
||||||
return E; //this element should make freeing faster
|
return E; //this element should make freeing faster
|
||||||
} else {
|
} else {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
@ -204,8 +204,8 @@ void *RenderingServerSceneRaster::_instance_pair(void *p_self, OctreeElementID,
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerSceneRaster::_instance_unpair(void *p_self, OctreeElementID, Instance *p_A, int, OctreeElementID, Instance *p_B, int, void *udata) {
|
void RendererSceneCull::_instance_unpair(void *p_self, OctreeElementID, Instance *p_A, int, OctreeElementID, Instance *p_B, int, void *udata) {
|
||||||
//RenderingServerSceneRaster *self = (RenderingServerSceneRaster*)p_self;
|
//RendererSceneCull *self = (RendererSceneCull*)p_self;
|
||||||
Instance *A = p_A;
|
Instance *A = p_A;
|
||||||
Instance *B = p_B;
|
Instance *B = p_B;
|
||||||
|
|
||||||
@ -257,7 +257,7 @@ void RenderingServerSceneRaster::_instance_unpair(void *p_self, OctreeElementID,
|
|||||||
|
|
||||||
geom->lightmap_captures.erase(E->get().L);
|
geom->lightmap_captures.erase(E->get().L);
|
||||||
lightmap_data->geometries.erase(E);
|
lightmap_data->geometries.erase(E);
|
||||||
((RenderingServerSceneRaster *)p_self)->_instance_queue_update(A, false, false); //need to update capture
|
((RendererSceneCull *)p_self)->_instance_queue_update(A, false, false); //need to update capture
|
||||||
}
|
}
|
||||||
|
|
||||||
} else if (B->base_type == RS::INSTANCE_GI_PROBE && ((1 << A->base_type) & RS::INSTANCE_GEOMETRY_MASK)) {
|
} else if (B->base_type == RS::INSTANCE_GI_PROBE && ((1 << A->base_type) & RS::INSTANCE_GEOMETRY_MASK)) {
|
||||||
@ -285,7 +285,7 @@ void RenderingServerSceneRaster::_instance_unpair(void *p_self, OctreeElementID,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
RID RenderingServerSceneRaster::scenario_create() {
|
RID RendererSceneCull::scenario_create() {
|
||||||
Scenario *scenario = memnew(Scenario);
|
Scenario *scenario = memnew(Scenario);
|
||||||
ERR_FAIL_COND_V(!scenario, RID());
|
ERR_FAIL_COND_V(!scenario, RID());
|
||||||
RID scenario_rid = scenario_owner.make_rid(scenario);
|
RID scenario_rid = scenario_owner.make_rid(scenario);
|
||||||
@ -303,41 +303,41 @@ RID RenderingServerSceneRaster::scenario_create() {
|
|||||||
return scenario_rid;
|
return scenario_rid;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerSceneRaster::scenario_set_debug(RID p_scenario, RS::ScenarioDebugMode p_debug_mode) {
|
void RendererSceneCull::scenario_set_debug(RID p_scenario, RS::ScenarioDebugMode p_debug_mode) {
|
||||||
Scenario *scenario = scenario_owner.getornull(p_scenario);
|
Scenario *scenario = scenario_owner.getornull(p_scenario);
|
||||||
ERR_FAIL_COND(!scenario);
|
ERR_FAIL_COND(!scenario);
|
||||||
scenario->debug = p_debug_mode;
|
scenario->debug = p_debug_mode;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerSceneRaster::scenario_set_environment(RID p_scenario, RID p_environment) {
|
void RendererSceneCull::scenario_set_environment(RID p_scenario, RID p_environment) {
|
||||||
Scenario *scenario = scenario_owner.getornull(p_scenario);
|
Scenario *scenario = scenario_owner.getornull(p_scenario);
|
||||||
ERR_FAIL_COND(!scenario);
|
ERR_FAIL_COND(!scenario);
|
||||||
scenario->environment = p_environment;
|
scenario->environment = p_environment;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerSceneRaster::scenario_set_camera_effects(RID p_scenario, RID p_camera_effects) {
|
void RendererSceneCull::scenario_set_camera_effects(RID p_scenario, RID p_camera_effects) {
|
||||||
Scenario *scenario = scenario_owner.getornull(p_scenario);
|
Scenario *scenario = scenario_owner.getornull(p_scenario);
|
||||||
ERR_FAIL_COND(!scenario);
|
ERR_FAIL_COND(!scenario);
|
||||||
scenario->camera_effects = p_camera_effects;
|
scenario->camera_effects = p_camera_effects;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerSceneRaster::scenario_set_fallback_environment(RID p_scenario, RID p_environment) {
|
void RendererSceneCull::scenario_set_fallback_environment(RID p_scenario, RID p_environment) {
|
||||||
Scenario *scenario = scenario_owner.getornull(p_scenario);
|
Scenario *scenario = scenario_owner.getornull(p_scenario);
|
||||||
ERR_FAIL_COND(!scenario);
|
ERR_FAIL_COND(!scenario);
|
||||||
scenario->fallback_environment = p_environment;
|
scenario->fallback_environment = p_environment;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerSceneRaster::scenario_set_reflection_atlas_size(RID p_scenario, int p_reflection_size, int p_reflection_count) {
|
void RendererSceneCull::scenario_set_reflection_atlas_size(RID p_scenario, int p_reflection_size, int p_reflection_count) {
|
||||||
Scenario *scenario = scenario_owner.getornull(p_scenario);
|
Scenario *scenario = scenario_owner.getornull(p_scenario);
|
||||||
ERR_FAIL_COND(!scenario);
|
ERR_FAIL_COND(!scenario);
|
||||||
scene_render->reflection_atlas_set_size(scenario->reflection_atlas, p_reflection_size, p_reflection_count);
|
scene_render->reflection_atlas_set_size(scenario->reflection_atlas, p_reflection_size, p_reflection_count);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool RenderingServerSceneRaster::is_scenario(RID p_scenario) const {
|
bool RendererSceneCull::is_scenario(RID p_scenario) const {
|
||||||
return scenario_owner.owns(p_scenario);
|
return scenario_owner.owns(p_scenario);
|
||||||
}
|
}
|
||||||
|
|
||||||
RID RenderingServerSceneRaster::scenario_get_environment(RID p_scenario) {
|
RID RendererSceneCull::scenario_get_environment(RID p_scenario) {
|
||||||
Scenario *scenario = scenario_owner.getornull(p_scenario);
|
Scenario *scenario = scenario_owner.getornull(p_scenario);
|
||||||
ERR_FAIL_COND_V(!scenario, RID());
|
ERR_FAIL_COND_V(!scenario, RID());
|
||||||
return scenario->environment;
|
return scenario->environment;
|
||||||
@ -345,7 +345,7 @@ RID RenderingServerSceneRaster::scenario_get_environment(RID p_scenario) {
|
|||||||
|
|
||||||
/* INSTANCING API */
|
/* INSTANCING API */
|
||||||
|
|
||||||
void RenderingServerSceneRaster::_instance_queue_update(Instance *p_instance, bool p_update_aabb, bool p_update_dependencies) {
|
void RendererSceneCull::_instance_queue_update(Instance *p_instance, bool p_update_aabb, bool p_update_dependencies) {
|
||||||
if (p_update_aabb) {
|
if (p_update_aabb) {
|
||||||
p_instance->update_aabb = true;
|
p_instance->update_aabb = true;
|
||||||
}
|
}
|
||||||
@ -360,7 +360,7 @@ void RenderingServerSceneRaster::_instance_queue_update(Instance *p_instance, bo
|
|||||||
_instance_update_list.add(&p_instance->update_item);
|
_instance_update_list.add(&p_instance->update_item);
|
||||||
}
|
}
|
||||||
|
|
||||||
RID RenderingServerSceneRaster::instance_create() {
|
RID RendererSceneCull::instance_create() {
|
||||||
Instance *instance = memnew(Instance);
|
Instance *instance = memnew(Instance);
|
||||||
ERR_FAIL_COND_V(!instance, RID());
|
ERR_FAIL_COND_V(!instance, RID());
|
||||||
|
|
||||||
@ -370,7 +370,7 @@ RID RenderingServerSceneRaster::instance_create() {
|
|||||||
return instance_rid;
|
return instance_rid;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerSceneRaster::instance_set_base(RID p_instance, RID p_base) {
|
void RendererSceneCull::instance_set_base(RID p_instance, RID p_base) {
|
||||||
Instance *instance = instance_owner.getornull(p_instance);
|
Instance *instance = instance_owner.getornull(p_instance);
|
||||||
ERR_FAIL_COND(!instance);
|
ERR_FAIL_COND(!instance);
|
||||||
|
|
||||||
@ -527,7 +527,7 @@ void RenderingServerSceneRaster::instance_set_base(RID p_instance, RID p_base) {
|
|||||||
_instance_queue_update(instance, true, true);
|
_instance_queue_update(instance, true, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerSceneRaster::instance_set_scenario(RID p_instance, RID p_scenario) {
|
void RendererSceneCull::instance_set_scenario(RID p_instance, RID p_scenario) {
|
||||||
Instance *instance = instance_owner.getornull(p_instance);
|
Instance *instance = instance_owner.getornull(p_instance);
|
||||||
ERR_FAIL_COND(!instance);
|
ERR_FAIL_COND(!instance);
|
||||||
|
|
||||||
@ -615,14 +615,14 @@ void RenderingServerSceneRaster::instance_set_scenario(RID p_instance, RID p_sce
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerSceneRaster::instance_set_layer_mask(RID p_instance, uint32_t p_mask) {
|
void RendererSceneCull::instance_set_layer_mask(RID p_instance, uint32_t p_mask) {
|
||||||
Instance *instance = instance_owner.getornull(p_instance);
|
Instance *instance = instance_owner.getornull(p_instance);
|
||||||
ERR_FAIL_COND(!instance);
|
ERR_FAIL_COND(!instance);
|
||||||
|
|
||||||
instance->layer_mask = p_mask;
|
instance->layer_mask = p_mask;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerSceneRaster::instance_set_transform(RID p_instance, const Transform &p_transform) {
|
void RendererSceneCull::instance_set_transform(RID p_instance, const Transform &p_transform) {
|
||||||
Instance *instance = instance_owner.getornull(p_instance);
|
Instance *instance = instance_owner.getornull(p_instance);
|
||||||
ERR_FAIL_COND(!instance);
|
ERR_FAIL_COND(!instance);
|
||||||
|
|
||||||
@ -647,14 +647,14 @@ void RenderingServerSceneRaster::instance_set_transform(RID p_instance, const Tr
|
|||||||
_instance_queue_update(instance, true);
|
_instance_queue_update(instance, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerSceneRaster::instance_attach_object_instance_id(RID p_instance, ObjectID p_id) {
|
void RendererSceneCull::instance_attach_object_instance_id(RID p_instance, ObjectID p_id) {
|
||||||
Instance *instance = instance_owner.getornull(p_instance);
|
Instance *instance = instance_owner.getornull(p_instance);
|
||||||
ERR_FAIL_COND(!instance);
|
ERR_FAIL_COND(!instance);
|
||||||
|
|
||||||
instance->object_id = p_id;
|
instance->object_id = p_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerSceneRaster::instance_set_blend_shape_weight(RID p_instance, int p_shape, float p_weight) {
|
void RendererSceneCull::instance_set_blend_shape_weight(RID p_instance, int p_shape, float p_weight) {
|
||||||
Instance *instance = instance_owner.getornull(p_instance);
|
Instance *instance = instance_owner.getornull(p_instance);
|
||||||
ERR_FAIL_COND(!instance);
|
ERR_FAIL_COND(!instance);
|
||||||
|
|
||||||
@ -666,7 +666,7 @@ void RenderingServerSceneRaster::instance_set_blend_shape_weight(RID p_instance,
|
|||||||
instance->blend_values.write[p_shape] = p_weight;
|
instance->blend_values.write[p_shape] = p_weight;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerSceneRaster::instance_set_surface_material(RID p_instance, int p_surface, RID p_material) {
|
void RendererSceneCull::instance_set_surface_material(RID p_instance, int p_surface, RID p_material) {
|
||||||
Instance *instance = instance_owner.getornull(p_instance);
|
Instance *instance = instance_owner.getornull(p_instance);
|
||||||
ERR_FAIL_COND(!instance);
|
ERR_FAIL_COND(!instance);
|
||||||
|
|
||||||
@ -682,7 +682,7 @@ void RenderingServerSceneRaster::instance_set_surface_material(RID p_instance, i
|
|||||||
_instance_queue_update(instance, false, true);
|
_instance_queue_update(instance, false, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerSceneRaster::instance_set_visible(RID p_instance, bool p_visible) {
|
void RendererSceneCull::instance_set_visible(RID p_instance, bool p_visible) {
|
||||||
Instance *instance = instance_owner.getornull(p_instance);
|
Instance *instance = instance_owner.getornull(p_instance);
|
||||||
ERR_FAIL_COND(!instance);
|
ERR_FAIL_COND(!instance);
|
||||||
|
|
||||||
@ -738,7 +738,7 @@ inline bool is_geometry_instance(RenderingServer::InstanceType p_type) {
|
|||||||
return p_type == RS::INSTANCE_MESH || p_type == RS::INSTANCE_MULTIMESH || p_type == RS::INSTANCE_PARTICLES || p_type == RS::INSTANCE_IMMEDIATE;
|
return p_type == RS::INSTANCE_MESH || p_type == RS::INSTANCE_MULTIMESH || p_type == RS::INSTANCE_PARTICLES || p_type == RS::INSTANCE_IMMEDIATE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerSceneRaster::instance_set_custom_aabb(RID p_instance, AABB p_aabb) {
|
void RendererSceneCull::instance_set_custom_aabb(RID p_instance, AABB p_aabb) {
|
||||||
Instance *instance = instance_owner.getornull(p_instance);
|
Instance *instance = instance_owner.getornull(p_instance);
|
||||||
ERR_FAIL_COND(!instance);
|
ERR_FAIL_COND(!instance);
|
||||||
ERR_FAIL_COND(!is_geometry_instance(instance->base_type));
|
ERR_FAIL_COND(!is_geometry_instance(instance->base_type));
|
||||||
@ -763,7 +763,7 @@ void RenderingServerSceneRaster::instance_set_custom_aabb(RID p_instance, AABB p
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerSceneRaster::instance_attach_skeleton(RID p_instance, RID p_skeleton) {
|
void RendererSceneCull::instance_attach_skeleton(RID p_instance, RID p_skeleton) {
|
||||||
Instance *instance = instance_owner.getornull(p_instance);
|
Instance *instance = instance_owner.getornull(p_instance);
|
||||||
ERR_FAIL_COND(!instance);
|
ERR_FAIL_COND(!instance);
|
||||||
|
|
||||||
@ -780,10 +780,10 @@ void RenderingServerSceneRaster::instance_attach_skeleton(RID p_instance, RID p_
|
|||||||
_instance_queue_update(instance, true, true);
|
_instance_queue_update(instance, true, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerSceneRaster::instance_set_exterior(RID p_instance, bool p_enabled) {
|
void RendererSceneCull::instance_set_exterior(RID p_instance, bool p_enabled) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerSceneRaster::instance_set_extra_visibility_margin(RID p_instance, real_t p_margin) {
|
void RendererSceneCull::instance_set_extra_visibility_margin(RID p_instance, real_t p_margin) {
|
||||||
Instance *instance = instance_owner.getornull(p_instance);
|
Instance *instance = instance_owner.getornull(p_instance);
|
||||||
ERR_FAIL_COND(!instance);
|
ERR_FAIL_COND(!instance);
|
||||||
|
|
||||||
@ -791,12 +791,12 @@ void RenderingServerSceneRaster::instance_set_extra_visibility_margin(RID p_inst
|
|||||||
_instance_queue_update(instance, true, false);
|
_instance_queue_update(instance, true, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
Vector<ObjectID> RenderingServerSceneRaster::instances_cull_aabb(const AABB &p_aabb, RID p_scenario) const {
|
Vector<ObjectID> RendererSceneCull::instances_cull_aabb(const AABB &p_aabb, RID p_scenario) const {
|
||||||
Vector<ObjectID> instances;
|
Vector<ObjectID> instances;
|
||||||
Scenario *scenario = scenario_owner.getornull(p_scenario);
|
Scenario *scenario = scenario_owner.getornull(p_scenario);
|
||||||
ERR_FAIL_COND_V(!scenario, instances);
|
ERR_FAIL_COND_V(!scenario, instances);
|
||||||
|
|
||||||
const_cast<RenderingServerSceneRaster *>(this)->update_dirty_instances(); // check dirty instances before culling
|
const_cast<RendererSceneCull *>(this)->update_dirty_instances(); // check dirty instances before culling
|
||||||
|
|
||||||
int culled = 0;
|
int culled = 0;
|
||||||
Instance *cull[1024];
|
Instance *cull[1024];
|
||||||
@ -815,11 +815,11 @@ Vector<ObjectID> RenderingServerSceneRaster::instances_cull_aabb(const AABB &p_a
|
|||||||
return instances;
|
return instances;
|
||||||
}
|
}
|
||||||
|
|
||||||
Vector<ObjectID> RenderingServerSceneRaster::instances_cull_ray(const Vector3 &p_from, const Vector3 &p_to, RID p_scenario) const {
|
Vector<ObjectID> RendererSceneCull::instances_cull_ray(const Vector3 &p_from, const Vector3 &p_to, RID p_scenario) const {
|
||||||
Vector<ObjectID> instances;
|
Vector<ObjectID> instances;
|
||||||
Scenario *scenario = scenario_owner.getornull(p_scenario);
|
Scenario *scenario = scenario_owner.getornull(p_scenario);
|
||||||
ERR_FAIL_COND_V(!scenario, instances);
|
ERR_FAIL_COND_V(!scenario, instances);
|
||||||
const_cast<RenderingServerSceneRaster *>(this)->update_dirty_instances(); // check dirty instances before culling
|
const_cast<RendererSceneCull *>(this)->update_dirty_instances(); // check dirty instances before culling
|
||||||
|
|
||||||
int culled = 0;
|
int culled = 0;
|
||||||
Instance *cull[1024];
|
Instance *cull[1024];
|
||||||
@ -838,11 +838,11 @@ Vector<ObjectID> RenderingServerSceneRaster::instances_cull_ray(const Vector3 &p
|
|||||||
return instances;
|
return instances;
|
||||||
}
|
}
|
||||||
|
|
||||||
Vector<ObjectID> RenderingServerSceneRaster::instances_cull_convex(const Vector<Plane> &p_convex, RID p_scenario) const {
|
Vector<ObjectID> RendererSceneCull::instances_cull_convex(const Vector<Plane> &p_convex, RID p_scenario) const {
|
||||||
Vector<ObjectID> instances;
|
Vector<ObjectID> instances;
|
||||||
Scenario *scenario = scenario_owner.getornull(p_scenario);
|
Scenario *scenario = scenario_owner.getornull(p_scenario);
|
||||||
ERR_FAIL_COND_V(!scenario, instances);
|
ERR_FAIL_COND_V(!scenario, instances);
|
||||||
const_cast<RenderingServerSceneRaster *>(this)->update_dirty_instances(); // check dirty instances before culling
|
const_cast<RendererSceneCull *>(this)->update_dirty_instances(); // check dirty instances before culling
|
||||||
|
|
||||||
int culled = 0;
|
int culled = 0;
|
||||||
Instance *cull[1024];
|
Instance *cull[1024];
|
||||||
@ -862,7 +862,7 @@ Vector<ObjectID> RenderingServerSceneRaster::instances_cull_convex(const Vector<
|
|||||||
return instances;
|
return instances;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerSceneRaster::instance_geometry_set_flag(RID p_instance, RS::InstanceFlags p_flags, bool p_enabled) {
|
void RendererSceneCull::instance_geometry_set_flag(RID p_instance, RS::InstanceFlags p_flags, bool p_enabled) {
|
||||||
Instance *instance = instance_owner.getornull(p_instance);
|
Instance *instance = instance_owner.getornull(p_instance);
|
||||||
ERR_FAIL_COND(!instance);
|
ERR_FAIL_COND(!instance);
|
||||||
|
|
||||||
@ -899,7 +899,7 @@ void RenderingServerSceneRaster::instance_geometry_set_flag(RID p_instance, RS::
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerSceneRaster::instance_geometry_set_cast_shadows_setting(RID p_instance, RS::ShadowCastingSetting p_shadow_casting_setting) {
|
void RendererSceneCull::instance_geometry_set_cast_shadows_setting(RID p_instance, RS::ShadowCastingSetting p_shadow_casting_setting) {
|
||||||
Instance *instance = instance_owner.getornull(p_instance);
|
Instance *instance = instance_owner.getornull(p_instance);
|
||||||
ERR_FAIL_COND(!instance);
|
ERR_FAIL_COND(!instance);
|
||||||
|
|
||||||
@ -907,7 +907,7 @@ void RenderingServerSceneRaster::instance_geometry_set_cast_shadows_setting(RID
|
|||||||
_instance_queue_update(instance, false, true);
|
_instance_queue_update(instance, false, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerSceneRaster::instance_geometry_set_material_override(RID p_instance, RID p_material) {
|
void RendererSceneCull::instance_geometry_set_material_override(RID p_instance, RID p_material) {
|
||||||
Instance *instance = instance_owner.getornull(p_instance);
|
Instance *instance = instance_owner.getornull(p_instance);
|
||||||
ERR_FAIL_COND(!instance);
|
ERR_FAIL_COND(!instance);
|
||||||
|
|
||||||
@ -915,13 +915,13 @@ void RenderingServerSceneRaster::instance_geometry_set_material_override(RID p_i
|
|||||||
_instance_queue_update(instance, false, true);
|
_instance_queue_update(instance, false, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerSceneRaster::instance_geometry_set_draw_range(RID p_instance, float p_min, float p_max, float p_min_margin, float p_max_margin) {
|
void RendererSceneCull::instance_geometry_set_draw_range(RID p_instance, float p_min, float p_max, float p_min_margin, float p_max_margin) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerSceneRaster::instance_geometry_set_as_instance_lod(RID p_instance, RID p_as_lod_of_instance) {
|
void RendererSceneCull::instance_geometry_set_as_instance_lod(RID p_instance, RID p_as_lod_of_instance) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerSceneRaster::instance_geometry_set_lightmap(RID p_instance, RID p_lightmap, const Rect2 &p_lightmap_uv_scale, int p_slice_index) {
|
void RendererSceneCull::instance_geometry_set_lightmap(RID p_instance, RID p_lightmap, const Rect2 &p_lightmap_uv_scale, int p_slice_index) {
|
||||||
Instance *instance = instance_owner.getornull(p_instance);
|
Instance *instance = instance_owner.getornull(p_instance);
|
||||||
ERR_FAIL_COND(!instance);
|
ERR_FAIL_COND(!instance);
|
||||||
|
|
||||||
@ -943,14 +943,14 @@ void RenderingServerSceneRaster::instance_geometry_set_lightmap(RID p_instance,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerSceneRaster::instance_geometry_set_shader_parameter(RID p_instance, const StringName &p_parameter, const Variant &p_value) {
|
void RendererSceneCull::instance_geometry_set_shader_parameter(RID p_instance, const StringName &p_parameter, const Variant &p_value) {
|
||||||
Instance *instance = instance_owner.getornull(p_instance);
|
Instance *instance = instance_owner.getornull(p_instance);
|
||||||
ERR_FAIL_COND(!instance);
|
ERR_FAIL_COND(!instance);
|
||||||
|
|
||||||
Map<StringName, RasterizerScene::InstanceBase::InstanceShaderParameter>::Element *E = instance->instance_shader_parameters.find(p_parameter);
|
Map<StringName, RendererSceneRender::InstanceBase::InstanceShaderParameter>::Element *E = instance->instance_shader_parameters.find(p_parameter);
|
||||||
|
|
||||||
if (!E) {
|
if (!E) {
|
||||||
RasterizerScene::InstanceBase::InstanceShaderParameter isp;
|
RendererSceneRender::InstanceBase::InstanceShaderParameter isp;
|
||||||
isp.index = -1;
|
isp.index = -1;
|
||||||
isp.info = PropertyInfo();
|
isp.info = PropertyInfo();
|
||||||
isp.value = p_value;
|
isp.value = p_value;
|
||||||
@ -964,8 +964,8 @@ void RenderingServerSceneRaster::instance_geometry_set_shader_parameter(RID p_in
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Variant RenderingServerSceneRaster::instance_geometry_get_shader_parameter(RID p_instance, const StringName &p_parameter) const {
|
Variant RendererSceneCull::instance_geometry_get_shader_parameter(RID p_instance, const StringName &p_parameter) const {
|
||||||
const Instance *instance = const_cast<RenderingServerSceneRaster *>(this)->instance_owner.getornull(p_instance);
|
const Instance *instance = const_cast<RendererSceneCull *>(this)->instance_owner.getornull(p_instance);
|
||||||
ERR_FAIL_COND_V(!instance, Variant());
|
ERR_FAIL_COND_V(!instance, Variant());
|
||||||
|
|
||||||
if (instance->instance_shader_parameters.has(p_parameter)) {
|
if (instance->instance_shader_parameters.has(p_parameter)) {
|
||||||
@ -974,8 +974,8 @@ Variant RenderingServerSceneRaster::instance_geometry_get_shader_parameter(RID p
|
|||||||
return Variant();
|
return Variant();
|
||||||
}
|
}
|
||||||
|
|
||||||
Variant RenderingServerSceneRaster::instance_geometry_get_shader_parameter_default_value(RID p_instance, const StringName &p_parameter) const {
|
Variant RendererSceneCull::instance_geometry_get_shader_parameter_default_value(RID p_instance, const StringName &p_parameter) const {
|
||||||
const Instance *instance = const_cast<RenderingServerSceneRaster *>(this)->instance_owner.getornull(p_instance);
|
const Instance *instance = const_cast<RendererSceneCull *>(this)->instance_owner.getornull(p_instance);
|
||||||
ERR_FAIL_COND_V(!instance, Variant());
|
ERR_FAIL_COND_V(!instance, Variant());
|
||||||
|
|
||||||
if (instance->instance_shader_parameters.has(p_parameter)) {
|
if (instance->instance_shader_parameters.has(p_parameter)) {
|
||||||
@ -984,14 +984,14 @@ Variant RenderingServerSceneRaster::instance_geometry_get_shader_parameter_defau
|
|||||||
return Variant();
|
return Variant();
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerSceneRaster::instance_geometry_get_shader_parameter_list(RID p_instance, List<PropertyInfo> *p_parameters) const {
|
void RendererSceneCull::instance_geometry_get_shader_parameter_list(RID p_instance, List<PropertyInfo> *p_parameters) const {
|
||||||
const Instance *instance = const_cast<RenderingServerSceneRaster *>(this)->instance_owner.getornull(p_instance);
|
const Instance *instance = const_cast<RendererSceneCull *>(this)->instance_owner.getornull(p_instance);
|
||||||
ERR_FAIL_COND(!instance);
|
ERR_FAIL_COND(!instance);
|
||||||
|
|
||||||
const_cast<RenderingServerSceneRaster *>(this)->update_dirty_instances();
|
const_cast<RendererSceneCull *>(this)->update_dirty_instances();
|
||||||
|
|
||||||
Vector<StringName> names;
|
Vector<StringName> names;
|
||||||
for (Map<StringName, RasterizerScene::InstanceBase::InstanceShaderParameter>::Element *E = instance->instance_shader_parameters.front(); E; E = E->next()) {
|
for (Map<StringName, RendererSceneRender::InstanceBase::InstanceShaderParameter>::Element *E = instance->instance_shader_parameters.front(); E; E = E->next()) {
|
||||||
names.push_back(E->key());
|
names.push_back(E->key());
|
||||||
}
|
}
|
||||||
names.sort_custom<StringName::AlphCompare>();
|
names.sort_custom<StringName::AlphCompare>();
|
||||||
@ -1001,7 +1001,7 @@ void RenderingServerSceneRaster::instance_geometry_get_shader_parameter_list(RID
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerSceneRaster::_update_instance(Instance *p_instance) {
|
void RendererSceneCull::_update_instance(Instance *p_instance) {
|
||||||
p_instance->version++;
|
p_instance->version++;
|
||||||
|
|
||||||
if (p_instance->base_type == RS::INSTANCE_LIGHT) {
|
if (p_instance->base_type == RS::INSTANCE_LIGHT) {
|
||||||
@ -1143,7 +1143,7 @@ void RenderingServerSceneRaster::_update_instance(Instance *p_instance) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerSceneRaster::_update_instance_aabb(Instance *p_instance) {
|
void RendererSceneCull::_update_instance_aabb(Instance *p_instance) {
|
||||||
AABB new_aabb;
|
AABB new_aabb;
|
||||||
|
|
||||||
ERR_FAIL_COND(p_instance->base_type != RS::INSTANCE_NONE && !p_instance->base.is_valid());
|
ERR_FAIL_COND(p_instance->base_type != RS::INSTANCE_NONE && !p_instance->base.is_valid());
|
||||||
@ -1221,7 +1221,7 @@ void RenderingServerSceneRaster::_update_instance_aabb(Instance *p_instance) {
|
|||||||
p_instance->aabb = new_aabb;
|
p_instance->aabb = new_aabb;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerSceneRaster::_update_instance_lightmap_captures(Instance *p_instance) {
|
void RendererSceneCull::_update_instance_lightmap_captures(Instance *p_instance) {
|
||||||
bool first_set = p_instance->lightmap_sh.size() == 0;
|
bool first_set = p_instance->lightmap_sh.size() == 0;
|
||||||
p_instance->lightmap_sh.resize(9); //using SH
|
p_instance->lightmap_sh.resize(9); //using SH
|
||||||
p_instance->lightmap_target_sh.resize(9); //using SH
|
p_instance->lightmap_target_sh.resize(9); //using SH
|
||||||
@ -1299,7 +1299,7 @@ void RenderingServerSceneRaster::_update_instance_lightmap_captures(Instance *p_
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool RenderingServerSceneRaster::_light_instance_update_shadow(Instance *p_instance, const Transform p_cam_transform, const CameraMatrix &p_cam_projection, bool p_cam_orthogonal, bool p_cam_vaspect, RID p_shadow_atlas, Scenario *p_scenario) {
|
bool RendererSceneCull::_light_instance_update_shadow(Instance *p_instance, const Transform p_cam_transform, const CameraMatrix &p_cam_projection, bool p_cam_orthogonal, bool p_cam_vaspect, RID p_shadow_atlas, Scenario *p_scenario) {
|
||||||
InstanceLightData *light = static_cast<InstanceLightData *>(p_instance->base_data);
|
InstanceLightData *light = static_cast<InstanceLightData *>(p_instance->base_data);
|
||||||
|
|
||||||
Transform light_transform = p_instance->transform;
|
Transform light_transform = p_instance->transform;
|
||||||
@ -1671,7 +1671,7 @@ bool RenderingServerSceneRaster::_light_instance_update_shadow(Instance *p_insta
|
|||||||
scene_render->light_instance_set_shadow_transform(light->instance, ortho_camera, ortho_transform, z_max - z_min_cam, distances[i + 1], i, radius * 2.0 / texture_size, bias_scale * aspect_bias_scale * min_distance_bias_scale, z_max, uv_scale);
|
scene_render->light_instance_set_shadow_transform(light->instance, ortho_camera, ortho_transform, z_max - z_min_cam, distances[i + 1], i, radius * 2.0 / texture_size, bias_scale * aspect_bias_scale * min_distance_bias_scale, z_max, uv_scale);
|
||||||
}
|
}
|
||||||
|
|
||||||
scene_render->render_shadow(light->instance, p_shadow_atlas, i, (RasterizerScene::InstanceBase **)instance_shadow_cull_result, cull_count);
|
scene_render->render_shadow(light->instance, p_shadow_atlas, i, (RendererSceneRender::InstanceBase **)instance_shadow_cull_result, cull_count);
|
||||||
}
|
}
|
||||||
|
|
||||||
} break;
|
} break;
|
||||||
@ -1715,7 +1715,7 @@ bool RenderingServerSceneRaster::_light_instance_update_shadow(Instance *p_insta
|
|||||||
}
|
}
|
||||||
|
|
||||||
scene_render->light_instance_set_shadow_transform(light->instance, CameraMatrix(), light_transform, radius, 0, i, 0);
|
scene_render->light_instance_set_shadow_transform(light->instance, CameraMatrix(), light_transform, radius, 0, i, 0);
|
||||||
scene_render->render_shadow(light->instance, p_shadow_atlas, i, (RasterizerScene::InstanceBase **)instance_shadow_cull_result, cull_count);
|
scene_render->render_shadow(light->instance, p_shadow_atlas, i, (RendererSceneRender::InstanceBase **)instance_shadow_cull_result, cull_count);
|
||||||
}
|
}
|
||||||
} else { //shadow cube
|
} else { //shadow cube
|
||||||
|
|
||||||
@ -1767,7 +1767,7 @@ bool RenderingServerSceneRaster::_light_instance_update_shadow(Instance *p_insta
|
|||||||
}
|
}
|
||||||
|
|
||||||
scene_render->light_instance_set_shadow_transform(light->instance, cm, xform, radius, 0, i, 0);
|
scene_render->light_instance_set_shadow_transform(light->instance, cm, xform, radius, 0, i, 0);
|
||||||
scene_render->render_shadow(light->instance, p_shadow_atlas, i, (RasterizerScene::InstanceBase **)instance_shadow_cull_result, cull_count);
|
scene_render->render_shadow(light->instance, p_shadow_atlas, i, (RendererSceneRender::InstanceBase **)instance_shadow_cull_result, cull_count);
|
||||||
}
|
}
|
||||||
|
|
||||||
//restore the regular DP matrix
|
//restore the regular DP matrix
|
||||||
@ -1804,7 +1804,7 @@ bool RenderingServerSceneRaster::_light_instance_update_shadow(Instance *p_insta
|
|||||||
}
|
}
|
||||||
|
|
||||||
scene_render->light_instance_set_shadow_transform(light->instance, cm, light_transform, radius, 0, 0, 0);
|
scene_render->light_instance_set_shadow_transform(light->instance, cm, light_transform, radius, 0, 0, 0);
|
||||||
scene_render->render_shadow(light->instance, p_shadow_atlas, 0, (RasterizerScene::InstanceBase **)instance_shadow_cull_result, cull_count);
|
scene_render->render_shadow(light->instance, p_shadow_atlas, 0, (RendererSceneRender::InstanceBase **)instance_shadow_cull_result, cull_count);
|
||||||
|
|
||||||
} break;
|
} break;
|
||||||
}
|
}
|
||||||
@ -1812,7 +1812,7 @@ bool RenderingServerSceneRaster::_light_instance_update_shadow(Instance *p_insta
|
|||||||
return animated_material_found;
|
return animated_material_found;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerSceneRaster::render_camera(RID p_render_buffers, RID p_camera, RID p_scenario, Size2 p_viewport_size, RID p_shadow_atlas) {
|
void RendererSceneCull::render_camera(RID p_render_buffers, RID p_camera, RID p_scenario, Size2 p_viewport_size, RID p_shadow_atlas) {
|
||||||
// render to mono camera
|
// render to mono camera
|
||||||
#ifndef _3D_DISABLED
|
#ifndef _3D_DISABLED
|
||||||
|
|
||||||
@ -1862,7 +1862,7 @@ void RenderingServerSceneRaster::render_camera(RID p_render_buffers, RID p_camer
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerSceneRaster::render_camera(RID p_render_buffers, Ref<XRInterface> &p_interface, XRInterface::Eyes p_eye, RID p_camera, RID p_scenario, Size2 p_viewport_size, RID p_shadow_atlas) {
|
void RendererSceneCull::render_camera(RID p_render_buffers, Ref<XRInterface> &p_interface, XRInterface::Eyes p_eye, RID p_camera, RID p_scenario, Size2 p_viewport_size, RID p_shadow_atlas) {
|
||||||
// render for AR/VR interface
|
// render for AR/VR interface
|
||||||
|
|
||||||
Camera *camera = camera_owner.getornull(p_camera);
|
Camera *camera = camera_owner.getornull(p_camera);
|
||||||
@ -1946,7 +1946,7 @@ void RenderingServerSceneRaster::render_camera(RID p_render_buffers, Ref<XRInter
|
|||||||
_render_scene(p_render_buffers, cam_transform, camera_matrix, false, environment, camera->effects, p_scenario, p_shadow_atlas, RID(), -1);
|
_render_scene(p_render_buffers, cam_transform, camera_matrix, false, environment, camera->effects, p_scenario, p_shadow_atlas, RID(), -1);
|
||||||
};
|
};
|
||||||
|
|
||||||
void RenderingServerSceneRaster::_prepare_scene(const Transform p_cam_transform, const CameraMatrix &p_cam_projection, bool p_cam_orthogonal, bool p_cam_vaspect, RID p_render_buffers, RID p_environment, uint32_t p_visible_layers, RID p_scenario, RID p_shadow_atlas, RID p_reflection_probe, bool p_using_shadows) {
|
void RendererSceneCull::_prepare_scene(const Transform p_cam_transform, const CameraMatrix &p_cam_projection, bool p_cam_orthogonal, bool p_cam_vaspect, RID p_render_buffers, RID p_environment, uint32_t p_visible_layers, RID p_scenario, RID p_shadow_atlas, RID p_reflection_probe, bool p_using_shadows) {
|
||||||
// Note, in stereo rendering:
|
// Note, in stereo rendering:
|
||||||
// - p_cam_transform will be a transform in the middle of our two eyes
|
// - p_cam_transform will be a transform in the middle of our two eyes
|
||||||
// - p_cam_projection is a wider frustrum that encompasses both eyes
|
// - p_cam_projection is a wider frustrum that encompasses both eyes
|
||||||
@ -2355,7 +2355,7 @@ void RenderingServerSceneRaster::_prepare_scene(const Transform p_cam_transform,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
scene_render->render_sdfgi(p_render_buffers, i, (RasterizerScene::InstanceBase **)instance_shadow_cull_result, sdfgi_cull_count);
|
scene_render->render_sdfgi(p_render_buffers, i, (RendererSceneRender::InstanceBase **)instance_shadow_cull_result, sdfgi_cull_count);
|
||||||
//have to save updated cascades, then update static lights.
|
//have to save updated cascades, then update static lights.
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2367,7 +2367,7 @@ void RenderingServerSceneRaster::_prepare_scene(const Transform p_cam_transform,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
RID RenderingServerSceneRaster::_render_get_environment(RID p_camera, RID p_scenario) {
|
RID RendererSceneCull::_render_get_environment(RID p_camera, RID p_scenario) {
|
||||||
Camera *camera = camera_owner.getornull(p_camera);
|
Camera *camera = camera_owner.getornull(p_camera);
|
||||||
if (camera && scene_render->is_environment(camera->env)) {
|
if (camera && scene_render->is_environment(camera->env)) {
|
||||||
return camera->env;
|
return camera->env;
|
||||||
@ -2388,7 +2388,7 @@ RID RenderingServerSceneRaster::_render_get_environment(RID p_camera, RID p_scen
|
|||||||
return RID();
|
return RID();
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerSceneRaster::_render_scene(RID p_render_buffers, const Transform p_cam_transform, const CameraMatrix &p_cam_projection, bool p_cam_orthogonal, RID p_environment, RID p_force_camera_effects, RID p_scenario, RID p_shadow_atlas, RID p_reflection_probe, int p_reflection_probe_pass) {
|
void RendererSceneCull::_render_scene(RID p_render_buffers, const Transform p_cam_transform, const CameraMatrix &p_cam_projection, bool p_cam_orthogonal, RID p_environment, RID p_force_camera_effects, RID p_scenario, RID p_shadow_atlas, RID p_reflection_probe, int p_reflection_probe_pass) {
|
||||||
Scenario *scenario = scenario_owner.getornull(p_scenario);
|
Scenario *scenario = scenario_owner.getornull(p_scenario);
|
||||||
|
|
||||||
RID camera_effects;
|
RID camera_effects;
|
||||||
@ -2400,10 +2400,10 @@ void RenderingServerSceneRaster::_render_scene(RID p_render_buffers, const Trans
|
|||||||
/* PROCESS GEOMETRY AND DRAW SCENE */
|
/* PROCESS GEOMETRY AND DRAW SCENE */
|
||||||
|
|
||||||
RENDER_TIMESTAMP("Render Scene ");
|
RENDER_TIMESTAMP("Render Scene ");
|
||||||
scene_render->render_scene(p_render_buffers, p_cam_transform, p_cam_projection, p_cam_orthogonal, (RasterizerScene::InstanceBase **)instance_cull_result, instance_cull_count, light_instance_cull_result, light_cull_count + directional_light_count, reflection_probe_instance_cull_result, reflection_probe_cull_count, gi_probe_instance_cull_result, gi_probe_cull_count, decal_instance_cull_result, decal_cull_count, (RasterizerScene::InstanceBase **)lightmap_cull_result, lightmap_cull_count, p_environment, camera_effects, p_shadow_atlas, p_reflection_probe.is_valid() ? RID() : scenario->reflection_atlas, p_reflection_probe, p_reflection_probe_pass);
|
scene_render->render_scene(p_render_buffers, p_cam_transform, p_cam_projection, p_cam_orthogonal, (RendererSceneRender::InstanceBase **)instance_cull_result, instance_cull_count, light_instance_cull_result, light_cull_count + directional_light_count, reflection_probe_instance_cull_result, reflection_probe_cull_count, gi_probe_instance_cull_result, gi_probe_cull_count, decal_instance_cull_result, decal_cull_count, (RendererSceneRender::InstanceBase **)lightmap_cull_result, lightmap_cull_count, p_environment, camera_effects, p_shadow_atlas, p_reflection_probe.is_valid() ? RID() : scenario->reflection_atlas, p_reflection_probe, p_reflection_probe_pass);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerSceneRaster::render_empty_scene(RID p_render_buffers, RID p_scenario, RID p_shadow_atlas) {
|
void RendererSceneCull::render_empty_scene(RID p_render_buffers, RID p_scenario, RID p_shadow_atlas) {
|
||||||
#ifndef _3D_DISABLED
|
#ifndef _3D_DISABLED
|
||||||
|
|
||||||
Scenario *scenario = scenario_owner.getornull(p_scenario);
|
Scenario *scenario = scenario_owner.getornull(p_scenario);
|
||||||
@ -2419,7 +2419,7 @@ void RenderingServerSceneRaster::render_empty_scene(RID p_render_buffers, RID p_
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
bool RenderingServerSceneRaster::_render_reflection_probe_step(Instance *p_instance, int p_step) {
|
bool RendererSceneCull::_render_reflection_probe_step(Instance *p_instance, int p_step) {
|
||||||
InstanceReflectionProbeData *reflection_probe = static_cast<InstanceReflectionProbeData *>(p_instance->base_data);
|
InstanceReflectionProbeData *reflection_probe = static_cast<InstanceReflectionProbeData *>(p_instance->base_data);
|
||||||
Scenario *scenario = p_instance->scenario;
|
Scenario *scenario = p_instance->scenario;
|
||||||
ERR_FAIL_COND_V(!scenario, true);
|
ERR_FAIL_COND_V(!scenario, true);
|
||||||
@ -2488,7 +2488,7 @@ bool RenderingServerSceneRaster::_render_reflection_probe_step(Instance *p_insta
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerSceneRaster::render_probes() {
|
void RendererSceneCull::render_probes() {
|
||||||
/* REFLECTION PROBES */
|
/* REFLECTION PROBES */
|
||||||
|
|
||||||
SelfList<InstanceReflectionProbeData> *ref_probe = reflection_probe_render_list.first();
|
SelfList<InstanceReflectionProbeData> *ref_probe = reflection_probe_render_list.first();
|
||||||
@ -2716,7 +2716,7 @@ void RenderingServerSceneRaster::render_probes() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
scene_render->gi_probe_update(probe->probe_instance, update_lights, probe->light_instances, instance_cull_count, (RasterizerScene::InstanceBase **)instance_cull_result);
|
scene_render->gi_probe_update(probe->probe_instance, update_lights, probe->light_instances, instance_cull_count, (RendererSceneRender::InstanceBase **)instance_cull_result);
|
||||||
|
|
||||||
gi_probe_update_list.remove(gi_probe);
|
gi_probe_update_list.remove(gi_probe);
|
||||||
|
|
||||||
@ -2724,7 +2724,7 @@ void RenderingServerSceneRaster::render_probes() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerSceneRaster::render_particle_colliders() {
|
void RendererSceneCull::render_particle_colliders() {
|
||||||
while (heightfield_particle_colliders_update_list.front()) {
|
while (heightfield_particle_colliders_update_list.front()) {
|
||||||
Instance *hfpc = heightfield_particle_colliders_update_list.front()->get();
|
Instance *hfpc = heightfield_particle_colliders_update_list.front()->get();
|
||||||
|
|
||||||
@ -2739,16 +2739,16 @@ void RenderingServerSceneRaster::render_particle_colliders() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
scene_render->render_particle_collider_heightfield(hfpc->base, hfpc->transform, (RasterizerScene::InstanceBase **)instance_cull_result, cull_count);
|
scene_render->render_particle_collider_heightfield(hfpc->base, hfpc->transform, (RendererSceneRender::InstanceBase **)instance_cull_result, cull_count);
|
||||||
}
|
}
|
||||||
heightfield_particle_colliders_update_list.erase(heightfield_particle_colliders_update_list.front());
|
heightfield_particle_colliders_update_list.erase(heightfield_particle_colliders_update_list.front());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerSceneRaster::_update_instance_shader_parameters_from_material(Map<StringName, RasterizerScene::InstanceBase::InstanceShaderParameter> &isparams, const Map<StringName, RasterizerScene::InstanceBase::InstanceShaderParameter> &existing_isparams, RID p_material) {
|
void RendererSceneCull::_update_instance_shader_parameters_from_material(Map<StringName, RendererSceneRender::InstanceBase::InstanceShaderParameter> &isparams, const Map<StringName, RendererSceneRender::InstanceBase::InstanceShaderParameter> &existing_isparams, RID p_material) {
|
||||||
List<RasterizerStorage::InstanceShaderParam> plist;
|
List<RendererStorage::InstanceShaderParam> plist;
|
||||||
RSG::storage->material_get_instance_shader_parameters(p_material, &plist);
|
RSG::storage->material_get_instance_shader_parameters(p_material, &plist);
|
||||||
for (List<RasterizerStorage::InstanceShaderParam>::Element *E = plist.front(); E; E = E->next()) {
|
for (List<RendererStorage::InstanceShaderParam>::Element *E = plist.front(); E; E = E->next()) {
|
||||||
StringName name = E->get().info.name;
|
StringName name = E->get().info.name;
|
||||||
if (isparams.has(name)) {
|
if (isparams.has(name)) {
|
||||||
if (isparams[name].info.type != E->get().info.type) {
|
if (isparams[name].info.type != E->get().info.type) {
|
||||||
@ -2760,7 +2760,7 @@ void RenderingServerSceneRaster::_update_instance_shader_parameters_from_materia
|
|||||||
continue; //first one found always has priority
|
continue; //first one found always has priority
|
||||||
}
|
}
|
||||||
|
|
||||||
RasterizerScene::InstanceBase::InstanceShaderParameter isp;
|
RendererSceneRender::InstanceBase::InstanceShaderParameter isp;
|
||||||
isp.index = E->get().index;
|
isp.index = E->get().index;
|
||||||
isp.info = E->get().info;
|
isp.info = E->get().info;
|
||||||
isp.default_value = E->get().default_value;
|
isp.default_value = E->get().default_value;
|
||||||
@ -2773,7 +2773,7 @@ void RenderingServerSceneRaster::_update_instance_shader_parameters_from_materia
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerSceneRaster::_update_dirty_instance(Instance *p_instance) {
|
void RendererSceneCull::_update_dirty_instance(Instance *p_instance) {
|
||||||
if (p_instance->update_aabb) {
|
if (p_instance->update_aabb) {
|
||||||
_update_instance_aabb(p_instance);
|
_update_instance_aabb(p_instance);
|
||||||
}
|
}
|
||||||
@ -2809,7 +2809,7 @@ void RenderingServerSceneRaster::_update_dirty_instance(Instance *p_instance) {
|
|||||||
|
|
||||||
bool can_cast_shadows = true;
|
bool can_cast_shadows = true;
|
||||||
bool is_animated = false;
|
bool is_animated = false;
|
||||||
Map<StringName, RasterizerScene::InstanceBase::InstanceShaderParameter> isparams;
|
Map<StringName, RendererSceneRender::InstanceBase::InstanceShaderParameter> isparams;
|
||||||
|
|
||||||
if (p_instance->cast_shadows == RS::SHADOW_CASTING_SETTING_OFF) {
|
if (p_instance->cast_shadows == RS::SHADOW_CASTING_SETTING_OFF) {
|
||||||
can_cast_shadows = false;
|
can_cast_shadows = false;
|
||||||
@ -2960,7 +2960,7 @@ void RenderingServerSceneRaster::_update_dirty_instance(Instance *p_instance) {
|
|||||||
p_instance->instance_allocated_shader_parameters = (p_instance->instance_shader_parameters.size() > 0);
|
p_instance->instance_allocated_shader_parameters = (p_instance->instance_shader_parameters.size() > 0);
|
||||||
if (p_instance->instance_allocated_shader_parameters) {
|
if (p_instance->instance_allocated_shader_parameters) {
|
||||||
p_instance->instance_allocated_shader_parameters_offset = RSG::storage->global_variables_instance_allocate(p_instance->self);
|
p_instance->instance_allocated_shader_parameters_offset = RSG::storage->global_variables_instance_allocate(p_instance->self);
|
||||||
for (Map<StringName, RasterizerScene::InstanceBase::InstanceShaderParameter>::Element *E = p_instance->instance_shader_parameters.front(); E; E = E->next()) {
|
for (Map<StringName, RendererSceneRender::InstanceBase::InstanceShaderParameter>::Element *E = p_instance->instance_shader_parameters.front(); E; E = E->next()) {
|
||||||
if (E->get().value.get_type() != Variant::NIL) {
|
if (E->get().value.get_type() != Variant::NIL) {
|
||||||
RSG::storage->global_variables_instance_update(p_instance->self, E->get().index, E->get().value);
|
RSG::storage->global_variables_instance_update(p_instance->self, E->get().index, E->get().value);
|
||||||
}
|
}
|
||||||
@ -2987,7 +2987,7 @@ void RenderingServerSceneRaster::_update_dirty_instance(Instance *p_instance) {
|
|||||||
p_instance->update_dependencies = false;
|
p_instance->update_dependencies = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerSceneRaster::update_dirty_instances() {
|
void RendererSceneCull::update_dirty_instances() {
|
||||||
RSG::storage->update_dirty_resources();
|
RSG::storage->update_dirty_resources();
|
||||||
|
|
||||||
while (_instance_update_list.first()) {
|
while (_instance_update_list.first()) {
|
||||||
@ -2995,13 +2995,13 @@ void RenderingServerSceneRaster::update_dirty_instances() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerSceneRaster::update() {
|
void RendererSceneCull::update() {
|
||||||
scene_render->update();
|
scene_render->update();
|
||||||
update_dirty_instances();
|
update_dirty_instances();
|
||||||
render_particle_colliders();
|
render_particle_colliders();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool RenderingServerSceneRaster::free(RID p_rid) {
|
bool RendererSceneCull::free(RID p_rid) {
|
||||||
if (scene_render->free(p_rid)) {
|
if (scene_render->free(p_rid)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -3051,7 +3051,7 @@ bool RenderingServerSceneRaster::free(RID p_rid) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
TypedArray<Image> RenderingServerSceneRaster::bake_render_uv2(RID p_base, const Vector<RID> &p_material_overrides, const Size2i &p_image_size) {
|
TypedArray<Image> RendererSceneCull::bake_render_uv2(RID p_base, const Vector<RID> &p_material_overrides, const Size2i &p_image_size) {
|
||||||
return scene_render->bake_render_uv2(p_base, p_material_overrides, p_image_size);
|
return scene_render->bake_render_uv2(p_base, p_material_overrides, p_image_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3061,12 +3061,12 @@ TypedArray<Image> RenderingServerSceneRaster::bake_render_uv2(RID p_base, const
|
|||||||
|
|
||||||
/* ENVIRONMENT API */
|
/* ENVIRONMENT API */
|
||||||
|
|
||||||
RenderingServerSceneRaster *RenderingServerSceneRaster::singleton = nullptr;
|
RendererSceneCull *RendererSceneCull::singleton = nullptr;
|
||||||
|
|
||||||
RenderingServerSceneRaster::RenderingServerSceneRaster() {
|
RendererSceneCull::RendererSceneCull() {
|
||||||
render_pass = 1;
|
render_pass = 1;
|
||||||
singleton = this;
|
singleton = this;
|
||||||
}
|
}
|
||||||
|
|
||||||
RenderingServerSceneRaster::~RenderingServerSceneRaster() {
|
RendererSceneCull::~RendererSceneCull() {
|
||||||
}
|
}
|
@ -1,5 +1,5 @@
|
|||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
/* rendering_server_scene_raster.h */
|
/* renderer_scene_cull.h */
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
/* This file is part of: */
|
/* This file is part of: */
|
||||||
/* GODOT ENGINE */
|
/* GODOT ENGINE */
|
||||||
@ -28,11 +28,11 @@
|
|||||||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
|
|
||||||
#ifndef RENDERING_SERVER_SCENE_RASTER_H
|
#ifndef RENDERING_SERVER_SCENE_CULL_H
|
||||||
#define RENDERING_SERVER_SCENE_RASTER_H
|
#define RENDERING_SERVER_SCENE_CULL_H
|
||||||
|
|
||||||
#include "core/templates/pass_func.h"
|
#include "core/templates/pass_func.h"
|
||||||
#include "servers/rendering/rasterizer.h"
|
#include "servers/rendering/renderer_compositor.h"
|
||||||
|
|
||||||
#include "core/math/geometry_3d.h"
|
#include "core/math/geometry_3d.h"
|
||||||
#include "core/math/octree.h"
|
#include "core/math/octree.h"
|
||||||
@ -41,12 +41,13 @@
|
|||||||
#include "core/templates/local_vector.h"
|
#include "core/templates/local_vector.h"
|
||||||
#include "core/templates/rid_owner.h"
|
#include "core/templates/rid_owner.h"
|
||||||
#include "core/templates/self_list.h"
|
#include "core/templates/self_list.h"
|
||||||
#include "servers/rendering/rendering_server_scene.h"
|
#include "servers/rendering/renderer_scene.h"
|
||||||
|
#include "servers/rendering/renderer_scene_render.h"
|
||||||
#include "servers/xr/xr_interface.h"
|
#include "servers/xr/xr_interface.h"
|
||||||
|
|
||||||
class RenderingServerSceneRaster : public RenderingServerScene {
|
class RendererSceneCull : public RendererScene {
|
||||||
public:
|
public:
|
||||||
RasterizerScene *scene_render;
|
RendererSceneRender *scene_render;
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
MAX_INSTANCE_CULL = 65536,
|
MAX_INSTANCE_CULL = 65536,
|
||||||
@ -61,7 +62,7 @@ public:
|
|||||||
|
|
||||||
uint64_t render_pass;
|
uint64_t render_pass;
|
||||||
|
|
||||||
static RenderingServerSceneRaster *singleton;
|
static RendererSceneCull *singleton;
|
||||||
|
|
||||||
/* CAMERA API */
|
/* CAMERA API */
|
||||||
|
|
||||||
@ -153,7 +154,7 @@ public:
|
|||||||
virtual ~InstanceBaseData() {}
|
virtual ~InstanceBaseData() {}
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Instance : RasterizerScene::InstanceBase {
|
struct Instance : RendererSceneRender::InstanceBase {
|
||||||
RID self;
|
RID self;
|
||||||
//scenario stuff
|
//scenario stuff
|
||||||
OctreeElementID octree_id;
|
OctreeElementID octree_id;
|
||||||
@ -445,7 +446,7 @@ public:
|
|||||||
virtual void instance_geometry_set_as_instance_lod(RID p_instance, RID p_as_lod_of_instance);
|
virtual void instance_geometry_set_as_instance_lod(RID p_instance, RID p_as_lod_of_instance);
|
||||||
virtual void instance_geometry_set_lightmap(RID p_instance, RID p_lightmap, const Rect2 &p_lightmap_uv_scale, int p_slice_index);
|
virtual void instance_geometry_set_lightmap(RID p_instance, RID p_lightmap, const Rect2 &p_lightmap_uv_scale, int p_slice_index);
|
||||||
|
|
||||||
void _update_instance_shader_parameters_from_material(Map<StringName, RasterizerScene::InstanceBase::InstanceShaderParameter> &isparams, const Map<StringName, RasterizerScene::InstanceBase::InstanceShaderParameter> &existing_isparams, RID p_material);
|
void _update_instance_shader_parameters_from_material(Map<StringName, RendererSceneRender::InstanceBase::InstanceShaderParameter> &isparams, const Map<StringName, RendererSceneRender::InstanceBase::InstanceShaderParameter> &existing_isparams, RID p_material);
|
||||||
|
|
||||||
virtual void instance_geometry_set_shader_parameter(RID p_instance, const StringName &p_parameter, const Variant &p_value);
|
virtual void instance_geometry_set_shader_parameter(RID p_instance, const StringName &p_parameter, const Variant &p_value);
|
||||||
virtual void instance_geometry_get_shader_parameter_list(RID p_instance, List<PropertyInfo> *p_parameters) const;
|
virtual void instance_geometry_get_shader_parameter_list(RID p_instance, List<PropertyInfo> *p_parameters) const;
|
||||||
@ -575,8 +576,8 @@ public:
|
|||||||
|
|
||||||
bool free(RID p_rid);
|
bool free(RID p_rid);
|
||||||
|
|
||||||
RenderingServerSceneRaster();
|
RendererSceneCull();
|
||||||
virtual ~RenderingServerSceneRaster();
|
virtual ~RendererSceneCull();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // VISUALSERVERSCENE_H
|
#endif // VISUALSERVERSCENE_H
|
31
servers/rendering/renderer_scene_render.cpp
Normal file
31
servers/rendering/renderer_scene_render.cpp
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
/*************************************************************************/
|
||||||
|
/* renderer_scene_render.cpp */
|
||||||
|
/*************************************************************************/
|
||||||
|
/* This file is part of: */
|
||||||
|
/* GODOT ENGINE */
|
||||||
|
/* https://godotengine.org */
|
||||||
|
/*************************************************************************/
|
||||||
|
/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */
|
||||||
|
/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */
|
||||||
|
/* */
|
||||||
|
/* 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 "renderer_scene_render.h"
|
267
servers/rendering/renderer_scene_render.h
Normal file
267
servers/rendering/renderer_scene_render.h
Normal file
@ -0,0 +1,267 @@
|
|||||||
|
/*************************************************************************/
|
||||||
|
/* renderer_scene_render.h */
|
||||||
|
/*************************************************************************/
|
||||||
|
/* This file is part of: */
|
||||||
|
/* GODOT ENGINE */
|
||||||
|
/* https://godotengine.org */
|
||||||
|
/*************************************************************************/
|
||||||
|
/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */
|
||||||
|
/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */
|
||||||
|
/* */
|
||||||
|
/* 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. */
|
||||||
|
/*************************************************************************/
|
||||||
|
|
||||||
|
#ifndef RENDERINGSERVERSCENERENDER_H
|
||||||
|
#define RENDERINGSERVERSCENERENDER_H
|
||||||
|
|
||||||
|
#include "core/math/camera_matrix.h"
|
||||||
|
#include "servers/rendering/renderer_storage.h"
|
||||||
|
|
||||||
|
class RendererSceneRender {
|
||||||
|
public:
|
||||||
|
/* SHADOW ATLAS API */
|
||||||
|
|
||||||
|
virtual RID shadow_atlas_create() = 0;
|
||||||
|
virtual void shadow_atlas_set_size(RID p_atlas, int p_size) = 0;
|
||||||
|
virtual void shadow_atlas_set_quadrant_subdivision(RID p_atlas, int p_quadrant, int p_subdivision) = 0;
|
||||||
|
virtual bool shadow_atlas_update_light(RID p_atlas, RID p_light_intance, float p_coverage, uint64_t p_light_version) = 0;
|
||||||
|
|
||||||
|
virtual void directional_shadow_atlas_set_size(int p_size) = 0;
|
||||||
|
virtual int get_directional_light_shadow_size(RID p_light_intance) = 0;
|
||||||
|
virtual void set_directional_shadow_count(int p_count) = 0;
|
||||||
|
|
||||||
|
/* SDFGI UPDATE */
|
||||||
|
|
||||||
|
struct InstanceBase;
|
||||||
|
|
||||||
|
virtual void sdfgi_update(RID p_render_buffers, RID p_environment, const Vector3 &p_world_position) = 0;
|
||||||
|
virtual int sdfgi_get_pending_region_count(RID p_render_buffers) const = 0;
|
||||||
|
virtual AABB sdfgi_get_pending_region_bounds(RID p_render_buffers, int p_region) const = 0;
|
||||||
|
virtual uint32_t sdfgi_get_pending_region_cascade(RID p_render_buffers, int p_region) const = 0;
|
||||||
|
virtual void sdfgi_update_probes(RID p_render_buffers, RID p_environment, const RID *p_directional_light_instances, uint32_t p_directional_light_count, const RID *p_positional_light_instances, uint32_t p_positional_light_count) = 0;
|
||||||
|
|
||||||
|
/* SKY API */
|
||||||
|
|
||||||
|
virtual RID sky_create() = 0;
|
||||||
|
virtual void sky_set_radiance_size(RID p_sky, int p_radiance_size) = 0;
|
||||||
|
virtual void sky_set_mode(RID p_sky, RS::SkyMode p_samples) = 0;
|
||||||
|
virtual void sky_set_material(RID p_sky, RID p_material) = 0;
|
||||||
|
virtual Ref<Image> sky_bake_panorama(RID p_sky, float p_energy, bool p_bake_irradiance, const Size2i &p_size) = 0;
|
||||||
|
|
||||||
|
/* ENVIRONMENT API */
|
||||||
|
|
||||||
|
virtual RID environment_create() = 0;
|
||||||
|
|
||||||
|
virtual void environment_set_background(RID p_env, RS::EnvironmentBG p_bg) = 0;
|
||||||
|
virtual void environment_set_sky(RID p_env, RID p_sky) = 0;
|
||||||
|
virtual void environment_set_sky_custom_fov(RID p_env, float p_scale) = 0;
|
||||||
|
virtual void environment_set_sky_orientation(RID p_env, const Basis &p_orientation) = 0;
|
||||||
|
virtual void environment_set_bg_color(RID p_env, const Color &p_color) = 0;
|
||||||
|
virtual void environment_set_bg_energy(RID p_env, float p_energy) = 0;
|
||||||
|
virtual void environment_set_canvas_max_layer(RID p_env, int p_max_layer) = 0;
|
||||||
|
virtual void environment_set_ambient_light(RID p_env, const Color &p_color, RS::EnvironmentAmbientSource p_ambient = RS::ENV_AMBIENT_SOURCE_BG, float p_energy = 1.0, float p_sky_contribution = 0.0, RS::EnvironmentReflectionSource p_reflection_source = RS::ENV_REFLECTION_SOURCE_BG, const Color &p_ao_color = Color()) = 0;
|
||||||
|
// FIXME: Disabled during Vulkan refactoring, should be ported.
|
||||||
|
#if 0
|
||||||
|
virtual void environment_set_camera_feed_id(RID p_env, int p_camera_feed_id) = 0;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
virtual void environment_set_glow(RID p_env, bool p_enable, Vector<float> p_levels, float p_intensity, float p_strength, float p_mix, float p_bloom_threshold, RS::EnvironmentGlowBlendMode p_blend_mode, float p_hdr_bleed_threshold, float p_hdr_bleed_scale, float p_hdr_luminance_cap) = 0;
|
||||||
|
virtual void environment_glow_set_use_bicubic_upscale(bool p_enable) = 0;
|
||||||
|
virtual void environment_glow_set_use_high_quality(bool p_enable) = 0;
|
||||||
|
|
||||||
|
virtual void environment_set_volumetric_fog(RID p_env, bool p_enable, float p_density, const Color &p_light, float p_light_energy, float p_length, float p_detail_spread, float p_gi_inject, RS::EnvVolumetricFogShadowFilter p_shadow_filter) = 0;
|
||||||
|
|
||||||
|
virtual void environment_set_volumetric_fog_volume_size(int p_size, int p_depth) = 0;
|
||||||
|
virtual void environment_set_volumetric_fog_filter_active(bool p_enable) = 0;
|
||||||
|
virtual void environment_set_volumetric_fog_directional_shadow_shrink_size(int p_shrink_size) = 0;
|
||||||
|
virtual void environment_set_volumetric_fog_positional_shadow_shrink_size(int p_shrink_size) = 0;
|
||||||
|
|
||||||
|
virtual void environment_set_ssr(RID p_env, bool p_enable, int p_max_steps, float p_fade_int, float p_fade_out, float p_depth_tolerance) = 0;
|
||||||
|
virtual void environment_set_ssr_roughness_quality(RS::EnvironmentSSRRoughnessQuality p_quality) = 0;
|
||||||
|
|
||||||
|
virtual void environment_set_ssao(RID p_env, bool p_enable, float p_radius, float p_intensity, float p_bias, float p_light_affect, float p_ao_channel_affect, RS::EnvironmentSSAOBlur p_blur, float p_bilateral_sharpness) = 0;
|
||||||
|
|
||||||
|
virtual void environment_set_ssao_quality(RS::EnvironmentSSAOQuality p_quality, bool p_half_size) = 0;
|
||||||
|
|
||||||
|
virtual void environment_set_sdfgi(RID p_env, bool p_enable, RS::EnvironmentSDFGICascades p_cascades, float p_min_cell_size, RS::EnvironmentSDFGIYScale p_y_scale, bool p_use_occlusion, bool p_use_multibounce, bool p_read_sky, float p_energy, float p_normal_bias, float p_probe_bias) = 0;
|
||||||
|
|
||||||
|
virtual void environment_set_sdfgi_ray_count(RS::EnvironmentSDFGIRayCount p_ray_count) = 0;
|
||||||
|
virtual void environment_set_sdfgi_frames_to_converge(RS::EnvironmentSDFGIFramesToConverge p_frames) = 0;
|
||||||
|
|
||||||
|
virtual void environment_set_tonemap(RID p_env, RS::EnvironmentToneMapper p_tone_mapper, float p_exposure, float p_white, bool p_auto_exposure, float p_min_luminance, float p_max_luminance, float p_auto_exp_speed, float p_auto_exp_scale) = 0;
|
||||||
|
|
||||||
|
virtual void environment_set_adjustment(RID p_env, bool p_enable, float p_brightness, float p_contrast, float p_saturation, bool p_use_1d_color_correction, RID p_color_correction) = 0;
|
||||||
|
|
||||||
|
virtual void environment_set_fog(RID p_env, bool p_enable, const Color &p_light_color, float p_light_energy, float p_sun_scatter, float p_density, float p_height, float p_height_density, float p_aerial_perspective) = 0;
|
||||||
|
|
||||||
|
virtual Ref<Image> environment_bake_panorama(RID p_env, bool p_bake_irradiance, const Size2i &p_size) = 0;
|
||||||
|
|
||||||
|
virtual bool is_environment(RID p_env) const = 0;
|
||||||
|
virtual RS::EnvironmentBG environment_get_background(RID p_env) const = 0;
|
||||||
|
virtual int environment_get_canvas_max_layer(RID p_env) const = 0;
|
||||||
|
|
||||||
|
virtual RID camera_effects_create() = 0;
|
||||||
|
|
||||||
|
virtual void camera_effects_set_dof_blur_quality(RS::DOFBlurQuality p_quality, bool p_use_jitter) = 0;
|
||||||
|
virtual void camera_effects_set_dof_blur_bokeh_shape(RS::DOFBokehShape p_shape) = 0;
|
||||||
|
|
||||||
|
virtual void camera_effects_set_dof_blur(RID p_camera_effects, bool p_far_enable, float p_far_distance, float p_far_transition, bool p_near_enable, float p_near_distance, float p_near_transition, float p_amount) = 0;
|
||||||
|
virtual void camera_effects_set_custom_exposure(RID p_camera_effects, bool p_enable, float p_exposure) = 0;
|
||||||
|
|
||||||
|
virtual void shadows_quality_set(RS::ShadowQuality p_quality) = 0;
|
||||||
|
virtual void directional_shadow_quality_set(RS::ShadowQuality p_quality) = 0;
|
||||||
|
|
||||||
|
struct InstanceBase : public RendererStorage::InstanceBaseDependency {
|
||||||
|
RS::InstanceType base_type;
|
||||||
|
RID base;
|
||||||
|
|
||||||
|
RID skeleton;
|
||||||
|
RID material_override;
|
||||||
|
|
||||||
|
RID instance_data;
|
||||||
|
|
||||||
|
Transform transform;
|
||||||
|
|
||||||
|
int depth_layer;
|
||||||
|
uint32_t layer_mask;
|
||||||
|
|
||||||
|
//RID sampled_light;
|
||||||
|
|
||||||
|
Vector<RID> materials;
|
||||||
|
Vector<RID> light_instances;
|
||||||
|
Vector<RID> reflection_probe_instances;
|
||||||
|
Vector<RID> gi_probe_instances;
|
||||||
|
|
||||||
|
Vector<float> blend_values;
|
||||||
|
|
||||||
|
RS::ShadowCastingSetting cast_shadows;
|
||||||
|
|
||||||
|
//fit in 32 bits
|
||||||
|
bool mirror : 8;
|
||||||
|
bool receive_shadows : 8;
|
||||||
|
bool visible : 8;
|
||||||
|
bool baked_light : 2; //this flag is only to know if it actually did use baked light
|
||||||
|
bool dynamic_gi : 2; //this flag is only to know if it actually did use baked light
|
||||||
|
bool redraw_if_visible : 4;
|
||||||
|
|
||||||
|
float depth; //used for sorting
|
||||||
|
|
||||||
|
InstanceBase *lightmap;
|
||||||
|
Rect2 lightmap_uv_scale;
|
||||||
|
int lightmap_slice_index;
|
||||||
|
uint32_t lightmap_cull_index;
|
||||||
|
Vector<Color> lightmap_sh; //spherical harmonic
|
||||||
|
|
||||||
|
AABB aabb;
|
||||||
|
AABB transformed_aabb;
|
||||||
|
|
||||||
|
struct InstanceShaderParameter {
|
||||||
|
int32_t index = -1;
|
||||||
|
Variant value;
|
||||||
|
Variant default_value;
|
||||||
|
PropertyInfo info;
|
||||||
|
};
|
||||||
|
|
||||||
|
Map<StringName, InstanceShaderParameter> instance_shader_parameters;
|
||||||
|
bool instance_allocated_shader_parameters = false;
|
||||||
|
int32_t instance_allocated_shader_parameters_offset = -1;
|
||||||
|
|
||||||
|
InstanceBase() {
|
||||||
|
base_type = RS::INSTANCE_NONE;
|
||||||
|
cast_shadows = RS::SHADOW_CASTING_SETTING_ON;
|
||||||
|
receive_shadows = true;
|
||||||
|
visible = true;
|
||||||
|
depth_layer = 0;
|
||||||
|
layer_mask = 1;
|
||||||
|
instance_version = 0;
|
||||||
|
baked_light = false;
|
||||||
|
dynamic_gi = false;
|
||||||
|
redraw_if_visible = false;
|
||||||
|
lightmap_slice_index = 0;
|
||||||
|
lightmap = nullptr;
|
||||||
|
lightmap_cull_index = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual ~InstanceBase() {
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
virtual RID light_instance_create(RID p_light) = 0;
|
||||||
|
virtual void light_instance_set_transform(RID p_light_instance, const Transform &p_transform) = 0;
|
||||||
|
virtual void light_instance_set_aabb(RID p_light_instance, const AABB &p_aabb) = 0;
|
||||||
|
virtual void light_instance_set_shadow_transform(RID p_light_instance, const CameraMatrix &p_projection, const Transform &p_transform, float p_far, float p_split, int p_pass, float p_shadow_texel_size, float p_bias_scale = 1.0, float p_range_begin = 0, const Vector2 &p_uv_scale = Vector2()) = 0;
|
||||||
|
virtual void light_instance_mark_visible(RID p_light_instance) = 0;
|
||||||
|
virtual bool light_instances_can_render_shadow_cube() const {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual RID reflection_atlas_create() = 0;
|
||||||
|
virtual void reflection_atlas_set_size(RID p_ref_atlas, int p_reflection_size, int p_reflection_count) = 0;
|
||||||
|
|
||||||
|
virtual RID reflection_probe_instance_create(RID p_probe) = 0;
|
||||||
|
virtual void reflection_probe_instance_set_transform(RID p_instance, const Transform &p_transform) = 0;
|
||||||
|
virtual void reflection_probe_release_atlas_index(RID p_instance) = 0;
|
||||||
|
virtual bool reflection_probe_instance_needs_redraw(RID p_instance) = 0;
|
||||||
|
virtual bool reflection_probe_instance_has_reflection(RID p_instance) = 0;
|
||||||
|
virtual bool reflection_probe_instance_begin_render(RID p_instance, RID p_reflection_atlas) = 0;
|
||||||
|
virtual bool reflection_probe_instance_postprocess_step(RID p_instance) = 0;
|
||||||
|
|
||||||
|
virtual RID decal_instance_create(RID p_decal) = 0;
|
||||||
|
virtual void decal_instance_set_transform(RID p_decal, const Transform &p_transform) = 0;
|
||||||
|
|
||||||
|
virtual RID gi_probe_instance_create(RID p_gi_probe) = 0;
|
||||||
|
virtual void gi_probe_instance_set_transform_to_data(RID p_probe, const Transform &p_xform) = 0;
|
||||||
|
virtual bool gi_probe_needs_update(RID p_probe) const = 0;
|
||||||
|
virtual void gi_probe_update(RID p_probe, bool p_update_light_instances, const Vector<RID> &p_light_instances, int p_dynamic_object_count, InstanceBase **p_dynamic_objects) = 0;
|
||||||
|
|
||||||
|
virtual void gi_probe_set_quality(RS::GIProbeQuality) = 0;
|
||||||
|
|
||||||
|
virtual void render_scene(RID p_render_buffers, const Transform &p_cam_transform, const CameraMatrix &p_cam_projection, bool p_cam_ortogonal, InstanceBase **p_cull_result, int p_cull_count, RID *p_light_cull_result, int p_light_cull_count, RID *p_reflection_probe_cull_result, int p_reflection_probe_cull_count, RID *p_gi_probe_cull_result, int p_gi_probe_cull_count, RID *p_decal_cull_result, int p_decal_cull_count, InstanceBase **p_lightmap_cull_result, int p_lightmap_cull_count, RID p_environment, RID p_camera_effects, RID p_shadow_atlas, RID p_reflection_atlas, RID p_reflection_probe, int p_reflection_probe_pass) = 0;
|
||||||
|
|
||||||
|
virtual void render_shadow(RID p_light, RID p_shadow_atlas, int p_pass, InstanceBase **p_cull_result, int p_cull_count) = 0;
|
||||||
|
virtual void render_material(const Transform &p_cam_transform, const CameraMatrix &p_cam_projection, bool p_cam_ortogonal, InstanceBase **p_cull_result, int p_cull_count, RID p_framebuffer, const Rect2i &p_region) = 0;
|
||||||
|
virtual void render_sdfgi(RID p_render_buffers, int p_region, InstanceBase **p_cull_result, int p_cull_count) = 0;
|
||||||
|
virtual void render_sdfgi_static_lights(RID p_render_buffers, uint32_t p_cascade_count, const uint32_t *p_cascade_indices, const RID **p_positional_light_cull_result, const uint32_t *p_positional_light_cull_count) = 0;
|
||||||
|
virtual void render_particle_collider_heightfield(RID p_collider, const Transform &p_transform, InstanceBase **p_cull_result, int p_cull_count) = 0;
|
||||||
|
|
||||||
|
virtual void set_scene_pass(uint64_t p_pass) = 0;
|
||||||
|
virtual void set_time(double p_time, double p_step) = 0;
|
||||||
|
virtual void set_debug_draw_mode(RS::ViewportDebugDraw p_debug_draw) = 0;
|
||||||
|
|
||||||
|
virtual RID render_buffers_create() = 0;
|
||||||
|
virtual void render_buffers_configure(RID p_render_buffers, RID p_render_target, int p_width, int p_height, RS::ViewportMSAA p_msaa, RS::ViewportScreenSpaceAA p_screen_space_aa, bool p_use_debanding) = 0;
|
||||||
|
|
||||||
|
virtual void screen_space_roughness_limiter_set_active(bool p_enable, float p_amount, float p_limit) = 0;
|
||||||
|
virtual bool screen_space_roughness_limiter_is_active() const = 0;
|
||||||
|
|
||||||
|
virtual void sub_surface_scattering_set_quality(RS::SubSurfaceScatteringQuality p_quality) = 0;
|
||||||
|
virtual void sub_surface_scattering_set_scale(float p_scale, float p_depth_scale) = 0;
|
||||||
|
|
||||||
|
virtual TypedArray<Image> bake_render_uv2(RID p_base, const Vector<RID> &p_material_overrides, const Size2i &p_image_size) = 0;
|
||||||
|
|
||||||
|
virtual bool free(RID p_rid) = 0;
|
||||||
|
|
||||||
|
virtual void sdfgi_set_debug_probe_select(const Vector3 &p_position, const Vector3 &p_dir) = 0;
|
||||||
|
|
||||||
|
virtual void update() = 0;
|
||||||
|
virtual ~RendererSceneRender() {}
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // RENDERINGSERVERSCENERENDER_H
|
@ -1,5 +1,5 @@
|
|||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
/* rasterizer.cpp */
|
/* renderer_storage.cpp */
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
/* This file is part of: */
|
/* This file is part of: */
|
||||||
/* GODOT ENGINE */
|
/* GODOT ENGINE */
|
||||||
@ -28,49 +28,38 @@
|
|||||||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
|
|
||||||
#include "rasterizer.h"
|
#include "renderer_storage.h"
|
||||||
|
|
||||||
#include "core/os/os.h"
|
RendererStorage *RendererStorage::base_singleton = nullptr;
|
||||||
#include "core/string/print_string.h"
|
|
||||||
|
|
||||||
Rasterizer *(*Rasterizer::_create_func)() = nullptr;
|
void RendererStorage::InstanceDependency::instance_notify_changed(bool p_aabb, bool p_dependencies) {
|
||||||
|
for (Map<InstanceBaseDependency *, uint32_t>::Element *E = instances.front(); E; E = E->next()) {
|
||||||
void RasterizerScene::InstanceDependency::instance_notify_changed(bool p_aabb, bool p_dependencies) {
|
|
||||||
for (Map<InstanceBase *, uint32_t>::Element *E = instances.front(); E; E = E->next()) {
|
|
||||||
E->key()->dependency_changed(p_aabb, p_dependencies);
|
E->key()->dependency_changed(p_aabb, p_dependencies);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerScene::InstanceDependency::instance_notify_deleted(RID p_deleted) {
|
void RendererStorage::InstanceDependency::instance_notify_deleted(RID p_deleted) {
|
||||||
for (Map<InstanceBase *, uint32_t>::Element *E = instances.front(); E; E = E->next()) {
|
for (Map<InstanceBaseDependency *, uint32_t>::Element *E = instances.front(); E; E = E->next()) {
|
||||||
E->key()->dependency_deleted(p_deleted);
|
E->key()->dependency_deleted(p_deleted);
|
||||||
}
|
}
|
||||||
for (Map<InstanceBase *, uint32_t>::Element *E = instances.front(); E; E = E->next()) {
|
for (Map<InstanceBaseDependency *, uint32_t>::Element *E = instances.front(); E; E = E->next()) {
|
||||||
E->key()->dependencies.erase(this);
|
E->key()->dependencies.erase(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
instances.clear();
|
instances.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
RasterizerScene::InstanceDependency::~InstanceDependency() {
|
RendererStorage::InstanceDependency::~InstanceDependency() {
|
||||||
#ifdef DEBUG_ENABLED
|
#ifdef DEBUG_ENABLED
|
||||||
if (instances.size()) {
|
if (instances.size()) {
|
||||||
WARN_PRINT("Leaked instance dependency: Bug - did not call instance_notify_deleted when freeing.");
|
WARN_PRINT("Leaked instance dependency: Bug - did not call instance_notify_deleted when freeing.");
|
||||||
for (Map<InstanceBase *, uint32_t>::Element *E = instances.front(); E; E = E->next()) {
|
for (Map<InstanceBaseDependency *, uint32_t>::Element *E = instances.front(); E; E = E->next()) {
|
||||||
E->key()->dependencies.erase(this);
|
E->key()->dependencies.erase(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
Rasterizer *Rasterizer::create() {
|
RendererStorage::RendererStorage() {
|
||||||
return _create_func();
|
|
||||||
}
|
|
||||||
|
|
||||||
RasterizerCanvas *RasterizerCanvas::singleton = nullptr;
|
|
||||||
|
|
||||||
RasterizerStorage *RasterizerStorage::base_singleton = nullptr;
|
|
||||||
|
|
||||||
RasterizerStorage::RasterizerStorage() {
|
|
||||||
base_singleton = this;
|
base_singleton = this;
|
||||||
}
|
}
|
581
servers/rendering/renderer_storage.h
Normal file
581
servers/rendering/renderer_storage.h
Normal file
@ -0,0 +1,581 @@
|
|||||||
|
/*************************************************************************/
|
||||||
|
/* renderer_storage.h */
|
||||||
|
/*************************************************************************/
|
||||||
|
/* This file is part of: */
|
||||||
|
/* GODOT ENGINE */
|
||||||
|
/* https://godotengine.org */
|
||||||
|
/*************************************************************************/
|
||||||
|
/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */
|
||||||
|
/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */
|
||||||
|
/* */
|
||||||
|
/* 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. */
|
||||||
|
/*************************************************************************/
|
||||||
|
|
||||||
|
#ifndef RENDERINGSERVERSTORAGE_H
|
||||||
|
#define RENDERINGSERVERSTORAGE_H
|
||||||
|
|
||||||
|
#include "servers/rendering_server.h"
|
||||||
|
|
||||||
|
class RendererStorage {
|
||||||
|
Color default_clear_color;
|
||||||
|
|
||||||
|
public:
|
||||||
|
struct InstanceBaseDependency;
|
||||||
|
|
||||||
|
struct InstanceDependency {
|
||||||
|
void instance_notify_changed(bool p_aabb, bool p_dependencies);
|
||||||
|
void instance_notify_deleted(RID p_deleted);
|
||||||
|
|
||||||
|
~InstanceDependency();
|
||||||
|
|
||||||
|
private:
|
||||||
|
friend struct InstanceBaseDependency;
|
||||||
|
Map<InstanceBaseDependency *, uint32_t> instances;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct InstanceBaseDependency {
|
||||||
|
uint32_t instance_version;
|
||||||
|
Set<InstanceDependency *> dependencies;
|
||||||
|
|
||||||
|
virtual void dependency_deleted(RID p_dependency) {}
|
||||||
|
virtual void dependency_changed(bool p_aabb, bool p_dependencies) {}
|
||||||
|
|
||||||
|
void instance_increase_version() {
|
||||||
|
instance_version++;
|
||||||
|
}
|
||||||
|
|
||||||
|
void update_dependency(InstanceDependency *p_dependency) {
|
||||||
|
dependencies.insert(p_dependency);
|
||||||
|
p_dependency->instances[this] = instance_version;
|
||||||
|
}
|
||||||
|
|
||||||
|
void clean_up_dependencies() {
|
||||||
|
List<Pair<InstanceDependency *, Map<InstanceBaseDependency *, uint32_t>::Element *>> to_clean_up;
|
||||||
|
for (Set<InstanceDependency *>::Element *E = dependencies.front(); E; E = E->next()) {
|
||||||
|
InstanceDependency *dep = E->get();
|
||||||
|
Map<InstanceBaseDependency *, uint32_t>::Element *F = dep->instances.find(this);
|
||||||
|
ERR_CONTINUE(!F);
|
||||||
|
if (F->get() != instance_version) {
|
||||||
|
Pair<InstanceDependency *, Map<InstanceBaseDependency *, uint32_t>::Element *> p;
|
||||||
|
p.first = dep;
|
||||||
|
p.second = F;
|
||||||
|
to_clean_up.push_back(p);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
while (to_clean_up.size()) {
|
||||||
|
to_clean_up.front()->get().first->instances.erase(to_clean_up.front()->get().second);
|
||||||
|
to_clean_up.pop_front();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void clear_dependencies() {
|
||||||
|
for (Set<InstanceDependency *>::Element *E = dependencies.front(); E; E = E->next()) {
|
||||||
|
InstanceDependency *dep = E->get();
|
||||||
|
dep->instances.erase(this);
|
||||||
|
}
|
||||||
|
dependencies.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual ~InstanceBaseDependency() { clear_dependencies(); }
|
||||||
|
};
|
||||||
|
|
||||||
|
/* TEXTURE API */
|
||||||
|
|
||||||
|
virtual RID texture_2d_create(const Ref<Image> &p_image) = 0;
|
||||||
|
virtual RID texture_2d_layered_create(const Vector<Ref<Image>> &p_layers, RS::TextureLayeredType p_layered_type) = 0;
|
||||||
|
virtual RID texture_3d_create(Image::Format, int p_width, int p_height, int p_depth, bool p_mipmaps, const Vector<Ref<Image>> &p_data) = 0;
|
||||||
|
virtual RID texture_proxy_create(RID p_base) = 0; //all slices, then all the mipmaps, must be coherent
|
||||||
|
|
||||||
|
virtual void texture_2d_update_immediate(RID p_texture, const Ref<Image> &p_image, int p_layer = 0) = 0; //mostly used for video and streaming
|
||||||
|
virtual void texture_2d_update(RID p_texture, const Ref<Image> &p_image, int p_layer = 0) = 0;
|
||||||
|
virtual void texture_3d_update(RID p_texture, const Vector<Ref<Image>> &p_data) = 0;
|
||||||
|
virtual void texture_proxy_update(RID p_proxy, RID p_base) = 0;
|
||||||
|
|
||||||
|
//these two APIs can be used together or in combination with the others.
|
||||||
|
virtual RID texture_2d_placeholder_create() = 0;
|
||||||
|
virtual RID texture_2d_layered_placeholder_create(RenderingServer::TextureLayeredType p_layered_type) = 0;
|
||||||
|
virtual RID texture_3d_placeholder_create() = 0;
|
||||||
|
|
||||||
|
virtual Ref<Image> texture_2d_get(RID p_texture) const = 0;
|
||||||
|
virtual Ref<Image> texture_2d_layer_get(RID p_texture, int p_layer) const = 0;
|
||||||
|
virtual Vector<Ref<Image>> texture_3d_get(RID p_texture) const = 0;
|
||||||
|
|
||||||
|
virtual void texture_replace(RID p_texture, RID p_by_texture) = 0;
|
||||||
|
virtual void texture_set_size_override(RID p_texture, int p_width, int p_height) = 0;
|
||||||
|
|
||||||
|
virtual void texture_set_path(RID p_texture, const String &p_path) = 0;
|
||||||
|
virtual String texture_get_path(RID p_texture) const = 0;
|
||||||
|
|
||||||
|
virtual void texture_set_detect_3d_callback(RID p_texture, RS::TextureDetectCallback p_callback, void *p_userdata) = 0;
|
||||||
|
virtual void texture_set_detect_normal_callback(RID p_texture, RS::TextureDetectCallback p_callback, void *p_userdata) = 0;
|
||||||
|
virtual void texture_set_detect_roughness_callback(RID p_texture, RS::TextureDetectRoughnessCallback p_callback, void *p_userdata) = 0;
|
||||||
|
|
||||||
|
virtual void texture_debug_usage(List<RS::TextureInfo> *r_info) = 0;
|
||||||
|
|
||||||
|
virtual void texture_set_force_redraw_if_visible(RID p_texture, bool p_enable) = 0;
|
||||||
|
|
||||||
|
virtual Size2 texture_size_with_proxy(RID p_proxy) = 0;
|
||||||
|
|
||||||
|
virtual void texture_add_to_decal_atlas(RID p_texture, bool p_panorama_to_dp = false) = 0;
|
||||||
|
virtual void texture_remove_from_decal_atlas(RID p_texture, bool p_panorama_to_dp = false) = 0;
|
||||||
|
|
||||||
|
/* CANVAS TEXTURE API */
|
||||||
|
|
||||||
|
virtual RID canvas_texture_create() = 0;
|
||||||
|
virtual void canvas_texture_set_channel(RID p_canvas_texture, RS::CanvasTextureChannel p_channel, RID p_texture) = 0;
|
||||||
|
virtual void canvas_texture_set_shading_parameters(RID p_canvas_texture, const Color &p_base_color, float p_shininess) = 0;
|
||||||
|
|
||||||
|
virtual void canvas_texture_set_texture_filter(RID p_item, RS::CanvasItemTextureFilter p_filter) = 0;
|
||||||
|
virtual void canvas_texture_set_texture_repeat(RID p_item, RS::CanvasItemTextureRepeat p_repeat) = 0;
|
||||||
|
|
||||||
|
/* SHADER API */
|
||||||
|
|
||||||
|
virtual RID shader_create() = 0;
|
||||||
|
|
||||||
|
virtual void shader_set_code(RID p_shader, const String &p_code) = 0;
|
||||||
|
virtual String shader_get_code(RID p_shader) const = 0;
|
||||||
|
virtual void shader_get_param_list(RID p_shader, List<PropertyInfo> *p_param_list) const = 0;
|
||||||
|
|
||||||
|
virtual void shader_set_default_texture_param(RID p_shader, const StringName &p_name, RID p_texture) = 0;
|
||||||
|
virtual RID shader_get_default_texture_param(RID p_shader, const StringName &p_name) const = 0;
|
||||||
|
virtual Variant shader_get_param_default(RID p_material, const StringName &p_param) const = 0;
|
||||||
|
|
||||||
|
/* COMMON MATERIAL API */
|
||||||
|
|
||||||
|
virtual RID material_create() = 0;
|
||||||
|
|
||||||
|
virtual void material_set_render_priority(RID p_material, int priority) = 0;
|
||||||
|
virtual void material_set_shader(RID p_shader_material, RID p_shader) = 0;
|
||||||
|
|
||||||
|
virtual void material_set_param(RID p_material, const StringName &p_param, const Variant &p_value) = 0;
|
||||||
|
virtual Variant material_get_param(RID p_material, const StringName &p_param) const = 0;
|
||||||
|
|
||||||
|
virtual void material_set_next_pass(RID p_material, RID p_next_material) = 0;
|
||||||
|
|
||||||
|
virtual bool material_is_animated(RID p_material) = 0;
|
||||||
|
virtual bool material_casts_shadows(RID p_material) = 0;
|
||||||
|
|
||||||
|
struct InstanceShaderParam {
|
||||||
|
PropertyInfo info;
|
||||||
|
int index;
|
||||||
|
Variant default_value;
|
||||||
|
};
|
||||||
|
|
||||||
|
virtual void material_get_instance_shader_parameters(RID p_material, List<InstanceShaderParam> *r_parameters) = 0;
|
||||||
|
|
||||||
|
virtual void material_update_dependency(RID p_material, InstanceBaseDependency *p_instance) = 0;
|
||||||
|
|
||||||
|
/* MESH API */
|
||||||
|
|
||||||
|
virtual RID mesh_create() = 0;
|
||||||
|
|
||||||
|
/// Returns stride
|
||||||
|
virtual void mesh_add_surface(RID p_mesh, const RS::SurfaceData &p_surface) = 0;
|
||||||
|
|
||||||
|
virtual int mesh_get_blend_shape_count(RID p_mesh) const = 0;
|
||||||
|
|
||||||
|
virtual void mesh_set_blend_shape_mode(RID p_mesh, RS::BlendShapeMode p_mode) = 0;
|
||||||
|
virtual RS::BlendShapeMode mesh_get_blend_shape_mode(RID p_mesh) const = 0;
|
||||||
|
|
||||||
|
virtual void mesh_surface_update_region(RID p_mesh, int p_surface, int p_offset, const Vector<uint8_t> &p_data) = 0;
|
||||||
|
|
||||||
|
virtual void mesh_surface_set_material(RID p_mesh, int p_surface, RID p_material) = 0;
|
||||||
|
virtual RID mesh_surface_get_material(RID p_mesh, int p_surface) const = 0;
|
||||||
|
|
||||||
|
virtual RS::SurfaceData mesh_get_surface(RID p_mesh, int p_surface) const = 0;
|
||||||
|
|
||||||
|
virtual int mesh_get_surface_count(RID p_mesh) const = 0;
|
||||||
|
|
||||||
|
virtual void mesh_set_custom_aabb(RID p_mesh, const AABB &p_aabb) = 0;
|
||||||
|
virtual AABB mesh_get_custom_aabb(RID p_mesh) const = 0;
|
||||||
|
|
||||||
|
virtual AABB mesh_get_aabb(RID p_mesh, RID p_skeleton = RID()) = 0;
|
||||||
|
|
||||||
|
virtual void mesh_clear(RID p_mesh) = 0;
|
||||||
|
|
||||||
|
/* MULTIMESH API */
|
||||||
|
|
||||||
|
virtual RID multimesh_create() = 0;
|
||||||
|
|
||||||
|
virtual void multimesh_allocate(RID p_multimesh, int p_instances, RS::MultimeshTransformFormat p_transform_format, bool p_use_colors = false, bool p_use_custom_data = false) = 0;
|
||||||
|
|
||||||
|
virtual int multimesh_get_instance_count(RID p_multimesh) const = 0;
|
||||||
|
|
||||||
|
virtual void multimesh_set_mesh(RID p_multimesh, RID p_mesh) = 0;
|
||||||
|
virtual void multimesh_instance_set_transform(RID p_multimesh, int p_index, const Transform &p_transform) = 0;
|
||||||
|
virtual void multimesh_instance_set_transform_2d(RID p_multimesh, int p_index, const Transform2D &p_transform) = 0;
|
||||||
|
virtual void multimesh_instance_set_color(RID p_multimesh, int p_index, const Color &p_color) = 0;
|
||||||
|
virtual void multimesh_instance_set_custom_data(RID p_multimesh, int p_index, const Color &p_color) = 0;
|
||||||
|
|
||||||
|
virtual RID multimesh_get_mesh(RID p_multimesh) const = 0;
|
||||||
|
|
||||||
|
virtual Transform multimesh_instance_get_transform(RID p_multimesh, int p_index) const = 0;
|
||||||
|
virtual Transform2D multimesh_instance_get_transform_2d(RID p_multimesh, int p_index) const = 0;
|
||||||
|
virtual Color multimesh_instance_get_color(RID p_multimesh, int p_index) const = 0;
|
||||||
|
virtual Color multimesh_instance_get_custom_data(RID p_multimesh, int p_index) const = 0;
|
||||||
|
|
||||||
|
virtual void multimesh_set_buffer(RID p_multimesh, const Vector<float> &p_buffer) = 0;
|
||||||
|
virtual Vector<float> multimesh_get_buffer(RID p_multimesh) const = 0;
|
||||||
|
|
||||||
|
virtual void multimesh_set_visible_instances(RID p_multimesh, int p_visible) = 0;
|
||||||
|
virtual int multimesh_get_visible_instances(RID p_multimesh) const = 0;
|
||||||
|
|
||||||
|
virtual AABB multimesh_get_aabb(RID p_multimesh) const = 0;
|
||||||
|
|
||||||
|
/* IMMEDIATE API */
|
||||||
|
|
||||||
|
virtual RID immediate_create() = 0;
|
||||||
|
virtual void immediate_begin(RID p_immediate, RS::PrimitiveType p_rimitive, RID p_texture = RID()) = 0;
|
||||||
|
virtual void immediate_vertex(RID p_immediate, const Vector3 &p_vertex) = 0;
|
||||||
|
virtual void immediate_normal(RID p_immediate, const Vector3 &p_normal) = 0;
|
||||||
|
virtual void immediate_tangent(RID p_immediate, const Plane &p_tangent) = 0;
|
||||||
|
virtual void immediate_color(RID p_immediate, const Color &p_color) = 0;
|
||||||
|
virtual void immediate_uv(RID p_immediate, const Vector2 &tex_uv) = 0;
|
||||||
|
virtual void immediate_uv2(RID p_immediate, const Vector2 &tex_uv) = 0;
|
||||||
|
virtual void immediate_end(RID p_immediate) = 0;
|
||||||
|
virtual void immediate_clear(RID p_immediate) = 0;
|
||||||
|
virtual void immediate_set_material(RID p_immediate, RID p_material) = 0;
|
||||||
|
virtual RID immediate_get_material(RID p_immediate) const = 0;
|
||||||
|
virtual AABB immediate_get_aabb(RID p_immediate) const = 0;
|
||||||
|
|
||||||
|
/* SKELETON API */
|
||||||
|
|
||||||
|
virtual RID skeleton_create() = 0;
|
||||||
|
virtual void skeleton_allocate(RID p_skeleton, int p_bones, bool p_2d_skeleton = false) = 0;
|
||||||
|
virtual int skeleton_get_bone_count(RID p_skeleton) const = 0;
|
||||||
|
virtual void skeleton_bone_set_transform(RID p_skeleton, int p_bone, const Transform &p_transform) = 0;
|
||||||
|
virtual Transform skeleton_bone_get_transform(RID p_skeleton, int p_bone) const = 0;
|
||||||
|
virtual void skeleton_bone_set_transform_2d(RID p_skeleton, int p_bone, const Transform2D &p_transform) = 0;
|
||||||
|
virtual Transform2D skeleton_bone_get_transform_2d(RID p_skeleton, int p_bone) const = 0;
|
||||||
|
virtual void skeleton_set_base_transform_2d(RID p_skeleton, const Transform2D &p_base_transform) = 0;
|
||||||
|
|
||||||
|
/* Light API */
|
||||||
|
|
||||||
|
virtual RID light_create(RS::LightType p_type) = 0;
|
||||||
|
|
||||||
|
RID directional_light_create() { return light_create(RS::LIGHT_DIRECTIONAL); }
|
||||||
|
RID omni_light_create() { return light_create(RS::LIGHT_OMNI); }
|
||||||
|
RID spot_light_create() { return light_create(RS::LIGHT_SPOT); }
|
||||||
|
|
||||||
|
virtual void light_set_color(RID p_light, const Color &p_color) = 0;
|
||||||
|
virtual void light_set_param(RID p_light, RS::LightParam p_param, float p_value) = 0;
|
||||||
|
virtual void light_set_shadow(RID p_light, bool p_enabled) = 0;
|
||||||
|
virtual void light_set_shadow_color(RID p_light, const Color &p_color) = 0;
|
||||||
|
virtual void light_set_projector(RID p_light, RID p_texture) = 0;
|
||||||
|
virtual void light_set_negative(RID p_light, bool p_enable) = 0;
|
||||||
|
virtual void light_set_cull_mask(RID p_light, uint32_t p_mask) = 0;
|
||||||
|
virtual void light_set_reverse_cull_face_mode(RID p_light, bool p_enabled) = 0;
|
||||||
|
virtual void light_set_bake_mode(RID p_light, RS::LightBakeMode p_bake_mode) = 0;
|
||||||
|
virtual void light_set_max_sdfgi_cascade(RID p_light, uint32_t p_cascade) = 0;
|
||||||
|
|
||||||
|
virtual void light_omni_set_shadow_mode(RID p_light, RS::LightOmniShadowMode p_mode) = 0;
|
||||||
|
|
||||||
|
virtual void light_directional_set_shadow_mode(RID p_light, RS::LightDirectionalShadowMode p_mode) = 0;
|
||||||
|
virtual void light_directional_set_blend_splits(RID p_light, bool p_enable) = 0;
|
||||||
|
virtual bool light_directional_get_blend_splits(RID p_light) const = 0;
|
||||||
|
virtual void light_directional_set_sky_only(RID p_light, bool p_sky_only) = 0;
|
||||||
|
virtual bool light_directional_is_sky_only(RID p_light) const = 0;
|
||||||
|
virtual void light_directional_set_shadow_depth_range_mode(RID p_light, RS::LightDirectionalShadowDepthRangeMode p_range_mode) = 0;
|
||||||
|
virtual RS::LightDirectionalShadowDepthRangeMode light_directional_get_shadow_depth_range_mode(RID p_light) const = 0;
|
||||||
|
|
||||||
|
virtual RS::LightDirectionalShadowMode light_directional_get_shadow_mode(RID p_light) = 0;
|
||||||
|
virtual RS::LightOmniShadowMode light_omni_get_shadow_mode(RID p_light) = 0;
|
||||||
|
|
||||||
|
virtual bool light_has_shadow(RID p_light) const = 0;
|
||||||
|
|
||||||
|
virtual RS::LightType light_get_type(RID p_light) const = 0;
|
||||||
|
virtual AABB light_get_aabb(RID p_light) const = 0;
|
||||||
|
virtual float light_get_param(RID p_light, RS::LightParam p_param) = 0;
|
||||||
|
virtual Color light_get_color(RID p_light) = 0;
|
||||||
|
virtual RS::LightBakeMode light_get_bake_mode(RID p_light) = 0;
|
||||||
|
virtual uint32_t light_get_max_sdfgi_cascade(RID p_light) = 0;
|
||||||
|
virtual uint64_t light_get_version(RID p_light) const = 0;
|
||||||
|
|
||||||
|
/* PROBE API */
|
||||||
|
|
||||||
|
virtual RID reflection_probe_create() = 0;
|
||||||
|
|
||||||
|
virtual void reflection_probe_set_update_mode(RID p_probe, RS::ReflectionProbeUpdateMode p_mode) = 0;
|
||||||
|
virtual void reflection_probe_set_resolution(RID p_probe, int p_resolution) = 0;
|
||||||
|
virtual void reflection_probe_set_intensity(RID p_probe, float p_intensity) = 0;
|
||||||
|
virtual void reflection_probe_set_ambient_mode(RID p_probe, RS::ReflectionProbeAmbientMode p_mode) = 0;
|
||||||
|
virtual void reflection_probe_set_ambient_color(RID p_probe, const Color &p_color) = 0;
|
||||||
|
virtual void reflection_probe_set_ambient_energy(RID p_probe, float p_energy) = 0;
|
||||||
|
virtual void reflection_probe_set_max_distance(RID p_probe, float p_distance) = 0;
|
||||||
|
virtual void reflection_probe_set_extents(RID p_probe, const Vector3 &p_extents) = 0;
|
||||||
|
virtual void reflection_probe_set_origin_offset(RID p_probe, const Vector3 &p_offset) = 0;
|
||||||
|
virtual void reflection_probe_set_as_interior(RID p_probe, bool p_enable) = 0;
|
||||||
|
virtual void reflection_probe_set_enable_box_projection(RID p_probe, bool p_enable) = 0;
|
||||||
|
virtual void reflection_probe_set_enable_shadows(RID p_probe, bool p_enable) = 0;
|
||||||
|
virtual void reflection_probe_set_cull_mask(RID p_probe, uint32_t p_layers) = 0;
|
||||||
|
|
||||||
|
virtual AABB reflection_probe_get_aabb(RID p_probe) const = 0;
|
||||||
|
virtual RS::ReflectionProbeUpdateMode reflection_probe_get_update_mode(RID p_probe) const = 0;
|
||||||
|
virtual uint32_t reflection_probe_get_cull_mask(RID p_probe) const = 0;
|
||||||
|
virtual Vector3 reflection_probe_get_extents(RID p_probe) const = 0;
|
||||||
|
virtual Vector3 reflection_probe_get_origin_offset(RID p_probe) const = 0;
|
||||||
|
virtual float reflection_probe_get_origin_max_distance(RID p_probe) const = 0;
|
||||||
|
virtual bool reflection_probe_renders_shadows(RID p_probe) const = 0;
|
||||||
|
|
||||||
|
virtual void base_update_dependency(RID p_base, InstanceBaseDependency *p_instance) = 0;
|
||||||
|
virtual void skeleton_update_dependency(RID p_base, InstanceBaseDependency *p_instance) = 0;
|
||||||
|
|
||||||
|
/* DECAL API */
|
||||||
|
|
||||||
|
virtual RID decal_create() = 0;
|
||||||
|
virtual void decal_set_extents(RID p_decal, const Vector3 &p_extents) = 0;
|
||||||
|
virtual void decal_set_texture(RID p_decal, RS::DecalTexture p_type, RID p_texture) = 0;
|
||||||
|
virtual void decal_set_emission_energy(RID p_decal, float p_energy) = 0;
|
||||||
|
virtual void decal_set_albedo_mix(RID p_decal, float p_mix) = 0;
|
||||||
|
virtual void decal_set_modulate(RID p_decal, const Color &p_modulate) = 0;
|
||||||
|
virtual void decal_set_cull_mask(RID p_decal, uint32_t p_layers) = 0;
|
||||||
|
virtual void decal_set_distance_fade(RID p_decal, bool p_enabled, float p_begin, float p_length) = 0;
|
||||||
|
virtual void decal_set_fade(RID p_decal, float p_above, float p_below) = 0;
|
||||||
|
virtual void decal_set_normal_fade(RID p_decal, float p_fade) = 0;
|
||||||
|
|
||||||
|
virtual AABB decal_get_aabb(RID p_decal) const = 0;
|
||||||
|
|
||||||
|
/* GI PROBE API */
|
||||||
|
|
||||||
|
virtual RID gi_probe_create() = 0;
|
||||||
|
|
||||||
|
virtual void gi_probe_allocate(RID p_gi_probe, const Transform &p_to_cell_xform, const AABB &p_aabb, const Vector3i &p_octree_size, const Vector<uint8_t> &p_octree_cells, const Vector<uint8_t> &p_data_cells, const Vector<uint8_t> &p_distance_field, const Vector<int> &p_level_counts) = 0;
|
||||||
|
|
||||||
|
virtual AABB gi_probe_get_bounds(RID p_gi_probe) const = 0;
|
||||||
|
virtual Vector3i gi_probe_get_octree_size(RID p_gi_probe) const = 0;
|
||||||
|
virtual Vector<uint8_t> gi_probe_get_octree_cells(RID p_gi_probe) const = 0;
|
||||||
|
virtual Vector<uint8_t> gi_probe_get_data_cells(RID p_gi_probe) const = 0;
|
||||||
|
virtual Vector<uint8_t> gi_probe_get_distance_field(RID p_gi_probe) const = 0;
|
||||||
|
|
||||||
|
virtual Vector<int> gi_probe_get_level_counts(RID p_gi_probe) const = 0;
|
||||||
|
virtual Transform gi_probe_get_to_cell_xform(RID p_gi_probe) const = 0;
|
||||||
|
|
||||||
|
virtual void gi_probe_set_dynamic_range(RID p_gi_probe, float p_range) = 0;
|
||||||
|
virtual float gi_probe_get_dynamic_range(RID p_gi_probe) const = 0;
|
||||||
|
|
||||||
|
virtual void gi_probe_set_propagation(RID p_gi_probe, float p_range) = 0;
|
||||||
|
virtual float gi_probe_get_propagation(RID p_gi_probe) const = 0;
|
||||||
|
|
||||||
|
virtual void gi_probe_set_energy(RID p_gi_probe, float p_energy) = 0;
|
||||||
|
virtual float gi_probe_get_energy(RID p_gi_probe) const = 0;
|
||||||
|
|
||||||
|
virtual void gi_probe_set_ao(RID p_gi_probe, float p_ao) = 0;
|
||||||
|
virtual float gi_probe_get_ao(RID p_gi_probe) const = 0;
|
||||||
|
|
||||||
|
virtual void gi_probe_set_ao_size(RID p_gi_probe, float p_strength) = 0;
|
||||||
|
virtual float gi_probe_get_ao_size(RID p_gi_probe) const = 0;
|
||||||
|
|
||||||
|
virtual void gi_probe_set_bias(RID p_gi_probe, float p_bias) = 0;
|
||||||
|
virtual float gi_probe_get_bias(RID p_gi_probe) const = 0;
|
||||||
|
|
||||||
|
virtual void gi_probe_set_normal_bias(RID p_gi_probe, float p_range) = 0;
|
||||||
|
virtual float gi_probe_get_normal_bias(RID p_gi_probe) const = 0;
|
||||||
|
|
||||||
|
virtual void gi_probe_set_interior(RID p_gi_probe, bool p_enable) = 0;
|
||||||
|
virtual bool gi_probe_is_interior(RID p_gi_probe) const = 0;
|
||||||
|
|
||||||
|
virtual void gi_probe_set_use_two_bounces(RID p_gi_probe, bool p_enable) = 0;
|
||||||
|
virtual bool gi_probe_is_using_two_bounces(RID p_gi_probe) const = 0;
|
||||||
|
|
||||||
|
virtual void gi_probe_set_anisotropy_strength(RID p_gi_probe, float p_strength) = 0;
|
||||||
|
virtual float gi_probe_get_anisotropy_strength(RID p_gi_probe) const = 0;
|
||||||
|
|
||||||
|
virtual uint32_t gi_probe_get_version(RID p_probe) = 0;
|
||||||
|
|
||||||
|
/* LIGHTMAP CAPTURE */
|
||||||
|
|
||||||
|
virtual RID lightmap_create() = 0;
|
||||||
|
|
||||||
|
virtual void lightmap_set_textures(RID p_lightmap, RID p_light, bool p_uses_spherical_haromics) = 0;
|
||||||
|
virtual void lightmap_set_probe_bounds(RID p_lightmap, const AABB &p_bounds) = 0;
|
||||||
|
virtual void lightmap_set_probe_interior(RID p_lightmap, bool p_interior) = 0;
|
||||||
|
virtual void lightmap_set_probe_capture_data(RID p_lightmap, const PackedVector3Array &p_points, const PackedColorArray &p_point_sh, const PackedInt32Array &p_tetrahedra, const PackedInt32Array &p_bsp_tree) = 0;
|
||||||
|
virtual PackedVector3Array lightmap_get_probe_capture_points(RID p_lightmap) const = 0;
|
||||||
|
virtual PackedColorArray lightmap_get_probe_capture_sh(RID p_lightmap) const = 0;
|
||||||
|
virtual PackedInt32Array lightmap_get_probe_capture_tetrahedra(RID p_lightmap) const = 0;
|
||||||
|
virtual PackedInt32Array lightmap_get_probe_capture_bsp_tree(RID p_lightmap) const = 0;
|
||||||
|
virtual AABB lightmap_get_aabb(RID p_lightmap) const = 0;
|
||||||
|
virtual void lightmap_tap_sh_light(RID p_lightmap, const Vector3 &p_point, Color *r_sh) = 0;
|
||||||
|
virtual bool lightmap_is_interior(RID p_lightmap) const = 0;
|
||||||
|
virtual void lightmap_set_probe_capture_update_speed(float p_speed) = 0;
|
||||||
|
virtual float lightmap_get_probe_capture_update_speed() const = 0;
|
||||||
|
|
||||||
|
/* PARTICLES */
|
||||||
|
|
||||||
|
virtual RID particles_create() = 0;
|
||||||
|
|
||||||
|
virtual void particles_set_emitting(RID p_particles, bool p_emitting) = 0;
|
||||||
|
virtual bool particles_get_emitting(RID p_particles) = 0;
|
||||||
|
|
||||||
|
virtual void particles_set_amount(RID p_particles, int p_amount) = 0;
|
||||||
|
virtual void particles_set_lifetime(RID p_particles, float p_lifetime) = 0;
|
||||||
|
virtual void particles_set_one_shot(RID p_particles, bool p_one_shot) = 0;
|
||||||
|
virtual void particles_set_pre_process_time(RID p_particles, float p_time) = 0;
|
||||||
|
virtual void particles_set_explosiveness_ratio(RID p_particles, float p_ratio) = 0;
|
||||||
|
virtual void particles_set_randomness_ratio(RID p_particles, float p_ratio) = 0;
|
||||||
|
virtual void particles_set_custom_aabb(RID p_particles, const AABB &p_aabb) = 0;
|
||||||
|
virtual void particles_set_speed_scale(RID p_particles, float p_scale) = 0;
|
||||||
|
virtual void particles_set_use_local_coordinates(RID p_particles, bool p_enable) = 0;
|
||||||
|
virtual void particles_set_process_material(RID p_particles, RID p_material) = 0;
|
||||||
|
virtual void particles_set_fixed_fps(RID p_particles, int p_fps) = 0;
|
||||||
|
virtual void particles_set_fractional_delta(RID p_particles, bool p_enable) = 0;
|
||||||
|
virtual void particles_set_collision_base_size(RID p_particles, float p_size) = 0;
|
||||||
|
virtual void particles_restart(RID p_particles) = 0;
|
||||||
|
virtual void particles_emit(RID p_particles, const Transform &p_transform, const Vector3 &p_velocity, const Color &p_color, const Color &p_custom, uint32_t p_emit_flags) = 0;
|
||||||
|
virtual void particles_set_subemitter(RID p_particles, RID p_subemitter_particles) = 0;
|
||||||
|
|
||||||
|
virtual bool particles_is_inactive(RID p_particles) const = 0;
|
||||||
|
|
||||||
|
virtual void particles_set_draw_order(RID p_particles, RS::ParticlesDrawOrder p_order) = 0;
|
||||||
|
|
||||||
|
virtual void particles_set_draw_passes(RID p_particles, int p_count) = 0;
|
||||||
|
virtual void particles_set_draw_pass_mesh(RID p_particles, int p_pass, RID p_mesh) = 0;
|
||||||
|
|
||||||
|
virtual void particles_request_process(RID p_particles) = 0;
|
||||||
|
virtual AABB particles_get_current_aabb(RID p_particles) = 0;
|
||||||
|
virtual AABB particles_get_aabb(RID p_particles) const = 0;
|
||||||
|
|
||||||
|
virtual void particles_set_emission_transform(RID p_particles, const Transform &p_transform) = 0;
|
||||||
|
|
||||||
|
virtual int particles_get_draw_passes(RID p_particles) const = 0;
|
||||||
|
virtual RID particles_get_draw_pass_mesh(RID p_particles, int p_pass) const = 0;
|
||||||
|
|
||||||
|
virtual void particles_set_view_axis(RID p_particles, const Vector3 &p_axis) = 0;
|
||||||
|
|
||||||
|
virtual void particles_add_collision(RID p_particles, InstanceBaseDependency *p_instance) = 0;
|
||||||
|
virtual void particles_remove_collision(RID p_particles, InstanceBaseDependency *p_instance) = 0;
|
||||||
|
|
||||||
|
virtual void update_particles() = 0;
|
||||||
|
|
||||||
|
/* PARTICLES COLLISION */
|
||||||
|
|
||||||
|
virtual RID particles_collision_create() = 0;
|
||||||
|
virtual void particles_collision_set_collision_type(RID p_particles_collision, RS::ParticlesCollisionType p_type) = 0;
|
||||||
|
virtual void particles_collision_set_cull_mask(RID p_particles_collision, uint32_t p_cull_mask) = 0;
|
||||||
|
virtual void particles_collision_set_sphere_radius(RID p_particles_collision, float p_radius) = 0; //for spheres
|
||||||
|
virtual void particles_collision_set_box_extents(RID p_particles_collision, const Vector3 &p_extents) = 0; //for non-spheres
|
||||||
|
virtual void particles_collision_set_attractor_strength(RID p_particles_collision, float p_strength) = 0;
|
||||||
|
virtual void particles_collision_set_attractor_directionality(RID p_particles_collision, float p_directionality) = 0;
|
||||||
|
virtual void particles_collision_set_attractor_attenuation(RID p_particles_collision, float p_curve) = 0;
|
||||||
|
virtual void particles_collision_set_field_texture(RID p_particles_collision, RID p_texture) = 0; //for SDF and vector field, heightfield is dynamic
|
||||||
|
virtual void particles_collision_height_field_update(RID p_particles_collision) = 0; //for SDF and vector field
|
||||||
|
virtual void particles_collision_set_height_field_resolution(RID p_particles_collision, RS::ParticlesCollisionHeightfieldResolution p_resolution) = 0; //for SDF and vector field
|
||||||
|
virtual AABB particles_collision_get_aabb(RID p_particles_collision) const = 0;
|
||||||
|
virtual bool particles_collision_is_heightfield(RID p_particles_collision) const = 0;
|
||||||
|
virtual RID particles_collision_get_heightfield_framebuffer(RID p_particles_collision) const = 0;
|
||||||
|
|
||||||
|
/* GLOBAL VARIABLES */
|
||||||
|
|
||||||
|
virtual void global_variable_add(const StringName &p_name, RS::GlobalVariableType p_type, const Variant &p_value) = 0;
|
||||||
|
virtual void global_variable_remove(const StringName &p_name) = 0;
|
||||||
|
virtual Vector<StringName> global_variable_get_list() const = 0;
|
||||||
|
|
||||||
|
virtual void global_variable_set(const StringName &p_name, const Variant &p_value) = 0;
|
||||||
|
virtual void global_variable_set_override(const StringName &p_name, const Variant &p_value) = 0;
|
||||||
|
virtual Variant global_variable_get(const StringName &p_name) const = 0;
|
||||||
|
virtual RS::GlobalVariableType global_variable_get_type(const StringName &p_name) const = 0;
|
||||||
|
|
||||||
|
virtual void global_variables_load_settings(bool p_load_textures = true) = 0;
|
||||||
|
virtual void global_variables_clear() = 0;
|
||||||
|
|
||||||
|
virtual int32_t global_variables_instance_allocate(RID p_instance) = 0;
|
||||||
|
virtual void global_variables_instance_free(RID p_instance) = 0;
|
||||||
|
virtual void global_variables_instance_update(RID p_instance, int p_index, const Variant &p_value) = 0;
|
||||||
|
|
||||||
|
/* RENDER TARGET */
|
||||||
|
|
||||||
|
enum RenderTargetFlags {
|
||||||
|
RENDER_TARGET_TRANSPARENT,
|
||||||
|
RENDER_TARGET_DIRECT_TO_SCREEN,
|
||||||
|
RENDER_TARGET_FLAG_MAX
|
||||||
|
};
|
||||||
|
|
||||||
|
virtual RID render_target_create() = 0;
|
||||||
|
virtual void render_target_set_position(RID p_render_target, int p_x, int p_y) = 0;
|
||||||
|
virtual void render_target_set_size(RID p_render_target, int p_width, int p_height) = 0;
|
||||||
|
virtual RID render_target_get_texture(RID p_render_target) = 0;
|
||||||
|
virtual void render_target_set_external_texture(RID p_render_target, unsigned int p_texture_id) = 0;
|
||||||
|
virtual void render_target_set_flag(RID p_render_target, RenderTargetFlags p_flag, bool p_value) = 0;
|
||||||
|
virtual bool render_target_was_used(RID p_render_target) = 0;
|
||||||
|
virtual void render_target_set_as_unused(RID p_render_target) = 0;
|
||||||
|
|
||||||
|
virtual void render_target_request_clear(RID p_render_target, const Color &p_clear_color) = 0;
|
||||||
|
virtual bool render_target_is_clear_requested(RID p_render_target) = 0;
|
||||||
|
virtual Color render_target_get_clear_request_color(RID p_render_target) = 0;
|
||||||
|
virtual void render_target_disable_clear_request(RID p_render_target) = 0;
|
||||||
|
virtual void render_target_do_clear_request(RID p_render_target) = 0;
|
||||||
|
|
||||||
|
virtual void render_target_set_sdf_size_and_scale(RID p_render_target, RS::ViewportSDFOversize p_size, RS::ViewportSDFScale p_scale) = 0;
|
||||||
|
virtual Rect2i render_target_get_sdf_rect(RID p_render_target) const = 0;
|
||||||
|
|
||||||
|
virtual RS::InstanceType get_base_type(RID p_rid) const = 0;
|
||||||
|
virtual bool free(RID p_rid) = 0;
|
||||||
|
|
||||||
|
virtual bool has_os_feature(const String &p_feature) const = 0;
|
||||||
|
|
||||||
|
virtual void update_dirty_resources() = 0;
|
||||||
|
|
||||||
|
virtual void set_debug_generate_wireframes(bool p_generate) = 0;
|
||||||
|
|
||||||
|
virtual void render_info_begin_capture() = 0;
|
||||||
|
virtual void render_info_end_capture() = 0;
|
||||||
|
virtual int get_captured_render_info(RS::RenderInfo p_info) = 0;
|
||||||
|
|
||||||
|
virtual int get_render_info(RS::RenderInfo p_info) = 0;
|
||||||
|
virtual String get_video_adapter_name() const = 0;
|
||||||
|
virtual String get_video_adapter_vendor() const = 0;
|
||||||
|
|
||||||
|
static RendererStorage *base_singleton;
|
||||||
|
|
||||||
|
void set_default_clear_color(const Color &p_color) {
|
||||||
|
default_clear_color = p_color;
|
||||||
|
}
|
||||||
|
|
||||||
|
Color get_default_clear_color() const {
|
||||||
|
return default_clear_color;
|
||||||
|
}
|
||||||
|
#define TIMESTAMP_BEGIN() \
|
||||||
|
{ \
|
||||||
|
if (RSG::storage->capturing_timestamps) \
|
||||||
|
RSG::storage->capture_timestamps_begin(); \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define RENDER_TIMESTAMP(m_text) \
|
||||||
|
{ \
|
||||||
|
if (RSG::storage->capturing_timestamps) \
|
||||||
|
RSG::storage->capture_timestamp(m_text); \
|
||||||
|
}
|
||||||
|
|
||||||
|
bool capturing_timestamps = false;
|
||||||
|
|
||||||
|
virtual void capture_timestamps_begin() = 0;
|
||||||
|
virtual void capture_timestamp(const String &p_name) = 0;
|
||||||
|
virtual uint32_t get_captured_timestamps_count() const = 0;
|
||||||
|
virtual uint64_t get_captured_timestamps_frame() const = 0;
|
||||||
|
virtual uint64_t get_captured_timestamp_gpu_time(uint32_t p_index) const = 0;
|
||||||
|
virtual uint64_t get_captured_timestamp_cpu_time(uint32_t p_index) const = 0;
|
||||||
|
virtual String get_captured_timestamp_name(uint32_t p_index) const = 0;
|
||||||
|
|
||||||
|
RendererStorage();
|
||||||
|
virtual ~RendererStorage() {}
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // RENDERINGSERVERSTORAGE_H
|
@ -1,5 +1,5 @@
|
|||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
/* rendering_server_viewport.cpp */
|
/* renderer_viewport.cpp */
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
/* This file is part of: */
|
/* This file is part of: */
|
||||||
/* GODOT ENGINE */
|
/* GODOT ENGINE */
|
||||||
@ -28,14 +28,14 @@
|
|||||||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
|
|
||||||
#include "rendering_server_viewport.h"
|
#include "renderer_viewport.h"
|
||||||
|
|
||||||
#include "core/config/project_settings.h"
|
#include "core/config/project_settings.h"
|
||||||
#include "rendering_server_canvas.h"
|
#include "renderer_canvas_cull.h"
|
||||||
|
#include "renderer_scene_cull.h"
|
||||||
#include "rendering_server_globals.h"
|
#include "rendering_server_globals.h"
|
||||||
#include "rendering_server_scene_raster.h"
|
|
||||||
|
|
||||||
static Transform2D _canvas_get_transform(RenderingServerViewport::Viewport *p_viewport, RenderingServerCanvas::Canvas *p_canvas, RenderingServerViewport::Viewport::CanvasData *p_canvas_data, const Vector2 &p_vp_size) {
|
static Transform2D _canvas_get_transform(RendererViewport::Viewport *p_viewport, RendererCanvasCull::Canvas *p_canvas, RendererViewport::Viewport::CanvasData *p_canvas_data, const Vector2 &p_vp_size) {
|
||||||
Transform2D xf = p_viewport->global_transform;
|
Transform2D xf = p_viewport->global_transform;
|
||||||
|
|
||||||
float scale = 1.0;
|
float scale = 1.0;
|
||||||
@ -71,7 +71,7 @@ static Transform2D _canvas_get_transform(RenderingServerViewport::Viewport *p_vi
|
|||||||
return xf;
|
return xf;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerViewport::_draw_3d(Viewport *p_viewport, XRInterface::Eyes p_eye) {
|
void RendererViewport::_draw_3d(Viewport *p_viewport, XRInterface::Eyes p_eye) {
|
||||||
RENDER_TIMESTAMP(">Begin Rendering 3D Scene");
|
RENDER_TIMESTAMP(">Begin Rendering 3D Scene");
|
||||||
|
|
||||||
Ref<XRInterface> xr_interface;
|
Ref<XRInterface> xr_interface;
|
||||||
@ -87,7 +87,7 @@ void RenderingServerViewport::_draw_3d(Viewport *p_viewport, XRInterface::Eyes p
|
|||||||
RENDER_TIMESTAMP("<End Rendering 3D Scene");
|
RENDER_TIMESTAMP("<End Rendering 3D Scene");
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerViewport::_draw_viewport(Viewport *p_viewport, XRInterface::Eyes p_eye) {
|
void RendererViewport::_draw_viewport(Viewport *p_viewport, XRInterface::Eyes p_eye) {
|
||||||
if (p_viewport->measure_render_time) {
|
if (p_viewport->measure_render_time) {
|
||||||
String rt_id = "vp_begin_" + itos(p_viewport->self.get_id());
|
String rt_id = "vp_begin_" + itos(p_viewport->self.get_id());
|
||||||
RSG::storage->capture_timestamp(rt_id);
|
RSG::storage->capture_timestamp(rt_id);
|
||||||
@ -138,25 +138,25 @@ void RenderingServerViewport::_draw_viewport(Viewport *p_viewport, XRInterface::
|
|||||||
Map<Viewport::CanvasKey, Viewport::CanvasData *> canvas_map;
|
Map<Viewport::CanvasKey, Viewport::CanvasData *> canvas_map;
|
||||||
|
|
||||||
Rect2 clip_rect(0, 0, p_viewport->size.x, p_viewport->size.y);
|
Rect2 clip_rect(0, 0, p_viewport->size.x, p_viewport->size.y);
|
||||||
RasterizerCanvas::Light *lights = nullptr;
|
RendererCanvasRender::Light *lights = nullptr;
|
||||||
RasterizerCanvas::Light *lights_with_shadow = nullptr;
|
RendererCanvasRender::Light *lights_with_shadow = nullptr;
|
||||||
|
|
||||||
RasterizerCanvas::Light *directional_lights = nullptr;
|
RendererCanvasRender::Light *directional_lights = nullptr;
|
||||||
RasterizerCanvas::Light *directional_lights_with_shadow = nullptr;
|
RendererCanvasRender::Light *directional_lights_with_shadow = nullptr;
|
||||||
|
|
||||||
if (p_viewport->sdf_active) {
|
if (p_viewport->sdf_active) {
|
||||||
//process SDF
|
//process SDF
|
||||||
|
|
||||||
Rect2 sdf_rect = RSG::storage->render_target_get_sdf_rect(p_viewport->render_target);
|
Rect2 sdf_rect = RSG::storage->render_target_get_sdf_rect(p_viewport->render_target);
|
||||||
|
|
||||||
RasterizerCanvas::LightOccluderInstance *occluders = nullptr;
|
RendererCanvasRender::LightOccluderInstance *occluders = nullptr;
|
||||||
|
|
||||||
//make list of occluders
|
//make list of occluders
|
||||||
for (Map<RID, Viewport::CanvasData>::Element *E = p_viewport->canvas_map.front(); E; E = E->next()) {
|
for (Map<RID, Viewport::CanvasData>::Element *E = p_viewport->canvas_map.front(); E; E = E->next()) {
|
||||||
RenderingServerCanvas::Canvas *canvas = static_cast<RenderingServerCanvas::Canvas *>(E->get().canvas);
|
RendererCanvasCull::Canvas *canvas = static_cast<RendererCanvasCull::Canvas *>(E->get().canvas);
|
||||||
Transform2D xf = _canvas_get_transform(p_viewport, canvas, &E->get(), clip_rect.size);
|
Transform2D xf = _canvas_get_transform(p_viewport, canvas, &E->get(), clip_rect.size);
|
||||||
|
|
||||||
for (Set<RasterizerCanvas::LightOccluderInstance *>::Element *F = canvas->occluders.front(); F; F = F->next()) {
|
for (Set<RendererCanvasRender::LightOccluderInstance *>::Element *F = canvas->occluders.front(); F; F = F->next()) {
|
||||||
if (!F->get()->enabled) {
|
if (!F->get()->enabled) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -182,14 +182,14 @@ void RenderingServerViewport::_draw_viewport(Viewport *p_viewport, XRInterface::
|
|||||||
|
|
||||||
RENDER_TIMESTAMP("Cull Canvas Lights");
|
RENDER_TIMESTAMP("Cull Canvas Lights");
|
||||||
for (Map<RID, Viewport::CanvasData>::Element *E = p_viewport->canvas_map.front(); E; E = E->next()) {
|
for (Map<RID, Viewport::CanvasData>::Element *E = p_viewport->canvas_map.front(); E; E = E->next()) {
|
||||||
RenderingServerCanvas::Canvas *canvas = static_cast<RenderingServerCanvas::Canvas *>(E->get().canvas);
|
RendererCanvasCull::Canvas *canvas = static_cast<RendererCanvasCull::Canvas *>(E->get().canvas);
|
||||||
|
|
||||||
Transform2D xf = _canvas_get_transform(p_viewport, canvas, &E->get(), clip_rect.size);
|
Transform2D xf = _canvas_get_transform(p_viewport, canvas, &E->get(), clip_rect.size);
|
||||||
|
|
||||||
//find lights in canvas
|
//find lights in canvas
|
||||||
|
|
||||||
for (Set<RasterizerCanvas::Light *>::Element *F = canvas->lights.front(); F; F = F->next()) {
|
for (Set<RendererCanvasRender::Light *>::Element *F = canvas->lights.front(); F; F = F->next()) {
|
||||||
RasterizerCanvas::Light *cl = F->get();
|
RendererCanvasRender::Light *cl = F->get();
|
||||||
if (cl->enabled && cl->texture.is_valid()) {
|
if (cl->enabled && cl->texture.is_valid()) {
|
||||||
//not super efficient..
|
//not super efficient..
|
||||||
Size2 tsize = RSG::storage->texture_size_with_proxy(cl->texture);
|
Size2 tsize = RSG::storage->texture_size_with_proxy(cl->texture);
|
||||||
@ -226,8 +226,8 @@ void RenderingServerViewport::_draw_viewport(Viewport *p_viewport, XRInterface::
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (Set<RasterizerCanvas::Light *>::Element *F = canvas->directional_lights.front(); F; F = F->next()) {
|
for (Set<RendererCanvasRender::Light *>::Element *F = canvas->directional_lights.front(); F; F = F->next()) {
|
||||||
RasterizerCanvas::Light *cl = F->get();
|
RendererCanvasRender::Light *cl = F->get();
|
||||||
if (cl->enabled) {
|
if (cl->enabled) {
|
||||||
cl->filter_next_ptr = directional_lights;
|
cl->filter_next_ptr = directional_lights;
|
||||||
directional_lights = cl;
|
directional_lights = cl;
|
||||||
@ -252,17 +252,17 @@ void RenderingServerViewport::_draw_viewport(Viewport *p_viewport, XRInterface::
|
|||||||
if (lights_with_shadow) {
|
if (lights_with_shadow) {
|
||||||
//update shadows if any
|
//update shadows if any
|
||||||
|
|
||||||
RasterizerCanvas::LightOccluderInstance *occluders = nullptr;
|
RendererCanvasRender::LightOccluderInstance *occluders = nullptr;
|
||||||
|
|
||||||
RENDER_TIMESTAMP(">Render 2D Shadows");
|
RENDER_TIMESTAMP(">Render 2D Shadows");
|
||||||
RENDER_TIMESTAMP("Cull Occluders");
|
RENDER_TIMESTAMP("Cull Occluders");
|
||||||
|
|
||||||
//make list of occluders
|
//make list of occluders
|
||||||
for (Map<RID, Viewport::CanvasData>::Element *E = p_viewport->canvas_map.front(); E; E = E->next()) {
|
for (Map<RID, Viewport::CanvasData>::Element *E = p_viewport->canvas_map.front(); E; E = E->next()) {
|
||||||
RenderingServerCanvas::Canvas *canvas = static_cast<RenderingServerCanvas::Canvas *>(E->get().canvas);
|
RendererCanvasCull::Canvas *canvas = static_cast<RendererCanvasCull::Canvas *>(E->get().canvas);
|
||||||
Transform2D xf = _canvas_get_transform(p_viewport, canvas, &E->get(), clip_rect.size);
|
Transform2D xf = _canvas_get_transform(p_viewport, canvas, &E->get(), clip_rect.size);
|
||||||
|
|
||||||
for (Set<RasterizerCanvas::LightOccluderInstance *>::Element *F = canvas->occluders.front(); F; F = F->next()) {
|
for (Set<RendererCanvasRender::LightOccluderInstance *>::Element *F = canvas->occluders.front(); F; F = F->next()) {
|
||||||
if (!F->get()->enabled) {
|
if (!F->get()->enabled) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -275,7 +275,7 @@ void RenderingServerViewport::_draw_viewport(Viewport *p_viewport, XRInterface::
|
|||||||
}
|
}
|
||||||
//update the light shadowmaps with them
|
//update the light shadowmaps with them
|
||||||
|
|
||||||
RasterizerCanvas::Light *light = lights_with_shadow;
|
RendererCanvasRender::Light *light = lights_with_shadow;
|
||||||
while (light) {
|
while (light) {
|
||||||
RENDER_TIMESTAMP("Render Shadow");
|
RENDER_TIMESTAMP("Render Shadow");
|
||||||
|
|
||||||
@ -288,7 +288,7 @@ void RenderingServerViewport::_draw_viewport(Viewport *p_viewport, XRInterface::
|
|||||||
|
|
||||||
if (directional_lights_with_shadow) {
|
if (directional_lights_with_shadow) {
|
||||||
//update shadows if any
|
//update shadows if any
|
||||||
RasterizerCanvas::Light *light = directional_lights_with_shadow;
|
RendererCanvasRender::Light *light = directional_lights_with_shadow;
|
||||||
while (light) {
|
while (light) {
|
||||||
Vector2 light_dir = -light->xform_cache.elements[1].normalized(); // Y is light direction
|
Vector2 light_dir = -light->xform_cache.elements[1].normalized(); // Y is light direction
|
||||||
float cull_distance = light->directional_distance;
|
float cull_distance = light->directional_distance;
|
||||||
@ -333,17 +333,17 @@ void RenderingServerViewport::_draw_viewport(Viewport *p_viewport, XRInterface::
|
|||||||
|
|
||||||
Vector2 xf_points[6];
|
Vector2 xf_points[6];
|
||||||
|
|
||||||
RasterizerCanvas::LightOccluderInstance *occluders = nullptr;
|
RendererCanvasRender::LightOccluderInstance *occluders = nullptr;
|
||||||
|
|
||||||
RENDER_TIMESTAMP(">Render Directional 2D Shadows");
|
RENDER_TIMESTAMP(">Render Directional 2D Shadows");
|
||||||
|
|
||||||
//make list of occluders
|
//make list of occluders
|
||||||
int occ_cullded = 0;
|
int occ_cullded = 0;
|
||||||
for (Map<RID, Viewport::CanvasData>::Element *E = p_viewport->canvas_map.front(); E; E = E->next()) {
|
for (Map<RID, Viewport::CanvasData>::Element *E = p_viewport->canvas_map.front(); E; E = E->next()) {
|
||||||
RenderingServerCanvas::Canvas *canvas = static_cast<RenderingServerCanvas::Canvas *>(E->get().canvas);
|
RendererCanvasCull::Canvas *canvas = static_cast<RendererCanvasCull::Canvas *>(E->get().canvas);
|
||||||
Transform2D xf = _canvas_get_transform(p_viewport, canvas, &E->get(), clip_rect.size);
|
Transform2D xf = _canvas_get_transform(p_viewport, canvas, &E->get(), clip_rect.size);
|
||||||
|
|
||||||
for (Set<RasterizerCanvas::LightOccluderInstance *>::Element *F = canvas->occluders.front(); F; F = F->next()) {
|
for (Set<RendererCanvasRender::LightOccluderInstance *>::Element *F = canvas->occluders.front(); F; F = F->next()) {
|
||||||
if (!F->get()->enabled) {
|
if (!F->get()->enabled) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -379,14 +379,14 @@ void RenderingServerViewport::_draw_viewport(Viewport *p_viewport, XRInterface::
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (Map<Viewport::CanvasKey, Viewport::CanvasData *>::Element *E = canvas_map.front(); E; E = E->next()) {
|
for (Map<Viewport::CanvasKey, Viewport::CanvasData *>::Element *E = canvas_map.front(); E; E = E->next()) {
|
||||||
RenderingServerCanvas::Canvas *canvas = static_cast<RenderingServerCanvas::Canvas *>(E->get()->canvas);
|
RendererCanvasCull::Canvas *canvas = static_cast<RendererCanvasCull::Canvas *>(E->get()->canvas);
|
||||||
|
|
||||||
Transform2D xform = _canvas_get_transform(p_viewport, canvas, E->get(), clip_rect.size);
|
Transform2D xform = _canvas_get_transform(p_viewport, canvas, E->get(), clip_rect.size);
|
||||||
|
|
||||||
RasterizerCanvas::Light *canvas_lights = nullptr;
|
RendererCanvasRender::Light *canvas_lights = nullptr;
|
||||||
RasterizerCanvas::Light *canvas_directional_lights = nullptr;
|
RendererCanvasRender::Light *canvas_directional_lights = nullptr;
|
||||||
|
|
||||||
RasterizerCanvas::Light *ptr = lights;
|
RendererCanvasRender::Light *ptr = lights;
|
||||||
while (ptr) {
|
while (ptr) {
|
||||||
if (E->get()->layer >= ptr->layer_min && E->get()->layer <= ptr->layer_max) {
|
if (E->get()->layer >= ptr->layer_min && E->get()->layer <= ptr->layer_max) {
|
||||||
ptr->next_ptr = canvas_lights;
|
ptr->next_ptr = canvas_lights;
|
||||||
@ -442,7 +442,7 @@ void RenderingServerViewport::_draw_viewport(Viewport *p_viewport, XRInterface::
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerViewport::draw_viewports() {
|
void RendererViewport::draw_viewports() {
|
||||||
timestamp_vp_map.clear();
|
timestamp_vp_map.clear();
|
||||||
|
|
||||||
// get our xr interface in case we need it
|
// get our xr interface in case we need it
|
||||||
@ -462,7 +462,7 @@ void RenderingServerViewport::draw_viewports() {
|
|||||||
//sort viewports
|
//sort viewports
|
||||||
active_viewports.sort_custom<ViewportSort>();
|
active_viewports.sort_custom<ViewportSort>();
|
||||||
|
|
||||||
Map<DisplayServer::WindowID, Vector<Rasterizer::BlitToScreen>> blit_to_screen_list;
|
Map<DisplayServer::WindowID, Vector<RendererCompositor::BlitToScreen>> blit_to_screen_list;
|
||||||
//draw viewports
|
//draw viewports
|
||||||
RENDER_TIMESTAMP(">Render Viewports");
|
RENDER_TIMESTAMP(">Render Viewports");
|
||||||
|
|
||||||
@ -573,7 +573,7 @@ void RenderingServerViewport::draw_viewports() {
|
|||||||
|
|
||||||
if (vp->viewport_to_screen != DisplayServer::INVALID_WINDOW_ID && (!vp->viewport_render_direct_to_screen || !RSG::rasterizer->is_low_end())) {
|
if (vp->viewport_to_screen != DisplayServer::INVALID_WINDOW_ID && (!vp->viewport_render_direct_to_screen || !RSG::rasterizer->is_low_end())) {
|
||||||
//copy to screen if set as such
|
//copy to screen if set as such
|
||||||
Rasterizer::BlitToScreen blit;
|
RendererCompositor::BlitToScreen blit;
|
||||||
blit.render_target = vp->render_target;
|
blit.render_target = vp->render_target;
|
||||||
if (vp->viewport_to_screen_rect != Rect2()) {
|
if (vp->viewport_to_screen_rect != Rect2()) {
|
||||||
blit.rect = vp->viewport_to_screen_rect;
|
blit.rect = vp->viewport_to_screen_rect;
|
||||||
@ -583,7 +583,7 @@ void RenderingServerViewport::draw_viewports() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!blit_to_screen_list.has(vp->viewport_to_screen)) {
|
if (!blit_to_screen_list.has(vp->viewport_to_screen)) {
|
||||||
blit_to_screen_list[vp->viewport_to_screen] = Vector<Rasterizer::BlitToScreen>();
|
blit_to_screen_list[vp->viewport_to_screen] = Vector<RendererCompositor::BlitToScreen>();
|
||||||
}
|
}
|
||||||
|
|
||||||
blit_to_screen_list[vp->viewport_to_screen].push_back(blit);
|
blit_to_screen_list[vp->viewport_to_screen].push_back(blit);
|
||||||
@ -602,12 +602,12 @@ void RenderingServerViewport::draw_viewports() {
|
|||||||
//this needs to be called to make screen swapping more efficient
|
//this needs to be called to make screen swapping more efficient
|
||||||
RSG::rasterizer->prepare_for_blitting_render_targets();
|
RSG::rasterizer->prepare_for_blitting_render_targets();
|
||||||
|
|
||||||
for (Map<int, Vector<Rasterizer::BlitToScreen>>::Element *E = blit_to_screen_list.front(); E; E = E->next()) {
|
for (Map<int, Vector<RendererCompositor::BlitToScreen>>::Element *E = blit_to_screen_list.front(); E; E = E->next()) {
|
||||||
RSG::rasterizer->blit_render_targets_to_screen(E->key(), E->get().ptr(), E->get().size());
|
RSG::rasterizer->blit_render_targets_to_screen(E->key(), E->get().ptr(), E->get().size());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
RID RenderingServerViewport::viewport_create() {
|
RID RendererViewport::viewport_create() {
|
||||||
Viewport *viewport = memnew(Viewport);
|
Viewport *viewport = memnew(Viewport);
|
||||||
|
|
||||||
RID rid = viewport_owner.make_rid(viewport);
|
RID rid = viewport_owner.make_rid(viewport);
|
||||||
@ -622,14 +622,14 @@ RID RenderingServerViewport::viewport_create() {
|
|||||||
return rid;
|
return rid;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerViewport::viewport_set_use_xr(RID p_viewport, bool p_use_xr) {
|
void RendererViewport::viewport_set_use_xr(RID p_viewport, bool p_use_xr) {
|
||||||
Viewport *viewport = viewport_owner.getornull(p_viewport);
|
Viewport *viewport = viewport_owner.getornull(p_viewport);
|
||||||
ERR_FAIL_COND(!viewport);
|
ERR_FAIL_COND(!viewport);
|
||||||
|
|
||||||
viewport->use_xr = p_use_xr;
|
viewport->use_xr = p_use_xr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerViewport::viewport_set_size(RID p_viewport, int p_width, int p_height) {
|
void RendererViewport::viewport_set_size(RID p_viewport, int p_width, int p_height) {
|
||||||
ERR_FAIL_COND(p_width < 0 && p_height < 0);
|
ERR_FAIL_COND(p_width < 0 && p_height < 0);
|
||||||
|
|
||||||
Viewport *viewport = viewport_owner.getornull(p_viewport);
|
Viewport *viewport = viewport_owner.getornull(p_viewport);
|
||||||
@ -647,7 +647,7 @@ void RenderingServerViewport::viewport_set_size(RID p_viewport, int p_width, int
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerViewport::viewport_set_active(RID p_viewport, bool p_active) {
|
void RendererViewport::viewport_set_active(RID p_viewport, bool p_active) {
|
||||||
Viewport *viewport = viewport_owner.getornull(p_viewport);
|
Viewport *viewport = viewport_owner.getornull(p_viewport);
|
||||||
ERR_FAIL_COND(!viewport);
|
ERR_FAIL_COND(!viewport);
|
||||||
|
|
||||||
@ -659,21 +659,21 @@ void RenderingServerViewport::viewport_set_active(RID p_viewport, bool p_active)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerViewport::viewport_set_parent_viewport(RID p_viewport, RID p_parent_viewport) {
|
void RendererViewport::viewport_set_parent_viewport(RID p_viewport, RID p_parent_viewport) {
|
||||||
Viewport *viewport = viewport_owner.getornull(p_viewport);
|
Viewport *viewport = viewport_owner.getornull(p_viewport);
|
||||||
ERR_FAIL_COND(!viewport);
|
ERR_FAIL_COND(!viewport);
|
||||||
|
|
||||||
viewport->parent = p_parent_viewport;
|
viewport->parent = p_parent_viewport;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerViewport::viewport_set_clear_mode(RID p_viewport, RS::ViewportClearMode p_clear_mode) {
|
void RendererViewport::viewport_set_clear_mode(RID p_viewport, RS::ViewportClearMode p_clear_mode) {
|
||||||
Viewport *viewport = viewport_owner.getornull(p_viewport);
|
Viewport *viewport = viewport_owner.getornull(p_viewport);
|
||||||
ERR_FAIL_COND(!viewport);
|
ERR_FAIL_COND(!viewport);
|
||||||
|
|
||||||
viewport->clear_mode = p_clear_mode;
|
viewport->clear_mode = p_clear_mode;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerViewport::viewport_attach_to_screen(RID p_viewport, const Rect2 &p_rect, DisplayServer::WindowID p_screen) {
|
void RendererViewport::viewport_attach_to_screen(RID p_viewport, const Rect2 &p_rect, DisplayServer::WindowID p_screen) {
|
||||||
Viewport *viewport = viewport_owner.getornull(p_viewport);
|
Viewport *viewport = viewport_owner.getornull(p_viewport);
|
||||||
ERR_FAIL_COND(!viewport);
|
ERR_FAIL_COND(!viewport);
|
||||||
|
|
||||||
@ -699,7 +699,7 @@ void RenderingServerViewport::viewport_attach_to_screen(RID p_viewport, const Re
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerViewport::viewport_set_render_direct_to_screen(RID p_viewport, bool p_enable) {
|
void RendererViewport::viewport_set_render_direct_to_screen(RID p_viewport, bool p_enable) {
|
||||||
Viewport *viewport = viewport_owner.getornull(p_viewport);
|
Viewport *viewport = viewport_owner.getornull(p_viewport);
|
||||||
ERR_FAIL_COND(!viewport);
|
ERR_FAIL_COND(!viewport);
|
||||||
|
|
||||||
@ -713,7 +713,7 @@ void RenderingServerViewport::viewport_set_render_direct_to_screen(RID p_viewpor
|
|||||||
RSG::storage->render_target_set_size(viewport->render_target, viewport->size.x, viewport->size.y);
|
RSG::storage->render_target_set_size(viewport->render_target, viewport->size.x, viewport->size.y);
|
||||||
}
|
}
|
||||||
|
|
||||||
RSG::storage->render_target_set_flag(viewport->render_target, RasterizerStorage::RENDER_TARGET_DIRECT_TO_SCREEN, p_enable);
|
RSG::storage->render_target_set_flag(viewport->render_target, RendererStorage::RENDER_TARGET_DIRECT_TO_SCREEN, p_enable);
|
||||||
viewport->viewport_render_direct_to_screen = p_enable;
|
viewport->viewport_render_direct_to_screen = p_enable;
|
||||||
|
|
||||||
// if attached to screen already, setup screen size and position, this needs to happen after setting flag to avoid an unnecessary buffer allocation
|
// if attached to screen already, setup screen size and position, this needs to happen after setting flag to avoid an unnecessary buffer allocation
|
||||||
@ -723,61 +723,61 @@ void RenderingServerViewport::viewport_set_render_direct_to_screen(RID p_viewpor
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerViewport::viewport_set_update_mode(RID p_viewport, RS::ViewportUpdateMode p_mode) {
|
void RendererViewport::viewport_set_update_mode(RID p_viewport, RS::ViewportUpdateMode p_mode) {
|
||||||
Viewport *viewport = viewport_owner.getornull(p_viewport);
|
Viewport *viewport = viewport_owner.getornull(p_viewport);
|
||||||
ERR_FAIL_COND(!viewport);
|
ERR_FAIL_COND(!viewport);
|
||||||
|
|
||||||
viewport->update_mode = p_mode;
|
viewport->update_mode = p_mode;
|
||||||
}
|
}
|
||||||
|
|
||||||
RID RenderingServerViewport::viewport_get_texture(RID p_viewport) const {
|
RID RendererViewport::viewport_get_texture(RID p_viewport) const {
|
||||||
const Viewport *viewport = viewport_owner.getornull(p_viewport);
|
const Viewport *viewport = viewport_owner.getornull(p_viewport);
|
||||||
ERR_FAIL_COND_V(!viewport, RID());
|
ERR_FAIL_COND_V(!viewport, RID());
|
||||||
|
|
||||||
return RSG::storage->render_target_get_texture(viewport->render_target);
|
return RSG::storage->render_target_get_texture(viewport->render_target);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerViewport::viewport_set_hide_scenario(RID p_viewport, bool p_hide) {
|
void RendererViewport::viewport_set_hide_scenario(RID p_viewport, bool p_hide) {
|
||||||
Viewport *viewport = viewport_owner.getornull(p_viewport);
|
Viewport *viewport = viewport_owner.getornull(p_viewport);
|
||||||
ERR_FAIL_COND(!viewport);
|
ERR_FAIL_COND(!viewport);
|
||||||
|
|
||||||
viewport->hide_scenario = p_hide;
|
viewport->hide_scenario = p_hide;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerViewport::viewport_set_hide_canvas(RID p_viewport, bool p_hide) {
|
void RendererViewport::viewport_set_hide_canvas(RID p_viewport, bool p_hide) {
|
||||||
Viewport *viewport = viewport_owner.getornull(p_viewport);
|
Viewport *viewport = viewport_owner.getornull(p_viewport);
|
||||||
ERR_FAIL_COND(!viewport);
|
ERR_FAIL_COND(!viewport);
|
||||||
|
|
||||||
viewport->hide_canvas = p_hide;
|
viewport->hide_canvas = p_hide;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerViewport::viewport_set_disable_environment(RID p_viewport, bool p_disable) {
|
void RendererViewport::viewport_set_disable_environment(RID p_viewport, bool p_disable) {
|
||||||
Viewport *viewport = viewport_owner.getornull(p_viewport);
|
Viewport *viewport = viewport_owner.getornull(p_viewport);
|
||||||
ERR_FAIL_COND(!viewport);
|
ERR_FAIL_COND(!viewport);
|
||||||
|
|
||||||
viewport->disable_environment = p_disable;
|
viewport->disable_environment = p_disable;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerViewport::viewport_attach_camera(RID p_viewport, RID p_camera) {
|
void RendererViewport::viewport_attach_camera(RID p_viewport, RID p_camera) {
|
||||||
Viewport *viewport = viewport_owner.getornull(p_viewport);
|
Viewport *viewport = viewport_owner.getornull(p_viewport);
|
||||||
ERR_FAIL_COND(!viewport);
|
ERR_FAIL_COND(!viewport);
|
||||||
|
|
||||||
viewport->camera = p_camera;
|
viewport->camera = p_camera;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerViewport::viewport_set_scenario(RID p_viewport, RID p_scenario) {
|
void RendererViewport::viewport_set_scenario(RID p_viewport, RID p_scenario) {
|
||||||
Viewport *viewport = viewport_owner.getornull(p_viewport);
|
Viewport *viewport = viewport_owner.getornull(p_viewport);
|
||||||
ERR_FAIL_COND(!viewport);
|
ERR_FAIL_COND(!viewport);
|
||||||
|
|
||||||
viewport->scenario = p_scenario;
|
viewport->scenario = p_scenario;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerViewport::viewport_attach_canvas(RID p_viewport, RID p_canvas) {
|
void RendererViewport::viewport_attach_canvas(RID p_viewport, RID p_canvas) {
|
||||||
Viewport *viewport = viewport_owner.getornull(p_viewport);
|
Viewport *viewport = viewport_owner.getornull(p_viewport);
|
||||||
ERR_FAIL_COND(!viewport);
|
ERR_FAIL_COND(!viewport);
|
||||||
|
|
||||||
ERR_FAIL_COND(viewport->canvas_map.has(p_canvas));
|
ERR_FAIL_COND(viewport->canvas_map.has(p_canvas));
|
||||||
RenderingServerCanvas::Canvas *canvas = RSG::canvas->canvas_owner.getornull(p_canvas);
|
RendererCanvasCull::Canvas *canvas = RSG::canvas->canvas_owner.getornull(p_canvas);
|
||||||
ERR_FAIL_COND(!canvas);
|
ERR_FAIL_COND(!canvas);
|
||||||
|
|
||||||
canvas->viewports.insert(p_viewport);
|
canvas->viewports.insert(p_viewport);
|
||||||
@ -787,18 +787,18 @@ void RenderingServerViewport::viewport_attach_canvas(RID p_viewport, RID p_canva
|
|||||||
viewport->canvas_map[p_canvas].canvas = canvas;
|
viewport->canvas_map[p_canvas].canvas = canvas;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerViewport::viewport_remove_canvas(RID p_viewport, RID p_canvas) {
|
void RendererViewport::viewport_remove_canvas(RID p_viewport, RID p_canvas) {
|
||||||
Viewport *viewport = viewport_owner.getornull(p_viewport);
|
Viewport *viewport = viewport_owner.getornull(p_viewport);
|
||||||
ERR_FAIL_COND(!viewport);
|
ERR_FAIL_COND(!viewport);
|
||||||
|
|
||||||
RenderingServerCanvas::Canvas *canvas = RSG::canvas->canvas_owner.getornull(p_canvas);
|
RendererCanvasCull::Canvas *canvas = RSG::canvas->canvas_owner.getornull(p_canvas);
|
||||||
ERR_FAIL_COND(!canvas);
|
ERR_FAIL_COND(!canvas);
|
||||||
|
|
||||||
viewport->canvas_map.erase(p_canvas);
|
viewport->canvas_map.erase(p_canvas);
|
||||||
canvas->viewports.erase(p_viewport);
|
canvas->viewports.erase(p_viewport);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerViewport::viewport_set_canvas_transform(RID p_viewport, RID p_canvas, const Transform2D &p_offset) {
|
void RendererViewport::viewport_set_canvas_transform(RID p_viewport, RID p_canvas, const Transform2D &p_offset) {
|
||||||
Viewport *viewport = viewport_owner.getornull(p_viewport);
|
Viewport *viewport = viewport_owner.getornull(p_viewport);
|
||||||
ERR_FAIL_COND(!viewport);
|
ERR_FAIL_COND(!viewport);
|
||||||
|
|
||||||
@ -806,22 +806,22 @@ void RenderingServerViewport::viewport_set_canvas_transform(RID p_viewport, RID
|
|||||||
viewport->canvas_map[p_canvas].transform = p_offset;
|
viewport->canvas_map[p_canvas].transform = p_offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerViewport::viewport_set_transparent_background(RID p_viewport, bool p_enabled) {
|
void RendererViewport::viewport_set_transparent_background(RID p_viewport, bool p_enabled) {
|
||||||
Viewport *viewport = viewport_owner.getornull(p_viewport);
|
Viewport *viewport = viewport_owner.getornull(p_viewport);
|
||||||
ERR_FAIL_COND(!viewport);
|
ERR_FAIL_COND(!viewport);
|
||||||
|
|
||||||
RSG::storage->render_target_set_flag(viewport->render_target, RasterizerStorage::RENDER_TARGET_TRANSPARENT, p_enabled);
|
RSG::storage->render_target_set_flag(viewport->render_target, RendererStorage::RENDER_TARGET_TRANSPARENT, p_enabled);
|
||||||
viewport->transparent_bg = p_enabled;
|
viewport->transparent_bg = p_enabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerViewport::viewport_set_global_canvas_transform(RID p_viewport, const Transform2D &p_transform) {
|
void RendererViewport::viewport_set_global_canvas_transform(RID p_viewport, const Transform2D &p_transform) {
|
||||||
Viewport *viewport = viewport_owner.getornull(p_viewport);
|
Viewport *viewport = viewport_owner.getornull(p_viewport);
|
||||||
ERR_FAIL_COND(!viewport);
|
ERR_FAIL_COND(!viewport);
|
||||||
|
|
||||||
viewport->global_transform = p_transform;
|
viewport->global_transform = p_transform;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerViewport::viewport_set_canvas_stacking(RID p_viewport, RID p_canvas, int p_layer, int p_sublayer) {
|
void RendererViewport::viewport_set_canvas_stacking(RID p_viewport, RID p_canvas, int p_layer, int p_sublayer) {
|
||||||
Viewport *viewport = viewport_owner.getornull(p_viewport);
|
Viewport *viewport = viewport_owner.getornull(p_viewport);
|
||||||
ERR_FAIL_COND(!viewport);
|
ERR_FAIL_COND(!viewport);
|
||||||
|
|
||||||
@ -830,7 +830,7 @@ void RenderingServerViewport::viewport_set_canvas_stacking(RID p_viewport, RID p
|
|||||||
viewport->canvas_map[p_canvas].sublayer = p_sublayer;
|
viewport->canvas_map[p_canvas].sublayer = p_sublayer;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerViewport::viewport_set_shadow_atlas_size(RID p_viewport, int p_size) {
|
void RendererViewport::viewport_set_shadow_atlas_size(RID p_viewport, int p_size) {
|
||||||
Viewport *viewport = viewport_owner.getornull(p_viewport);
|
Viewport *viewport = viewport_owner.getornull(p_viewport);
|
||||||
ERR_FAIL_COND(!viewport);
|
ERR_FAIL_COND(!viewport);
|
||||||
|
|
||||||
@ -839,14 +839,14 @@ void RenderingServerViewport::viewport_set_shadow_atlas_size(RID p_viewport, int
|
|||||||
RSG::scene->shadow_atlas_set_size(viewport->shadow_atlas, viewport->shadow_atlas_size);
|
RSG::scene->shadow_atlas_set_size(viewport->shadow_atlas, viewport->shadow_atlas_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerViewport::viewport_set_shadow_atlas_quadrant_subdivision(RID p_viewport, int p_quadrant, int p_subdiv) {
|
void RendererViewport::viewport_set_shadow_atlas_quadrant_subdivision(RID p_viewport, int p_quadrant, int p_subdiv) {
|
||||||
Viewport *viewport = viewport_owner.getornull(p_viewport);
|
Viewport *viewport = viewport_owner.getornull(p_viewport);
|
||||||
ERR_FAIL_COND(!viewport);
|
ERR_FAIL_COND(!viewport);
|
||||||
|
|
||||||
RSG::scene->shadow_atlas_set_quadrant_subdivision(viewport->shadow_atlas, p_quadrant, p_subdiv);
|
RSG::scene->shadow_atlas_set_quadrant_subdivision(viewport->shadow_atlas, p_quadrant, p_subdiv);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerViewport::viewport_set_msaa(RID p_viewport, RS::ViewportMSAA p_msaa) {
|
void RendererViewport::viewport_set_msaa(RID p_viewport, RS::ViewportMSAA p_msaa) {
|
||||||
Viewport *viewport = viewport_owner.getornull(p_viewport);
|
Viewport *viewport = viewport_owner.getornull(p_viewport);
|
||||||
ERR_FAIL_COND(!viewport);
|
ERR_FAIL_COND(!viewport);
|
||||||
|
|
||||||
@ -859,7 +859,7 @@ void RenderingServerViewport::viewport_set_msaa(RID p_viewport, RS::ViewportMSAA
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerViewport::viewport_set_screen_space_aa(RID p_viewport, RS::ViewportScreenSpaceAA p_mode) {
|
void RendererViewport::viewport_set_screen_space_aa(RID p_viewport, RS::ViewportScreenSpaceAA p_mode) {
|
||||||
Viewport *viewport = viewport_owner.getornull(p_viewport);
|
Viewport *viewport = viewport_owner.getornull(p_viewport);
|
||||||
ERR_FAIL_COND(!viewport);
|
ERR_FAIL_COND(!viewport);
|
||||||
|
|
||||||
@ -872,7 +872,7 @@ void RenderingServerViewport::viewport_set_screen_space_aa(RID p_viewport, RS::V
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerViewport::viewport_set_use_debanding(RID p_viewport, bool p_use_debanding) {
|
void RendererViewport::viewport_set_use_debanding(RID p_viewport, bool p_use_debanding) {
|
||||||
Viewport *viewport = viewport_owner.getornull(p_viewport);
|
Viewport *viewport = viewport_owner.getornull(p_viewport);
|
||||||
ERR_FAIL_COND(!viewport);
|
ERR_FAIL_COND(!viewport);
|
||||||
|
|
||||||
@ -885,7 +885,7 @@ void RenderingServerViewport::viewport_set_use_debanding(RID p_viewport, bool p_
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int RenderingServerViewport::viewport_get_render_info(RID p_viewport, RS::ViewportRenderInfo p_info) {
|
int RendererViewport::viewport_get_render_info(RID p_viewport, RS::ViewportRenderInfo p_info) {
|
||||||
ERR_FAIL_INDEX_V(p_info, RS::VIEWPORT_RENDER_INFO_MAX, -1);
|
ERR_FAIL_INDEX_V(p_info, RS::VIEWPORT_RENDER_INFO_MAX, -1);
|
||||||
|
|
||||||
Viewport *viewport = viewport_owner.getornull(p_viewport);
|
Viewport *viewport = viewport_owner.getornull(p_viewport);
|
||||||
@ -896,54 +896,54 @@ int RenderingServerViewport::viewport_get_render_info(RID p_viewport, RS::Viewpo
|
|||||||
return viewport->render_info[p_info];
|
return viewport->render_info[p_info];
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerViewport::viewport_set_debug_draw(RID p_viewport, RS::ViewportDebugDraw p_draw) {
|
void RendererViewport::viewport_set_debug_draw(RID p_viewport, RS::ViewportDebugDraw p_draw) {
|
||||||
Viewport *viewport = viewport_owner.getornull(p_viewport);
|
Viewport *viewport = viewport_owner.getornull(p_viewport);
|
||||||
ERR_FAIL_COND(!viewport);
|
ERR_FAIL_COND(!viewport);
|
||||||
|
|
||||||
viewport->debug_draw = p_draw;
|
viewport->debug_draw = p_draw;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerViewport::viewport_set_measure_render_time(RID p_viewport, bool p_enable) {
|
void RendererViewport::viewport_set_measure_render_time(RID p_viewport, bool p_enable) {
|
||||||
Viewport *viewport = viewport_owner.getornull(p_viewport);
|
Viewport *viewport = viewport_owner.getornull(p_viewport);
|
||||||
ERR_FAIL_COND(!viewport);
|
ERR_FAIL_COND(!viewport);
|
||||||
|
|
||||||
viewport->measure_render_time = p_enable;
|
viewport->measure_render_time = p_enable;
|
||||||
}
|
}
|
||||||
|
|
||||||
float RenderingServerViewport::viewport_get_measured_render_time_cpu(RID p_viewport) const {
|
float RendererViewport::viewport_get_measured_render_time_cpu(RID p_viewport) const {
|
||||||
Viewport *viewport = viewport_owner.getornull(p_viewport);
|
Viewport *viewport = viewport_owner.getornull(p_viewport);
|
||||||
ERR_FAIL_COND_V(!viewport, 0);
|
ERR_FAIL_COND_V(!viewport, 0);
|
||||||
|
|
||||||
return double(viewport->time_cpu_end - viewport->time_cpu_begin) / 1000.0;
|
return double(viewport->time_cpu_end - viewport->time_cpu_begin) / 1000.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
float RenderingServerViewport::viewport_get_measured_render_time_gpu(RID p_viewport) const {
|
float RendererViewport::viewport_get_measured_render_time_gpu(RID p_viewport) const {
|
||||||
Viewport *viewport = viewport_owner.getornull(p_viewport);
|
Viewport *viewport = viewport_owner.getornull(p_viewport);
|
||||||
ERR_FAIL_COND_V(!viewport, 0);
|
ERR_FAIL_COND_V(!viewport, 0);
|
||||||
|
|
||||||
return double((viewport->time_gpu_end - viewport->time_gpu_begin) / 1000) / 1000.0;
|
return double((viewport->time_gpu_end - viewport->time_gpu_begin) / 1000) / 1000.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerViewport::viewport_set_snap_2d_transforms_to_pixel(RID p_viewport, bool p_enabled) {
|
void RendererViewport::viewport_set_snap_2d_transforms_to_pixel(RID p_viewport, bool p_enabled) {
|
||||||
Viewport *viewport = viewport_owner.getornull(p_viewport);
|
Viewport *viewport = viewport_owner.getornull(p_viewport);
|
||||||
ERR_FAIL_COND(!viewport);
|
ERR_FAIL_COND(!viewport);
|
||||||
viewport->snap_2d_transforms_to_pixel = p_enabled;
|
viewport->snap_2d_transforms_to_pixel = p_enabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerViewport::viewport_set_snap_2d_vertices_to_pixel(RID p_viewport, bool p_enabled) {
|
void RendererViewport::viewport_set_snap_2d_vertices_to_pixel(RID p_viewport, bool p_enabled) {
|
||||||
Viewport *viewport = viewport_owner.getornull(p_viewport);
|
Viewport *viewport = viewport_owner.getornull(p_viewport);
|
||||||
ERR_FAIL_COND(!viewport);
|
ERR_FAIL_COND(!viewport);
|
||||||
viewport->snap_2d_vertices_to_pixel = p_enabled;
|
viewport->snap_2d_vertices_to_pixel = p_enabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerViewport::viewport_set_default_canvas_item_texture_filter(RID p_viewport, RS::CanvasItemTextureFilter p_filter) {
|
void RendererViewport::viewport_set_default_canvas_item_texture_filter(RID p_viewport, RS::CanvasItemTextureFilter p_filter) {
|
||||||
ERR_FAIL_COND_MSG(p_filter == RS::CANVAS_ITEM_TEXTURE_FILTER_DEFAULT, "Viewport does not accept DEFAULT as texture filter (it's the topmost choice already).)");
|
ERR_FAIL_COND_MSG(p_filter == RS::CANVAS_ITEM_TEXTURE_FILTER_DEFAULT, "Viewport does not accept DEFAULT as texture filter (it's the topmost choice already).)");
|
||||||
Viewport *viewport = viewport_owner.getornull(p_viewport);
|
Viewport *viewport = viewport_owner.getornull(p_viewport);
|
||||||
ERR_FAIL_COND(!viewport);
|
ERR_FAIL_COND(!viewport);
|
||||||
|
|
||||||
viewport->texture_filter = p_filter;
|
viewport->texture_filter = p_filter;
|
||||||
}
|
}
|
||||||
void RenderingServerViewport::viewport_set_default_canvas_item_texture_repeat(RID p_viewport, RS::CanvasItemTextureRepeat p_repeat) {
|
void RendererViewport::viewport_set_default_canvas_item_texture_repeat(RID p_viewport, RS::CanvasItemTextureRepeat p_repeat) {
|
||||||
ERR_FAIL_COND_MSG(p_repeat == RS::CANVAS_ITEM_TEXTURE_REPEAT_DEFAULT, "Viewport does not accept DEFAULT as texture repeat (it's the topmost choice already).)");
|
ERR_FAIL_COND_MSG(p_repeat == RS::CANVAS_ITEM_TEXTURE_REPEAT_DEFAULT, "Viewport does not accept DEFAULT as texture repeat (it's the topmost choice already).)");
|
||||||
Viewport *viewport = viewport_owner.getornull(p_viewport);
|
Viewport *viewport = viewport_owner.getornull(p_viewport);
|
||||||
ERR_FAIL_COND(!viewport);
|
ERR_FAIL_COND(!viewport);
|
||||||
@ -951,14 +951,14 @@ void RenderingServerViewport::viewport_set_default_canvas_item_texture_repeat(RI
|
|||||||
viewport->texture_repeat = p_repeat;
|
viewport->texture_repeat = p_repeat;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerViewport::viewport_set_sdf_oversize_and_scale(RID p_viewport, RS::ViewportSDFOversize p_size, RS::ViewportSDFScale p_scale) {
|
void RendererViewport::viewport_set_sdf_oversize_and_scale(RID p_viewport, RS::ViewportSDFOversize p_size, RS::ViewportSDFScale p_scale) {
|
||||||
Viewport *viewport = viewport_owner.getornull(p_viewport);
|
Viewport *viewport = viewport_owner.getornull(p_viewport);
|
||||||
ERR_FAIL_COND(!viewport);
|
ERR_FAIL_COND(!viewport);
|
||||||
|
|
||||||
RSG::storage->render_target_set_sdf_size_and_scale(viewport->render_target, p_size, p_scale);
|
RSG::storage->render_target_set_sdf_size_and_scale(viewport->render_target, p_size, p_scale);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool RenderingServerViewport::free(RID p_rid) {
|
bool RendererViewport::free(RID p_rid) {
|
||||||
if (viewport_owner.owns(p_rid)) {
|
if (viewport_owner.owns(p_rid)) {
|
||||||
Viewport *viewport = viewport_owner.getornull(p_rid);
|
Viewport *viewport = viewport_owner.getornull(p_rid);
|
||||||
|
|
||||||
@ -984,7 +984,7 @@ bool RenderingServerViewport::free(RID p_rid) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerViewport::handle_timestamp(String p_timestamp, uint64_t p_cpu_time, uint64_t p_gpu_time) {
|
void RendererViewport::handle_timestamp(String p_timestamp, uint64_t p_cpu_time, uint64_t p_gpu_time) {
|
||||||
RID *vp = timestamp_vp_map.getptr(p_timestamp);
|
RID *vp = timestamp_vp_map.getptr(p_timestamp);
|
||||||
if (!vp) {
|
if (!vp) {
|
||||||
return;
|
return;
|
||||||
@ -1006,9 +1006,9 @@ void RenderingServerViewport::handle_timestamp(String p_timestamp, uint64_t p_cp
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingServerViewport::set_default_clear_color(const Color &p_color) {
|
void RendererViewport::set_default_clear_color(const Color &p_color) {
|
||||||
RSG::storage->set_default_clear_color(p_color);
|
RSG::storage->set_default_clear_color(p_color);
|
||||||
}
|
}
|
||||||
|
|
||||||
RenderingServerViewport::RenderingServerViewport() {
|
RendererViewport::RendererViewport() {
|
||||||
}
|
}
|
@ -1,5 +1,5 @@
|
|||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
/* rendering_server_viewport.h */
|
/* renderer_viewport.h */
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
/* This file is part of: */
|
/* This file is part of: */
|
||||||
/* GODOT ENGINE */
|
/* GODOT ENGINE */
|
||||||
@ -33,11 +33,11 @@
|
|||||||
|
|
||||||
#include "core/templates/rid_owner.h"
|
#include "core/templates/rid_owner.h"
|
||||||
#include "core/templates/self_list.h"
|
#include "core/templates/self_list.h"
|
||||||
#include "rasterizer.h"
|
#include "renderer_compositor.h"
|
||||||
#include "servers/rendering_server.h"
|
#include "servers/rendering_server.h"
|
||||||
#include "servers/xr/xr_interface.h"
|
#include "servers/xr/xr_interface.h"
|
||||||
|
|
||||||
class RenderingServerViewport {
|
class RendererViewport {
|
||||||
public:
|
public:
|
||||||
struct CanvasBase {
|
struct CanvasBase {
|
||||||
};
|
};
|
||||||
@ -244,8 +244,8 @@ public:
|
|||||||
|
|
||||||
bool free(RID p_rid);
|
bool free(RID p_rid);
|
||||||
|
|
||||||
RenderingServerViewport();
|
RendererViewport();
|
||||||
virtual ~RenderingServerViewport() {}
|
virtual ~RendererViewport() {}
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // VISUALSERVERVIEWPORT_H
|
#endif // VISUALSERVERVIEWPORT_H
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user