@@ -273,7 +273,7 @@ bool SVGTexture::has_alpha() const {
273273 return true ;
274274}
275275
276- void SVGTexture::draw (RID p_canvas_item, const Point2 &p_pos, const Color &p_modulate, bool p_transpose ) const {
276+ RID SVGTexture::get_scaled_rid ( ) const {
277277 double scale = 1.0 ;
278278 CanvasItem *ci = CanvasItem::get_current_item_drawn ();
279279 if (ci) {
@@ -282,37 +282,19 @@ void SVGTexture::draw(RID p_canvas_item, const Point2 &p_pos, const Color &p_mod
282282 scale = vp->get_oversampling ();
283283 }
284284 }
285- RID rid = _ensure_scale (scale);
285+ return _ensure_scale (scale);
286+ }
286287
287- RenderingServer::get_singleton ()->canvas_item_add_texture_rect (p_canvas_item, Rect2 (p_pos, size), rid, false , p_modulate, p_transpose);
288+ void SVGTexture::draw (RID p_canvas_item, const Point2 &p_pos, const Color &p_modulate, bool p_transpose) const {
289+ RenderingServer::get_singleton ()->canvas_item_add_texture_rect (p_canvas_item, Rect2 (p_pos, size), get_scaled_rid (), false , p_modulate, p_transpose);
288290}
289291
290292void SVGTexture::draw_rect (RID p_canvas_item, const Rect2 &p_rect, bool p_tile, const Color &p_modulate, bool p_transpose) const {
291- double scale = 1.0 ;
292- CanvasItem *ci = CanvasItem::get_current_item_drawn ();
293- if (ci) {
294- Viewport *vp = ci->get_viewport ();
295- if (vp) {
296- scale = vp->get_oversampling ();
297- }
298- }
299- RID rid = _ensure_scale (scale);
300-
301- RenderingServer::get_singleton ()->canvas_item_add_texture_rect (p_canvas_item, p_rect, rid, p_tile, p_modulate, p_transpose);
293+ RenderingServer::get_singleton ()->canvas_item_add_texture_rect (p_canvas_item, p_rect, get_scaled_rid (), p_tile, p_modulate, p_transpose);
302294}
303295
304296void SVGTexture::draw_rect_region (RID p_canvas_item, const Rect2 &p_rect, const Rect2 &p_src_rect, const Color &p_modulate, bool p_transpose, bool p_clip_uv) const {
305- double scale = 1.0 ;
306- CanvasItem *ci = CanvasItem::get_current_item_drawn ();
307- if (ci) {
308- Viewport *vp = ci->get_viewport ();
309- if (vp) {
310- scale = vp->get_oversampling ();
311- }
312- }
313- RID rid = _ensure_scale (scale);
314-
315- RenderingServer::get_singleton ()->canvas_item_add_texture_rect_region (p_canvas_item, p_rect, rid, p_src_rect, p_modulate, p_transpose, p_clip_uv);
297+ RenderingServer::get_singleton ()->canvas_item_add_texture_rect_region (p_canvas_item, p_rect, get_scaled_rid (), p_src_rect, p_modulate, p_transpose, p_clip_uv);
316298}
317299
318300bool SVGTexture::is_pixel_opaque (int p_x, int p_y) const {
@@ -382,6 +364,7 @@ void SVGTexture::_bind_methods() {
382364 ClassDB::bind_method (D_METHOD (" set_color_map" , " color_map" ), &SVGTexture::set_color_map);
383365 ClassDB::bind_method (D_METHOD (" get_color_map" ), &SVGTexture::get_color_map);
384366 ClassDB::bind_method (D_METHOD (" set_size_override" , " size" ), &SVGTexture::set_size_override);
367+ ClassDB::bind_method (D_METHOD (" get_scaled_rid" ), &SVGTexture::get_scaled_rid);
385368
386369 ADD_PROPERTY (PropertyInfo (Variant::STRING, " _source" , PROPERTY_HINT_NONE, " " , PROPERTY_USAGE_INTERNAL | PROPERTY_USAGE_STORAGE), " set_source" , " get_source" );
387370 ADD_PROPERTY (PropertyInfo (Variant::FLOAT, " base_scale" , PROPERTY_HINT_RANGE, " 0.01,10.0,0.01" ), " set_base_scale" , " get_base_scale" );
0 commit comments