summaryrefslogtreecommitdiffstats
path: root/servers/rendering/renderer_rd/storage_rd
diff options
context:
space:
mode:
authorBastiaan Olij <mux213@gmail.com>2023-02-27 14:03:41 +1100
committerBastiaan Olij <mux213@gmail.com>2023-03-09 21:58:55 +1100
commita8ec72cf94333c27651a47e3964a8a02c66dc791 (patch)
treef02a61e1a9dd94dbfbe108042bc54ecf03765ed3 /servers/rendering/renderer_rd/storage_rd
parent0cd148313213e2923004be65bafd6a3781c917ec (diff)
downloadredot-engine-a8ec72cf94333c27651a47e3964a8a02c66dc791.tar.gz
Move roughness limiter and sort into their own classes
Diffstat (limited to 'servers/rendering/renderer_rd/storage_rd')
-rw-r--r--servers/rendering/renderer_rd/storage_rd/particles_storage.cpp11
-rw-r--r--servers/rendering/renderer_rd/storage_rd/particles_storage.h4
2 files changed, 14 insertions, 1 deletions
diff --git a/servers/rendering/renderer_rd/storage_rd/particles_storage.cpp b/servers/rendering/renderer_rd/storage_rd/particles_storage.cpp
index 3ed5d7dda8..d8b78de526 100644
--- a/servers/rendering/renderer_rd/storage_rd/particles_storage.cpp
+++ b/servers/rendering/renderer_rd/storage_rd/particles_storage.cpp
@@ -47,6 +47,10 @@ ParticlesStorage::ParticlesStorage() {
MaterialStorage *material_storage = MaterialStorage::get_singleton();
+ /* Effects */
+
+ sort_effects = memnew(SortEffects);
+
/* Particles */
{
@@ -206,6 +210,11 @@ ParticlesStorage::~ParticlesStorage() {
material_storage->material_free(particles_shader.default_material);
material_storage->shader_free(particles_shader.default_shader);
+ if (sort_effects) {
+ memdelete(sort_effects);
+ sort_effects = nullptr;
+ }
+
singleton = nullptr;
}
@@ -1228,7 +1237,7 @@ void ParticlesStorage::particles_set_view_axis(RID p_particles, const Vector3 &p
RD::get_singleton()->compute_list_dispatch_threads(compute_list, particles->amount, 1, 1);
RD::get_singleton()->compute_list_end();
- RendererCompositorRD::get_singleton()->get_effects()->sort_buffer(particles->particles_sort_uniform_set, particles->amount);
+ sort_effects->sort_buffer(particles->particles_sort_uniform_set, particles->amount);
}
if (particles->trails_enabled && particles->trail_bind_poses.size() > 1) {
diff --git a/servers/rendering/renderer_rd/storage_rd/particles_storage.h b/servers/rendering/renderer_rd/storage_rd/particles_storage.h
index 9308d3ce9e..4f9253144e 100644
--- a/servers/rendering/renderer_rd/storage_rd/particles_storage.h
+++ b/servers/rendering/renderer_rd/storage_rd/particles_storage.h
@@ -34,6 +34,7 @@
#include "core/templates/local_vector.h"
#include "core/templates/rid_owner.h"
#include "core/templates/self_list.h"
+#include "servers/rendering/renderer_rd/effects/sort_effects.h"
#include "servers/rendering/renderer_rd/shaders/particles.glsl.gen.h"
#include "servers/rendering/renderer_rd/shaders/particles_copy.glsl.gen.h"
#include "servers/rendering/renderer_rd/storage_rd/material_storage.h"
@@ -47,6 +48,9 @@ class ParticlesStorage : public RendererParticlesStorage {
private:
static ParticlesStorage *singleton;
+ /* EFFECTS */
+ SortEffects *sort_effects = nullptr;
+
/* PARTICLES */
struct ParticleData {