Skip to content

Commit 1d21779

Browse files
authored
Merge pull request #59984 from BastiaanOlij/more_storage_20220407
More work on splitting up RendererStorage
2 parents 5905993 + 0b4fd92 commit 1d21779

File tree

65 files changed

+9300
-9045
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

65 files changed

+9300
-9045
lines changed

drivers/gles3/rasterizer_canvas_gles3.cpp

+26-20
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,9 @@
3838

3939
#include "core/config/project_settings.h"
4040
#include "servers/rendering/rendering_server_default.h"
41-
#include "storage/canvas_texture_storage.h"
4241
#include "storage/config.h"
4342
#include "storage/material_storage.h"
43+
#include "storage/texture_storage.h"
4444

4545
#ifndef GLES_OVER_GL
4646
#define glClearDepth glClearDepthf
@@ -116,9 +116,11 @@ void RasterizerCanvasGLES3::_update_transform_to_mat4(const Transform3D &p_trans
116116
}
117117

118118
void RasterizerCanvasGLES3::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) {
119-
storage->frame.current_rt = nullptr;
119+
GLES3::TextureStorage *texture_storage = GLES3::TextureStorage::get_singleton();
120+
121+
texture_storage->frame.current_rt = nullptr;
120122

121-
storage->_set_current_render_target(p_to_render_target);
123+
texture_storage->_set_current_render_target(p_to_render_target);
122124

123125
Transform2D canvas_transform_inverse = p_canvas_transform.affine_inverse();
124126

@@ -130,7 +132,7 @@ void RasterizerCanvasGLES3::canvas_render_items(RID p_to_render_target, Item *p_
130132
//update canvas state uniform buffer
131133
StateBuffer state_buffer;
132134

133-
Size2i ssize = storage->render_target_get_size(p_to_render_target);
135+
Size2i ssize = texture_storage->render_target_get_size(p_to_render_target);
134136

135137
Transform3D screen_transform;
136138
screen_transform.translate(-(ssize.width / 2.0f), -(ssize.height / 2.0f), 0.0f);
@@ -149,11 +151,11 @@ void RasterizerCanvasGLES3::canvas_render_items(RID p_to_render_target, Item *p_
149151
state_buffer.canvas_modulate[2] = p_modulate.b;
150152
state_buffer.canvas_modulate[3] = p_modulate.a;
151153

152-
Size2 render_target_size = storage->render_target_get_size(p_to_render_target);
154+
Size2 render_target_size = texture_storage->render_target_get_size(p_to_render_target);
153155
state_buffer.screen_pixel_size[0] = 1.0 / render_target_size.x;
154156
state_buffer.screen_pixel_size[1] = 1.0 / render_target_size.y;
155157

156-
state_buffer.time = storage->frame.time;
158+
state_buffer.time = texture_storage->frame.time;
157159
state_buffer.use_pixel_snap = p_snap_2d_vertices_to_pixel;
158160

159161
state_buffer.directional_light_count = 0; //directional_light_count;
@@ -166,7 +168,7 @@ void RasterizerCanvasGLES3::canvas_render_items(RID p_to_render_target, Item *p_
166168
state_buffer.screen_to_sdf[0] = 1.0 / state_buffer.sdf_to_screen[0];
167169
state_buffer.screen_to_sdf[1] = 1.0 / state_buffer.sdf_to_screen[1];
168170

169-
Rect2 sdf_rect = storage->render_target_get_sdf_rect(p_to_render_target);
171+
Rect2 sdf_rect = texture_storage->render_target_get_sdf_rect(p_to_render_target);
170172
Rect2 sdf_tex_rect(sdf_rect.position / canvas_scale, sdf_rect.size / canvas_scale);
171173

172174
state_buffer.sdf_to_tex[0] = 1.0 / sdf_tex_rect.size.width;
@@ -881,19 +883,21 @@ void RasterizerCanvasGLES3::update() {
881883
}
882884

883885
void RasterizerCanvasGLES3::canvas_begin() {
886+
GLES3::TextureStorage *texture_storage = GLES3::TextureStorage::get_singleton();
887+
884888
state.using_transparent_rt = false;
885889

886-
if (storage->frame.current_rt) {
887-
storage->bind_framebuffer(storage->frame.current_rt->fbo);
888-
state.using_transparent_rt = storage->frame.current_rt->flags[RendererStorage::RENDER_TARGET_TRANSPARENT];
890+
if (texture_storage->frame.current_rt) {
891+
glBindFramebuffer(GL_FRAMEBUFFER, texture_storage->frame.current_rt->fbo);
892+
state.using_transparent_rt = texture_storage->frame.current_rt->flags[GLES3::TextureStorage::RENDER_TARGET_TRANSPARENT];
889893
}
890894

891-
if (storage->frame.current_rt && storage->frame.current_rt->clear_requested) {
892-
const Color &col = storage->frame.current_rt->clear_color;
895+
if (texture_storage->frame.current_rt && texture_storage->frame.current_rt->clear_requested) {
896+
const Color &col = texture_storage->frame.current_rt->clear_color;
893897
glClearColor(col.r, col.g, col.b, col.a);
894898

895899
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
896-
storage->frame.current_rt->clear_requested = false;
900+
texture_storage->frame.current_rt->clear_requested = false;
897901
}
898902

899903
reset_canvas();
@@ -934,7 +938,7 @@ void RasterizerCanvasGLES3::_bind_canvas_texture(RID p_texture, RS::CanvasItemTe
934938

935939
ct = t->canvas_texture;
936940
} else {
937-
ct = GLES3::CanvasTextureStorage::get_singleton()->get_canvas_texture(p_texture);
941+
ct = GLES3::TextureStorage::get_singleton()->get_canvas_texture(p_texture);
938942
}
939943

940944
if (!ct) {
@@ -1041,6 +1045,8 @@ void RasterizerCanvasGLES3::_set_uniforms() {
10411045
}
10421046

10431047
void RasterizerCanvasGLES3::reset_canvas() {
1048+
GLES3::TextureStorage *texture_storage = GLES3::TextureStorage::get_singleton();
1049+
10441050
glDisable(GL_CULL_FACE);
10451051
glDisable(GL_DEPTH_TEST);
10461052
glDisable(GL_SCISSOR_TEST);
@@ -1049,7 +1055,7 @@ void RasterizerCanvasGLES3::reset_canvas() {
10491055

10501056
// Default to Mix.
10511057
glBlendEquation(GL_FUNC_ADD);
1052-
if (storage->frame.current_rt && storage->frame.current_rt->flags[RendererStorage::RENDER_TARGET_TRANSPARENT]) {
1058+
if (texture_storage->frame.current_rt && texture_storage->frame.current_rt->flags[GLES3::TextureStorage::RENDER_TARGET_TRANSPARENT]) {
10531059
glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
10541060
} else {
10551061
glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ZERO, GL_ONE);
@@ -1255,7 +1261,7 @@ void RasterizerCanvasGLES3::_allocate_instance_data_buffer() {
12551261
}
12561262

12571263
void RasterizerCanvasGLES3::initialize() {
1258-
GLES3::CanvasTextureStorage *canvas_texture_storage = GLES3::CanvasTextureStorage::get_singleton();
1264+
GLES3::TextureStorage *texture_storage = GLES3::TextureStorage::get_singleton();
12591265
GLES3::MaterialStorage *material_storage = GLES3::MaterialStorage::get_singleton();
12601266

12611267
// quad buffer
@@ -1450,8 +1456,8 @@ void fragment() {
14501456
material_storage->material_set_shader(default_canvas_group_material, default_canvas_group_shader);
14511457
}
14521458

1453-
default_canvas_texture = canvas_texture_storage->canvas_texture_allocate();
1454-
canvas_texture_storage->canvas_texture_initialize(default_canvas_texture);
1459+
default_canvas_texture = texture_storage->canvas_texture_allocate();
1460+
texture_storage->canvas_texture_initialize(default_canvas_texture);
14551461

14561462
state.using_light = nullptr;
14571463
state.using_transparent_rt = false;
@@ -1470,13 +1476,13 @@ RasterizerCanvasGLES3::RasterizerCanvasGLES3() {
14701476
}
14711477

14721478
RasterizerCanvasGLES3::~RasterizerCanvasGLES3() {
1473-
GLES3::CanvasTextureStorage *canvas_texture_storage = GLES3::CanvasTextureStorage::get_singleton();
1479+
GLES3::TextureStorage *texture_storage = GLES3::TextureStorage::get_singleton();
14741480
GLES3::MaterialStorage *material_storage = GLES3::MaterialStorage::get_singleton();
14751481

14761482
state.canvas_shader.version_free(state.canvas_shader_default_version);
14771483
material_storage->material_free(default_canvas_group_material);
14781484
material_storage->shader_free(default_canvas_group_shader);
1479-
canvas_texture_storage->canvas_texture_free(default_canvas_texture);
1485+
texture_storage->canvas_texture_free(default_canvas_texture);
14801486
singleton = nullptr;
14811487
}
14821488

drivers/gles3/rasterizer_canvas_gles3.h

-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@
3737
#include "rasterizer_storage_gles3.h"
3838
#include "servers/rendering/renderer_canvas_render.h"
3939
#include "servers/rendering/renderer_compositor.h"
40-
#include "storage/canvas_texture_storage.h"
4140
#include "storage/material_storage.h"
4241
#include "storage/texture_storage.h"
4342

drivers/gles3/rasterizer_gles3.cpp

+13-8
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434

3535
#include "core/config/project_settings.h"
3636
#include "core/os/os.h"
37+
#include "storage/texture_storage.h"
3738

3839
#define _EXT_DEBUG_OUTPUT_SYNCHRONOUS_ARB 0x8242
3940
#define _EXT_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_ARB 0x8243
@@ -87,6 +88,8 @@
8788
#endif
8889

8990
void RasterizerGLES3::begin_frame(double frame_step) {
91+
GLES3::TextureStorage *texture_storage = GLES3::TextureStorage::get_singleton();
92+
9093
frame++;
9194
delta = frame_step;
9295

@@ -95,9 +98,9 @@ void RasterizerGLES3::begin_frame(double frame_step) {
9598
double time_roll_over = GLOBAL_GET("rendering/limits/time/time_rollover_secs");
9699
time_total = Math::fmod(time_total, time_roll_over);
97100

98-
storage.frame.time = time_total;
99-
storage.frame.count++;
100-
storage.frame.delta = frame_step;
101+
texture_storage->frame.time = time_total;
102+
texture_storage->frame.count++;
103+
texture_storage->frame.delta = frame_step;
101104

102105
storage.update_dirty_resources();
103106

@@ -269,9 +272,10 @@ void RasterizerGLES3::prepare_for_blitting_render_targets() {
269272
}
270273

271274
void RasterizerGLES3::_blit_render_target_to_screen(RID p_render_target, DisplayServer::WindowID p_screen, const Rect2 &p_screen_rect) {
272-
ERR_FAIL_COND(storage.frame.current_rt);
275+
GLES3::TextureStorage *texture_storage = GLES3::TextureStorage::get_singleton();
276+
ERR_FAIL_COND(texture_storage->frame.current_rt);
273277

274-
GLES3::RenderTarget *rt = storage.render_target_owner.get_or_null(p_render_target);
278+
GLES3::RenderTarget *rt = texture_storage->get_render_target(p_render_target);
275279
ERR_FAIL_COND(!rt);
276280

277281
// TODO: do we need a keep 3d linear option?
@@ -282,16 +286,17 @@ void RasterizerGLES3::_blit_render_target_to_screen(RID p_render_target, Display
282286
glBindFramebuffer(GL_READ_FRAMEBUFFER, rt->fbo);
283287
}
284288
glReadBuffer(GL_COLOR_ATTACHMENT0);
285-
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, RasterizerStorageGLES3::system_fbo);
289+
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, GLES3::TextureStorage::system_fbo);
286290
glBlitFramebuffer(0, 0, rt->width, rt->height, 0, p_screen_rect.size.y, p_screen_rect.size.x, 0, GL_COLOR_BUFFER_BIT, GL_NEAREST);
287291
}
288292

289293
// is this p_screen useless in a multi window environment?
290294
void RasterizerGLES3::blit_render_targets_to_screen(DisplayServer::WindowID p_screen, const BlitToScreen *p_render_targets, int p_amount) {
291295
// do this once off for all blits
292-
storage.bind_framebuffer_system();
296+
GLES3::TextureStorage *texture_storage = GLES3::TextureStorage::get_singleton();
297+
glBindFramebuffer(GL_FRAMEBUFFER, GLES3::TextureStorage::system_fbo);
293298

294-
storage.frame.current_rt = nullptr;
299+
texture_storage->frame.current_rt = nullptr;
295300

296301
for (int i = 0; i < p_amount; i++) {
297302
const BlitToScreen &blit = p_render_targets[i];

drivers/gles3/rasterizer_gles3.h

+6-7
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,11 @@
3737
#include "rasterizer_scene_gles3.h"
3838
#include "rasterizer_storage_gles3.h"
3939
#include "servers/rendering/renderer_compositor.h"
40-
#include "storage/canvas_texture_storage.h"
4140
#include "storage/config.h"
42-
#include "storage/decal_atlas_storage.h"
41+
#include "storage/light_storage.h"
4342
#include "storage/material_storage.h"
4443
#include "storage/mesh_storage.h"
45-
#include "storage/render_target_storage.h"
44+
#include "storage/particles_storage.h"
4645
#include "storage/texture_storage.h"
4746

4847
class RasterizerGLES3 : public RendererCompositor {
@@ -54,23 +53,23 @@ class RasterizerGLES3 : public RendererCompositor {
5453

5554
protected:
5655
GLES3::Config config;
57-
GLES3::CanvasTextureStorage canvas_texture_storage;
5856
GLES3::TextureStorage texture_storage;
59-
GLES3::DecalAtlasStorage decal_atlas_storage;
6057
GLES3::MaterialStorage material_storage;
6158
GLES3::MeshStorage mesh_storage;
59+
GLES3::ParticlesStorage particles_storage;
60+
GLES3::LightStorage light_storage;
6261
RasterizerStorageGLES3 storage;
6362
RasterizerCanvasGLES3 canvas;
6463
RasterizerSceneGLES3 scene;
6564

6665
void _blit_render_target_to_screen(RID p_render_target, DisplayServer::WindowID p_screen, const Rect2 &p_screen_rect);
6766

6867
public:
69-
RendererCanvasTextureStorage *get_canvas_texture_storage() { return &canvas_texture_storage; }
68+
RendererLightStorage *get_light_storage() { return &light_storage; }
7069
RendererMaterialStorage *get_material_storage() { return &material_storage; }
7170
RendererMeshStorage *get_mesh_storage() { return &mesh_storage; }
71+
RendererParticlesStorage *get_particles_storage() { return &particles_storage; }
7272
RendererTextureStorage *get_texture_storage() { return &texture_storage; }
73-
RendererDecalAtlasStorage *get_decal_atlas_storage() { return &decal_atlas_storage; }
7473
RendererStorage *get_storage() { return &storage; }
7574
RendererCanvasRender *get_canvas() { return &canvas; }
7675
RendererSceneRender *get_scene() { return &scene; }

0 commit comments

Comments
 (0)