Merge pull request #37349 from lawnjelly/kessel32_1
GLES2 2d Batch rendering (across items)
This commit is contained in:
@ -1066,6 +1066,8 @@ public:
|
||||
virtual void canvas_begin() = 0;
|
||||
virtual void canvas_end() = 0;
|
||||
|
||||
virtual void canvas_render_items_begin(const Color &p_modulate, Light *p_light, const Transform2D &p_base_transform) {}
|
||||
virtual void canvas_render_items_end() {}
|
||||
virtual void canvas_render_items(Item *p_item_list, int p_z, const Color &p_modulate, Light *p_light, const Transform2D &p_base_transform) = 0;
|
||||
virtual void canvas_debug_viewport_shadows(Light *p_lights_with_shadow) = 0;
|
||||
|
||||
|
||||
@ -42,11 +42,13 @@ void VisualServerCanvas::_render_canvas_item_tree(Item *p_canvas_item, const Tra
|
||||
|
||||
_render_canvas_item(p_canvas_item, p_transform, p_clip_rect, Color(1, 1, 1, 1), 0, z_list, z_last_list, NULL, NULL);
|
||||
|
||||
VSG::canvas_render->canvas_render_items_begin(p_modulate, p_lights, p_transform);
|
||||
for (int i = 0; i < z_range; i++) {
|
||||
if (!z_list[i])
|
||||
continue;
|
||||
VSG::canvas_render->canvas_render_items(z_list[i], VS::CANVAS_ITEM_Z_MIN + i, p_modulate, p_lights, p_transform);
|
||||
}
|
||||
VSG::canvas_render->canvas_render_items_end();
|
||||
}
|
||||
|
||||
void _collect_ysort_children(VisualServerCanvas::Item *p_canvas_item, Transform2D p_transform, VisualServerCanvas::Item *p_material_owner, const Color p_modulate, VisualServerCanvas::Item **r_items, int &r_index) {
|
||||
@ -259,6 +261,7 @@ void VisualServerCanvas::render_canvas(Canvas *p_canvas, const Transform2D &p_tr
|
||||
_render_canvas_item(ci[i].item, p_transform, p_clip_rect, Color(1, 1, 1, 1), 0, z_list, z_last_list, NULL, NULL);
|
||||
}
|
||||
|
||||
VSG::canvas_render->canvas_render_items_begin(p_canvas->modulate, p_lights, p_transform);
|
||||
for (int i = 0; i < z_range; i++) {
|
||||
if (!z_list[i])
|
||||
continue;
|
||||
@ -269,6 +272,7 @@ void VisualServerCanvas::render_canvas(Canvas *p_canvas, const Transform2D &p_tr
|
||||
|
||||
VSG::canvas_render->canvas_render_items(z_list[i], VS::CANVAS_ITEM_Z_MIN + i, p_canvas->modulate, p_lights, p_transform);
|
||||
}
|
||||
VSG::canvas_render->canvas_render_items_end();
|
||||
} else {
|
||||
|
||||
for (int i = 0; i < l; i++) {
|
||||
|
||||
@ -349,6 +349,8 @@ void VisualServerViewport::draw_viewports() {
|
||||
vp->render_info[VS::VIEWPORT_RENDER_INFO_SHADER_CHANGES_IN_FRAME] = VSG::storage->get_captured_render_info(VS::INFO_SHADER_CHANGES_IN_FRAME);
|
||||
vp->render_info[VS::VIEWPORT_RENDER_INFO_SURFACE_CHANGES_IN_FRAME] = VSG::storage->get_captured_render_info(VS::INFO_SURFACE_CHANGES_IN_FRAME);
|
||||
vp->render_info[VS::VIEWPORT_RENDER_INFO_DRAW_CALLS_IN_FRAME] = VSG::storage->get_captured_render_info(VS::INFO_DRAW_CALLS_IN_FRAME);
|
||||
vp->render_info[VS::VIEWPORT_RENDER_INFO_2D_ITEMS_IN_FRAME] = VSG::storage->get_captured_render_info(VS::INFO_2D_ITEMS_IN_FRAME);
|
||||
vp->render_info[VS::VIEWPORT_RENDER_INFO_2D_DRAW_CALLS_IN_FRAME] = VSG::storage->get_captured_render_info(VS::INFO_2D_DRAW_CALLS_IN_FRAME);
|
||||
|
||||
if (vp->viewport_to_screen_rect != Rect2() && (!vp->viewport_render_direct_to_screen || !VSG::rasterizer->is_low_end())) {
|
||||
//copy to screen if set as such
|
||||
|
||||
@ -2188,6 +2188,8 @@ void VisualServer::_bind_methods() {
|
||||
BIND_ENUM_CONSTANT(VIEWPORT_RENDER_INFO_SHADER_CHANGES_IN_FRAME);
|
||||
BIND_ENUM_CONSTANT(VIEWPORT_RENDER_INFO_SURFACE_CHANGES_IN_FRAME);
|
||||
BIND_ENUM_CONSTANT(VIEWPORT_RENDER_INFO_DRAW_CALLS_IN_FRAME);
|
||||
BIND_ENUM_CONSTANT(VIEWPORT_RENDER_INFO_2D_ITEMS_IN_FRAME);
|
||||
BIND_ENUM_CONSTANT(VIEWPORT_RENDER_INFO_2D_DRAW_CALLS_IN_FRAME);
|
||||
BIND_ENUM_CONSTANT(VIEWPORT_RENDER_INFO_MAX);
|
||||
|
||||
BIND_ENUM_CONSTANT(VIEWPORT_DEBUG_DRAW_DISABLED);
|
||||
@ -2247,6 +2249,8 @@ void VisualServer::_bind_methods() {
|
||||
BIND_ENUM_CONSTANT(INFO_SHADER_CHANGES_IN_FRAME);
|
||||
BIND_ENUM_CONSTANT(INFO_SURFACE_CHANGES_IN_FRAME);
|
||||
BIND_ENUM_CONSTANT(INFO_DRAW_CALLS_IN_FRAME);
|
||||
BIND_ENUM_CONSTANT(INFO_2D_ITEMS_IN_FRAME);
|
||||
BIND_ENUM_CONSTANT(INFO_2D_DRAW_CALLS_IN_FRAME);
|
||||
BIND_ENUM_CONSTANT(INFO_USAGE_VIDEO_MEM_TOTAL);
|
||||
BIND_ENUM_CONSTANT(INFO_VIDEO_MEM_USED);
|
||||
BIND_ENUM_CONSTANT(INFO_TEXTURE_MEM_USED);
|
||||
@ -2411,6 +2415,20 @@ VisualServer::VisualServer() {
|
||||
GLOBAL_DEF("rendering/quality/depth_prepass/disable_for_vendors", "PowerVR,Mali,Adreno,Apple");
|
||||
|
||||
GLOBAL_DEF("rendering/quality/filters/use_nearest_mipmap_filter", false);
|
||||
|
||||
GLOBAL_DEF("rendering/gles2/batching/use_batching", true);
|
||||
GLOBAL_DEF("rendering/gles2/batching/max_join_item_commands", 16);
|
||||
GLOBAL_DEF("rendering/gles2/batching/colored_vertex_format_threshold", 0.25f);
|
||||
GLOBAL_DEF("rendering/gles2/batching/light_scissor_area_threshold", 1.0f);
|
||||
GLOBAL_DEF("rendering/gles2/batching/batch_buffer_size", 16384);
|
||||
GLOBAL_DEF("rendering/gles2/debug/flash_batching", false);
|
||||
GLOBAL_DEF("rendering/gles2/debug/diagnose_frame", false);
|
||||
GLOBAL_DEF_RST("rendering/gles2/debug/use_batching_in_editor", true);
|
||||
|
||||
ProjectSettings::get_singleton()->set_custom_property_info("rendering/gles2/batching/max_join_item_commands", PropertyInfo(Variant::INT, "rendering/gles2/batching/max_join_item_commands", PROPERTY_HINT_RANGE, "0,65535"));
|
||||
ProjectSettings::get_singleton()->set_custom_property_info("rendering/gles2/batching/colored_vertex_format_threshold", PropertyInfo(Variant::REAL, "rendering/gles2/batching/colored_vertex_format_threshold", PROPERTY_HINT_RANGE, "0.0,1.0,0.01"));
|
||||
ProjectSettings::get_singleton()->set_custom_property_info("rendering/gles2/batching/batch_buffer_size", PropertyInfo(Variant::INT, "rendering/gles2/batching/batch_buffer_size", PROPERTY_HINT_RANGE, "1024,65535,1024"));
|
||||
ProjectSettings::get_singleton()->set_custom_property_info("rendering/gles2/batching/light_scissor_area_threshold", PropertyInfo(Variant::REAL, "rendering/gles2/batching/light_scissor_area_threshold", PROPERTY_HINT_RANGE, "0.0,1.0"));
|
||||
}
|
||||
|
||||
VisualServer::~VisualServer() {
|
||||
|
||||
@ -689,6 +689,8 @@ public:
|
||||
VIEWPORT_RENDER_INFO_SHADER_CHANGES_IN_FRAME,
|
||||
VIEWPORT_RENDER_INFO_SURFACE_CHANGES_IN_FRAME,
|
||||
VIEWPORT_RENDER_INFO_DRAW_CALLS_IN_FRAME,
|
||||
VIEWPORT_RENDER_INFO_2D_ITEMS_IN_FRAME,
|
||||
VIEWPORT_RENDER_INFO_2D_DRAW_CALLS_IN_FRAME,
|
||||
VIEWPORT_RENDER_INFO_MAX
|
||||
};
|
||||
|
||||
@ -1016,6 +1018,8 @@ public:
|
||||
INFO_SHADER_CHANGES_IN_FRAME,
|
||||
INFO_SURFACE_CHANGES_IN_FRAME,
|
||||
INFO_DRAW_CALLS_IN_FRAME,
|
||||
INFO_2D_ITEMS_IN_FRAME,
|
||||
INFO_2D_DRAW_CALLS_IN_FRAME,
|
||||
INFO_USAGE_VIDEO_MEM_TOTAL,
|
||||
INFO_VIDEO_MEM_USED,
|
||||
INFO_TEXTURE_MEM_USED,
|
||||
|
||||
Reference in New Issue
Block a user