| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- #ifndef RASTERIZERCANVASGLES3_H
- #define RASTERIZERCANVASGLES3_H
- #include "servers/visual/rasterizer.h"
- #include "rasterizer_storage_gles3.h"
- #include "shaders/canvas_shadow.glsl.h"
- class RasterizerCanvasGLES3 : public RasterizerCanvas {
- public:
- struct CanvasItemUBO {
- float projection_matrix[16];
- float time[4];
- };
- struct Data {
- GLuint canvas_quad_vertices;
- GLuint canvas_quad_array;
- GLuint primitive_quad_buffer;
- GLuint primitive_quad_buffer_arrays[4];
- } data;
- struct State {
- CanvasItemUBO canvas_item_ubo_data;
- GLuint canvas_item_ubo;
- bool canvas_texscreen_used;
- CanvasShaderGLES3 canvas_shader;
- CanvasShadowShaderGLES3 canvas_shadow_shader;
- bool using_texture_rect;
- RID current_tex;
- RasterizerStorageGLES3::Texture *current_tex_ptr;
- Transform vp;
- Color canvas_item_modulate;
- Matrix32 extra_matrix;
- Matrix32 final_transform;
- } state;
- RasterizerStorageGLES3 *storage;
- struct LightInternal : public RID_Data {
- struct UBOData {
- float light_matrix[16];
- float local_matrix[16];
- float shadow_matrix[16];
- float color[4];
- float shadow_color[4];
- float light_pos[2];
- float shadowpixel_size;
- float shadow_gradient;
- float light_height;
- float light_outside_alpha;
- float shadow_distance_mult;
- } ubo_data;
- GLuint ubo;
- };
- RID_Owner<LightInternal> light_internal_owner;
- virtual RID light_internal_create();
- virtual void light_internal_update(RID p_rid, Light* p_light);
- virtual void light_internal_free(RID p_rid);
- virtual void canvas_begin();
- virtual void canvas_end();
- _FORCE_INLINE_ void _set_texture_rect_mode(bool p_enable);
- _FORCE_INLINE_ RasterizerStorageGLES3::Texture* _bind_canvas_texture(const RID& p_texture);
- _FORCE_INLINE_ void _draw_gui_primitive(int p_points, const Vector2 *p_vertices, const Color* p_colors, const Vector2 *p_uvs);
- _FORCE_INLINE_ void _draw_polygon(int p_vertex_count, const int* p_indices, const Vector2* p_vertices, const Vector2* p_uvs, const Color* p_colors,const RID& p_texture,bool p_singlecolor);
- _FORCE_INLINE_ void _canvas_item_render_commands(Item *p_item,Item *current_clip,bool &reclip);
- virtual void canvas_render_items(Item *p_item_list,int p_z,const Color& p_modulate,Light *p_light);
- virtual void canvas_debug_viewport_shadows(Light* p_lights_with_shadow);
- virtual void canvas_light_shadow_buffer_update(RID p_buffer, const Matrix32& p_light_xform, int p_light_mask,float p_near, float p_far, LightOccluderInstance* p_occluders, CameraMatrix *p_xform_cache);
- virtual void reset_canvas();
- void draw_generic_textured_rect(const Rect2& p_rect, const Rect2& p_src);
- void initialize();
- void finalize();
- RasterizerCanvasGLES3();
- };
- #endif // RASTERIZERCANVASGLES3_H
|