summaryrefslogtreecommitdiff
path: root/drivers/gles3/rasterizer_canvas_gles3.h
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gles3/rasterizer_canvas_gles3.h')
-rw-r--r--drivers/gles3/rasterizer_canvas_gles3.h43
1 files changed, 25 insertions, 18 deletions
diff --git a/drivers/gles3/rasterizer_canvas_gles3.h b/drivers/gles3/rasterizer_canvas_gles3.h
index 908d79f9f8..b77b295de9 100644
--- a/drivers/gles3/rasterizer_canvas_gles3.h
+++ b/drivers/gles3/rasterizer_canvas_gles3.h
@@ -37,12 +37,16 @@
#include "rasterizer_storage_gles3.h"
#include "servers/rendering/renderer_canvas_render.h"
#include "servers/rendering/renderer_compositor.h"
+#include "storage/material_storage.h"
+#include "storage/texture_storage.h"
#include "shaders/canvas.glsl.gen.h"
class RasterizerSceneGLES3;
class RasterizerCanvasGLES3 : public RendererCanvasRender {
+ static RasterizerCanvasGLES3 *singleton;
+
_FORCE_INLINE_ void _update_transform_2d_to_mat2x4(const Transform2D &p_transform, float *p_mat2x4);
_FORCE_INLINE_ void _update_transform_2d_to_mat2x3(const Transform2D &p_transform, float *p_mat2x3);
@@ -50,13 +54,6 @@ class RasterizerCanvasGLES3 : public RendererCanvasRender {
_FORCE_INLINE_ void _update_transform_to_mat4(const Transform3D &p_transform, float *p_mat4);
enum {
- BASE_UNIFORM_BUFFER_OBJECT = 0,
- MATERIAL_UNIFORM_BUFFER_OBJECT = 1,
- TRANSFORMS_UNIFORM_BUFFER_OBJECT = 2,
- CANVAS_TEXTURE_UNIFORM_BUFFER_OBJECT = 3,
- };
-
- enum {
FLAGS_INSTANCING_MASK = 0x7F,
FLAGS_INSTANCING_HAS_COLORS = (1 << 7),
@@ -100,6 +97,15 @@ class RasterizerCanvasGLES3 : public RendererCanvasRender {
};
public:
+ //TODO move to Material storage
+ enum {
+ BASE_UNIFORM_BUFFER_OBJECT = 0,
+ GLOBAL_UNIFORM_BUFFER_OBJECT = 1,
+ LIGHT_UNIFORM_BUFFER_OBJECT = 2,
+ INSTANCE_UNIFORM_BUFFER_OBJECT = 3,
+ MATERIAL_UNIFORM_BUFFER_OBJECT = 4,
+ };
+
struct StateBuffer {
float canvas_transform[16];
float screen_transform[16];
@@ -164,9 +170,9 @@ public:
LocalVector<GLsync> fences;
uint32_t current_buffer = 0;
- InstanceData *instance_data_array;
+ InstanceData *instance_data_array = nullptr;
bool canvas_texscreen_used;
- CanvasShaderGLES3 canvas_shader;
+ //CanvasShaderGLES3 canvas_shader;
RID canvas_shader_current_version;
RID canvas_shader_default_version;
//CanvasShadowShaderGLES3 canvas_shadow_shader;
@@ -184,7 +190,7 @@ public:
RID current_tex = RID();
RID current_normal = RID();
RID current_specular = RID();
- RasterizerStorageGLES3::Texture *current_tex_ptr;
+ GLES3::Texture *current_tex_ptr;
RID current_shader_version = RID();
RS::PrimitiveType current_primitive = RS::PRIMITIVE_MAX;
uint32_t current_primitive_points = 0;
@@ -193,12 +199,14 @@ public:
bool end_batch = false;
Transform3D vp;
- Light *using_light;
+ Light *using_light = nullptr;
bool using_shadow;
bool using_transparent_rt;
// FROM RD Renderer
+ double time = 0.0;
+
uint32_t max_lights_per_render;
uint32_t max_lights_per_item;
uint32_t max_instances_per_batch;
@@ -215,9 +223,7 @@ public:
typedef void Texture;
- RasterizerSceneGLES3 *scene_render;
-
- RasterizerStorageGLES3 *storage;
+ RasterizerStorageGLES3 *storage = nullptr;
void _set_uniforms();
@@ -268,12 +274,13 @@ public:
void _render_items(RID p_to_render_target, int p_item_count, const Transform2D &p_canvas_transform_inverse, Light *p_lights, bool p_to_backbuffer = false);
void _render_item(RID p_render_target, const Item *p_item, const Transform2D &p_canvas_transform_inverse, Item *&current_clip, Light *p_lights, uint32_t &r_index);
void _render_batch(uint32_t &p_max_index);
- void _end_batch(uint32_t &p_max_index);
+ void _end_batch(const uint32_t p_index);
void _allocate_instance_data_buffer();
- void initialize();
- void finalize();
- RasterizerCanvasGLES3();
+ void set_time(double p_time);
+
+ static RasterizerCanvasGLES3 *get_singleton();
+ RasterizerCanvasGLES3(RasterizerStorageGLES3 *p_storage);
~RasterizerCanvasGLES3();
};