diff options
Diffstat (limited to 'servers/visual/visual_server_canvas.cpp')
| -rw-r--r-- | servers/visual/visual_server_canvas.cpp | 79 |
1 files changed, 17 insertions, 62 deletions
diff --git a/servers/visual/visual_server_canvas.cpp b/servers/visual/visual_server_canvas.cpp index 95118138dd..6701f12351 100644 --- a/servers/visual/visual_server_canvas.cpp +++ b/servers/visual/visual_server_canvas.cpp @@ -184,7 +184,7 @@ void VisualServerCanvas::_cull_canvas_item(Item *p_canvas_item, const Transform2 VisualServerRaster::redraw_request(); } - if ((!ci->commands.empty() && p_clip_rect.intersects_touch(global_rect)) || ci->vp_render || ci->copy_back_buffer) { + if ((ci->commands != NULL && p_clip_rect.intersects_touch(global_rect)) || ci->vp_render || ci->copy_back_buffer) { //something to draw? ci->final_transform = xform; ci->final_modulate = Color(modulate.r * ci->self_modulate.r, modulate.g * ci->self_modulate.g, modulate.b * ci->self_modulate.b, modulate.a * ci->self_modulate.a); @@ -487,7 +487,7 @@ void VisualServerCanvas::canvas_item_add_line(RID p_item, const Point2 &p_from, Item *canvas_item = canvas_item_owner.getornull(p_item); ERR_FAIL_COND(!canvas_item); - Item::CommandPrimitive *line = memnew(Item::CommandPrimitive); + Item::CommandPrimitive *line = canvas_item->alloc_command<Item::CommandPrimitive>(); ERR_FAIL_COND(!line); if (p_width > 1.001) { @@ -506,9 +506,6 @@ void VisualServerCanvas::canvas_item_add_line(RID p_item, const Point2 &p_from, line->colors[i] = p_color; } line->specular_shininess = Color(1, 1, 1, 1); - - canvas_item->rect_dirty = true; - canvas_item->commands.push_back(line); } void VisualServerCanvas::canvas_item_add_polyline(RID p_item, const Vector<Point2> &p_points, const Vector<Color> &p_colors, float p_width) { @@ -517,7 +514,7 @@ void VisualServerCanvas::canvas_item_add_polyline(RID p_item, const Vector<Point Item *canvas_item = canvas_item_owner.getornull(p_item); ERR_FAIL_COND(!canvas_item); - Item::CommandPolygon *pline = memnew(Item::CommandPolygon); + Item::CommandPolygon *pline = canvas_item->alloc_command<Item::CommandPolygon>(); ERR_FAIL_COND(!pline); pline->texture_binding.create(canvas_item->texture_filter, canvas_item->texture_repeat, RID(), RID(), RID(), VS::CANVAS_ITEM_TEXTURE_FILTER_NEAREST, VS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED, RID()); @@ -601,8 +598,6 @@ void VisualServerCanvas::canvas_item_add_polyline(RID p_item, const Vector<Point } #endif } - canvas_item->rect_dirty = true; - canvas_item->commands.push_back(pline); } void VisualServerCanvas::canvas_item_add_multiline(RID p_item, const Vector<Point2> &p_points, const Vector<Color> &p_colors, float p_width) { @@ -611,7 +606,7 @@ void VisualServerCanvas::canvas_item_add_multiline(RID p_item, const Vector<Poin Item *canvas_item = canvas_item_owner.getornull(p_item); ERR_FAIL_COND(!canvas_item); - Item::CommandPolygon *pline = memnew(Item::CommandPolygon); + Item::CommandPolygon *pline = canvas_item->alloc_command<Item::CommandPolygon>(); ERR_FAIL_COND(!pline); pline->texture_binding.create(canvas_item->texture_filter, canvas_item->texture_repeat, RID(), RID(), RID(), VS::CANVAS_ITEM_TEXTURE_FILTER_NEAREST, VS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED, RID()); @@ -624,9 +619,6 @@ void VisualServerCanvas::canvas_item_add_multiline(RID p_item, const Vector<Poin pline->polygon.create(Vector<int>(), p_points, p_colors); } else { } - - canvas_item->rect_dirty = true; - canvas_item->commands.push_back(pline); } void VisualServerCanvas::canvas_item_add_rect(RID p_item, const Rect2 &p_rect, const Color &p_color) { @@ -634,13 +626,10 @@ void VisualServerCanvas::canvas_item_add_rect(RID p_item, const Rect2 &p_rect, c Item *canvas_item = canvas_item_owner.getornull(p_item); ERR_FAIL_COND(!canvas_item); - Item::CommandRect *rect = memnew(Item::CommandRect); + Item::CommandRect *rect = canvas_item->alloc_command<Item::CommandRect>(); ERR_FAIL_COND(!rect); rect->modulate = p_color; rect->rect = p_rect; - canvas_item->rect_dirty = true; - - canvas_item->commands.push_back(rect); } void VisualServerCanvas::canvas_item_add_circle(RID p_item, const Point2 &p_pos, float p_radius, const Color &p_color) { @@ -648,7 +637,7 @@ void VisualServerCanvas::canvas_item_add_circle(RID p_item, const Point2 &p_pos, Item *canvas_item = canvas_item_owner.getornull(p_item); ERR_FAIL_COND(!canvas_item); - Item::CommandPolygon *circle = memnew(Item::CommandPolygon); + Item::CommandPolygon *circle = canvas_item->alloc_command<Item::CommandPolygon>(); ERR_FAIL_COND(!circle); circle->texture_binding.create(canvas_item->texture_filter, canvas_item->texture_repeat, RID(), RID(), RID(), VS::CANVAS_ITEM_TEXTURE_FILTER_NEAREST, VS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED, RID()); @@ -679,9 +668,6 @@ void VisualServerCanvas::canvas_item_add_circle(RID p_item, const Point2 &p_pos, Vector<Color> color; color.push_back(p_color); circle->polygon.create(indices, points, color); - - canvas_item->rect_dirty = true; - canvas_item->commands.push_back(circle); } void VisualServerCanvas::canvas_item_add_texture_rect(RID p_item, const Rect2 &p_rect, RID p_texture, bool p_tile, const Color &p_modulate, bool p_transpose, RID p_normal_map, RID p_specular_map, const Color &p_specular_color_shininess, VisualServer::CanvasItemTextureFilter p_filter, VisualServer::CanvasItemTextureRepeat p_repeat) { @@ -689,7 +675,7 @@ void VisualServerCanvas::canvas_item_add_texture_rect(RID p_item, const Rect2 &p Item *canvas_item = canvas_item_owner.getornull(p_item); ERR_FAIL_COND(!canvas_item); - Item::CommandRect *rect = memnew(Item::CommandRect); + Item::CommandRect *rect = canvas_item->alloc_command<Item::CommandRect>(); ERR_FAIL_COND(!rect); rect->modulate = p_modulate; rect->rect = p_rect; @@ -716,8 +702,6 @@ void VisualServerCanvas::canvas_item_add_texture_rect(RID p_item, const Rect2 &p } rect->texture_binding.create(canvas_item->texture_filter, canvas_item->texture_repeat, p_texture, p_normal_map, p_specular_map, p_filter, p_repeat, RID()); rect->specular_shininess = p_specular_color_shininess; - canvas_item->rect_dirty = true; - canvas_item->commands.push_back(rect); } void VisualServerCanvas::canvas_item_add_texture_rect_region(RID p_item, const Rect2 &p_rect, RID p_texture, const Rect2 &p_src_rect, const Color &p_modulate, bool p_transpose, RID p_normal_map, RID p_specular_map, const Color &p_specular_color_shininess, bool p_clip_uv, VisualServer::CanvasItemTextureFilter p_filter, VisualServer::CanvasItemTextureRepeat p_repeat) { @@ -725,7 +709,7 @@ void VisualServerCanvas::canvas_item_add_texture_rect_region(RID p_item, const R Item *canvas_item = canvas_item_owner.getornull(p_item); ERR_FAIL_COND(!canvas_item); - Item::CommandRect *rect = memnew(Item::CommandRect); + Item::CommandRect *rect = canvas_item->alloc_command<Item::CommandRect>(); ERR_FAIL_COND(!rect); rect->modulate = p_modulate; rect->rect = p_rect; @@ -763,10 +747,6 @@ void VisualServerCanvas::canvas_item_add_texture_rect_region(RID p_item, const R if (p_clip_uv) { rect->flags |= RasterizerCanvas::CANVAS_RECT_CLIP_UV; } - - canvas_item->rect_dirty = true; - - canvas_item->commands.push_back(rect); } void VisualServerCanvas::canvas_item_add_nine_patch(RID p_item, const Rect2 &p_rect, const Rect2 &p_source, RID p_texture, const Vector2 &p_topleft, const Vector2 &p_bottomright, VS::NinePatchAxisMode p_x_axis_mode, VS::NinePatchAxisMode p_y_axis_mode, bool p_draw_center, const Color &p_modulate, RID p_normal_map, RID p_specular_map, const Color &p_specular_color_shininess, VisualServer::CanvasItemTextureFilter p_filter, VisualServer::CanvasItemTextureRepeat p_repeat) { @@ -774,7 +754,7 @@ void VisualServerCanvas::canvas_item_add_nine_patch(RID p_item, const Rect2 &p_r Item *canvas_item = canvas_item_owner.getornull(p_item); ERR_FAIL_COND(!canvas_item); - Item::CommandNinePatch *style = memnew(Item::CommandNinePatch); + Item::CommandNinePatch *style = canvas_item->alloc_command<Item::CommandNinePatch>(); ERR_FAIL_COND(!style); style->texture_binding.create(canvas_item->texture_filter, canvas_item->texture_repeat, p_texture, p_normal_map, p_specular_map, p_filter, p_repeat, RID()); style->specular_shininess = p_specular_color_shininess; @@ -788,9 +768,6 @@ void VisualServerCanvas::canvas_item_add_nine_patch(RID p_item, const Rect2 &p_r style->margin[MARGIN_BOTTOM] = p_bottomright.y; style->axis_x = p_x_axis_mode; style->axis_y = p_y_axis_mode; - canvas_item->rect_dirty = true; - - canvas_item->commands.push_back(style); } void VisualServerCanvas::canvas_item_add_primitive(RID p_item, const Vector<Point2> &p_points, const Vector<Color> &p_colors, const Vector<Point2> &p_uvs, RID p_texture, float p_width, RID p_normal_map, RID p_specular_map, const Color &p_specular_color_shininess, VisualServer::CanvasItemTextureFilter p_filter, VisualServer::CanvasItemTextureRepeat p_repeat) { @@ -800,7 +777,7 @@ void VisualServerCanvas::canvas_item_add_primitive(RID p_item, const Vector<Poin Item *canvas_item = canvas_item_owner.getornull(p_item); ERR_FAIL_COND(!canvas_item); - Item::CommandPrimitive *prim = memnew(Item::CommandPrimitive); + Item::CommandPrimitive *prim = canvas_item->alloc_command<Item::CommandPrimitive>(); ERR_FAIL_COND(!prim); for (int i = 0; i < p_points.size(); i++) { @@ -821,9 +798,6 @@ void VisualServerCanvas::canvas_item_add_primitive(RID p_item, const Vector<Poin prim->texture_binding.create(canvas_item->texture_filter, canvas_item->texture_repeat, p_texture, p_normal_map, p_specular_map, p_filter, p_repeat, RID()); prim->specular_shininess = p_specular_color_shininess; - canvas_item->rect_dirty = true; - - canvas_item->commands.push_back(prim); } void VisualServerCanvas::canvas_item_add_polygon(RID p_item, const Vector<Point2> &p_points, const Vector<Color> &p_colors, const Vector<Point2> &p_uvs, RID p_texture, RID p_normal_map, RID p_specular_map, const Color &p_specular_color_shininess, VisualServer::CanvasItemTextureFilter p_filter, VisualServer::CanvasItemTextureRepeat p_repeat) { @@ -841,16 +815,12 @@ void VisualServerCanvas::canvas_item_add_polygon(RID p_item, const Vector<Point2 Vector<int> indices = Geometry::triangulate_polygon(p_points); ERR_FAIL_COND_MSG(indices.empty(), "Invalid polygon data, triangulation failed."); - Item::CommandPolygon *polygon = memnew(Item::CommandPolygon); + Item::CommandPolygon *polygon = canvas_item->alloc_command<Item::CommandPolygon>(); ERR_FAIL_COND(!polygon); polygon->primitive = VS::PRIMITIVE_TRIANGLES; polygon->texture_binding.create(canvas_item->texture_filter, canvas_item->texture_repeat, p_texture, p_normal_map, p_specular_map, p_filter, p_repeat, RID()); polygon->specular_shininess = p_specular_color_shininess; polygon->polygon.create(indices, p_points, p_colors, p_uvs); - - canvas_item->rect_dirty = true; - - canvas_item->commands.push_back(polygon); } void VisualServerCanvas::canvas_item_add_triangle_array(RID p_item, const Vector<int> &p_indices, const Vector<Point2> &p_points, const Vector<Color> &p_colors, const Vector<Point2> &p_uvs, const Vector<int> &p_bones, const Vector<float> &p_weights, RID p_texture, int p_count, RID p_normal_map, RID p_specular_map, const Color &p_specular_color_shininess, VisualServer::CanvasItemTextureFilter p_filter, VisualServer::CanvasItemTextureRepeat p_repeat) { @@ -867,16 +837,13 @@ void VisualServerCanvas::canvas_item_add_triangle_array(RID p_item, const Vector const Vector<int> &indices = p_indices; - Item::CommandPolygon *polygon = memnew(Item::CommandPolygon); + Item::CommandPolygon *polygon = canvas_item->alloc_command<Item::CommandPolygon>(); ERR_FAIL_COND(!polygon); polygon->texture_binding.create(canvas_item->texture_filter, canvas_item->texture_repeat, p_texture, p_normal_map, p_specular_map, p_filter, p_repeat, RID()); polygon->specular_shininess = p_specular_color_shininess; polygon->polygon.create(indices, p_points, p_colors, p_uvs, p_bones, p_weights); polygon->primitive = VS::PRIMITIVE_TRIANGLES; - canvas_item->rect_dirty = true; - - canvas_item->commands.push_back(polygon); } void VisualServerCanvas::canvas_item_add_set_transform(RID p_item, const Transform2D &p_transform) { @@ -884,11 +851,9 @@ void VisualServerCanvas::canvas_item_add_set_transform(RID p_item, const Transfo Item *canvas_item = canvas_item_owner.getornull(p_item); ERR_FAIL_COND(!canvas_item); - Item::CommandTransform *tr = memnew(Item::CommandTransform); + Item::CommandTransform *tr = canvas_item->alloc_command<Item::CommandTransform>(); ERR_FAIL_COND(!tr); tr->xform = p_transform; - - canvas_item->commands.push_back(tr); } void VisualServerCanvas::canvas_item_add_mesh(RID p_item, const RID &p_mesh, const Transform2D &p_transform, const Color &p_modulate, RID p_texture, RID p_normal_map, RID p_specular_map, const Color &p_specular_color_shininess, VisualServer::CanvasItemTextureFilter p_filter, VisualServer::CanvasItemTextureRepeat p_repeat) { @@ -896,22 +861,20 @@ void VisualServerCanvas::canvas_item_add_mesh(RID p_item, const RID &p_mesh, con Item *canvas_item = canvas_item_owner.getornull(p_item); ERR_FAIL_COND(!canvas_item); - Item::CommandMesh *m = memnew(Item::CommandMesh); + Item::CommandMesh *m = canvas_item->alloc_command<Item::CommandMesh>(); ERR_FAIL_COND(!m); m->mesh = p_mesh; m->texture_binding.create(canvas_item->texture_filter, canvas_item->texture_repeat, p_texture, p_normal_map, p_specular_map, p_filter, p_repeat, RID()); m->specular_shininess = p_specular_color_shininess; m->transform = p_transform; m->modulate = p_modulate; - - canvas_item->commands.push_back(m); } void VisualServerCanvas::canvas_item_add_particles(RID p_item, RID p_particles, RID p_texture, RID p_normal_map, RID p_specular_map, const Color &p_specular_color_shininess, VisualServer::CanvasItemTextureFilter p_filter, VisualServer::CanvasItemTextureRepeat p_repeat) { Item *canvas_item = canvas_item_owner.getornull(p_item); ERR_FAIL_COND(!canvas_item); - Item::CommandParticles *part = memnew(Item::CommandParticles); + Item::CommandParticles *part = canvas_item->alloc_command<Item::CommandParticles>(); ERR_FAIL_COND(!part); part->particles = p_particles; part->texture_binding.create(canvas_item->texture_filter, canvas_item->texture_repeat, p_texture, p_normal_map, p_specular_map, p_filter, p_repeat, RID()); @@ -919,9 +882,6 @@ void VisualServerCanvas::canvas_item_add_particles(RID p_item, RID p_particles, //take the chance and request processing for them, at least once until they become visible again VSG::storage->particles_request_process(p_particles); - - canvas_item->rect_dirty = true; - canvas_item->commands.push_back(part); } void VisualServerCanvas::canvas_item_add_multimesh(RID p_item, RID p_mesh, RID p_texture, RID p_normal_map, RID p_specular_map, const Color &p_specular_color_shininess, VisualServer::CanvasItemTextureFilter p_filter, VisualServer::CanvasItemTextureRepeat p_repeat) { @@ -929,14 +889,11 @@ void VisualServerCanvas::canvas_item_add_multimesh(RID p_item, RID p_mesh, RID p Item *canvas_item = canvas_item_owner.getornull(p_item); ERR_FAIL_COND(!canvas_item); - Item::CommandMultiMesh *mm = memnew(Item::CommandMultiMesh); + Item::CommandMultiMesh *mm = canvas_item->alloc_command<Item::CommandMultiMesh>(); ERR_FAIL_COND(!mm); mm->multimesh = p_mesh; mm->texture_binding.create(canvas_item->texture_filter, canvas_item->texture_repeat, p_texture, p_normal_map, p_specular_map, p_filter, p_repeat, mm->multimesh); mm->specular_shininess = p_specular_color_shininess; - - canvas_item->rect_dirty = true; - canvas_item->commands.push_back(mm); } void VisualServerCanvas::canvas_item_add_clip_ignore(RID p_item, bool p_ignore) { @@ -944,11 +901,9 @@ void VisualServerCanvas::canvas_item_add_clip_ignore(RID p_item, bool p_ignore) Item *canvas_item = canvas_item_owner.getornull(p_item); ERR_FAIL_COND(!canvas_item); - Item::CommandClipIgnore *ci = memnew(Item::CommandClipIgnore); + Item::CommandClipIgnore *ci = canvas_item->alloc_command<Item::CommandClipIgnore>(); ERR_FAIL_COND(!ci); ci->ignore = p_ignore; - - canvas_item->commands.push_back(ci); } void VisualServerCanvas::canvas_item_set_sort_children_by_y(RID p_item, bool p_enable) { |