@@ -468,7 +468,7 @@ void RasterizerCanvasGLES3::canvas_render_items(RID p_to_render_target, Item *p_
468468 update_skeletons = false ;
469469 }
470470 // Canvas group begins here, render until before this item
471- _render_items (p_to_render_target, item_count, canvas_transform_inverse, p_light_list, r_sdf_used, false , r_render_info);
471+ _render_items (p_to_render_target, item_count, canvas_transform_inverse, p_light_list, r_sdf_used, false , r_render_info, material_screen_texture_mipmaps_cached );
472472 item_count = 0 ;
473473
474474 if (ci->canvas_group_owner ->canvas_group ->mode != RS::CANVAS_GROUP_MODE_TRANSPARENT) {
@@ -499,7 +499,7 @@ void RasterizerCanvasGLES3::canvas_render_items(RID p_to_render_target, Item *p_
499499 mesh_storage->update_mesh_instances ();
500500 update_skeletons = false ;
501501 }
502- _render_items (p_to_render_target, item_count, canvas_transform_inverse, p_light_list, r_sdf_used, true , r_render_info);
502+ _render_items (p_to_render_target, item_count, canvas_transform_inverse, p_light_list, r_sdf_used, true , r_render_info, material_screen_texture_mipmaps_cached );
503503 item_count = 0 ;
504504
505505 if (ci->canvas_group ->blur_mipmaps ) {
@@ -523,7 +523,7 @@ void RasterizerCanvasGLES3::canvas_render_items(RID p_to_render_target, Item *p_
523523 }
524524 // render anything pending, including clearing if no items
525525
526- _render_items (p_to_render_target, item_count, canvas_transform_inverse, p_light_list, r_sdf_used, false , r_render_info);
526+ _render_items (p_to_render_target, item_count, canvas_transform_inverse, p_light_list, r_sdf_used, false , r_render_info, material_screen_texture_mipmaps_cached );
527527 item_count = 0 ;
528528
529529 texture_storage->render_target_copy_to_back_buffer (p_to_render_target, back_buffer_rect, backbuffer_gen_mipmaps);
@@ -553,7 +553,7 @@ void RasterizerCanvasGLES3::canvas_render_items(RID p_to_render_target, Item *p_
553553 mesh_storage->update_mesh_instances ();
554554 update_skeletons = false ;
555555 }
556- _render_items (p_to_render_target, item_count, canvas_transform_inverse, p_light_list, r_sdf_used, canvas_group_owner != nullptr , r_render_info);
556+ _render_items (p_to_render_target, item_count, canvas_transform_inverse, p_light_list, r_sdf_used, canvas_group_owner != nullptr , r_render_info, material_screen_texture_mipmaps_cached );
557557 // then reset
558558 item_count = 0 ;
559559 }
@@ -573,10 +573,10 @@ void RasterizerCanvasGLES3::canvas_render_items(RID p_to_render_target, Item *p_
573573 state.current_instance_buffer_index = 0 ;
574574}
575575
576- void RasterizerCanvasGLES3::_render_items (RID p_to_render_target, int p_item_count, const Transform2D &p_canvas_transform_inverse, Light *p_lights, bool &r_sdf_used, bool p_to_backbuffer, RenderingMethod::RenderInfo *r_render_info) {
576+ void RasterizerCanvasGLES3::_render_items (RID p_to_render_target, int p_item_count, const Transform2D &p_canvas_transform_inverse, Light *p_lights, bool &r_sdf_used, bool p_to_backbuffer, RenderingMethod::RenderInfo *r_render_info, bool p_backbuffer_has_mipmaps ) {
577577 GLES3::MaterialStorage *material_storage = GLES3::MaterialStorage::get_singleton ();
578578
579- canvas_begin (p_to_render_target, p_to_backbuffer);
579+ canvas_begin (p_to_render_target, p_to_backbuffer, p_backbuffer_has_mipmaps );
580580
581581 if (p_item_count <= 0 ) {
582582 // Nothing to draw, just call canvas_begin() to clear the render target and return.
@@ -2169,7 +2169,7 @@ bool RasterizerCanvasGLES3::free(RID p_rid) {
21692169void RasterizerCanvasGLES3::update () {
21702170}
21712171
2172- void RasterizerCanvasGLES3::canvas_begin (RID p_to_render_target, bool p_to_backbuffer) {
2172+ void RasterizerCanvasGLES3::canvas_begin (RID p_to_render_target, bool p_to_backbuffer, bool p_backbuffer_has_mipmaps ) {
21732173 GLES3::TextureStorage *texture_storage = GLES3::TextureStorage::get_singleton ();
21742174 GLES3::Config *config = GLES3::Config::get_singleton ();
21752175
@@ -2184,6 +2184,7 @@ void RasterizerCanvasGLES3::canvas_begin(RID p_to_render_target, bool p_to_backb
21842184 glBindFramebuffer (GL_FRAMEBUFFER, render_target->fbo );
21852185 glActiveTexture (GL_TEXTURE0 + config->max_texture_image_units - 4 );
21862186 glBindTexture (GL_TEXTURE_2D, render_target->backbuffer );
2187+ glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, p_backbuffer_has_mipmaps ? render_target->mipmap_count - 1 : 0 );
21872188 }
21882189
21892190 if (render_target->is_transparent || p_to_backbuffer) {
0 commit comments