Bladeren bron

Proxies were being mishandled, leading to the now fixed #17651

Juan Linietsky 6 jaren geleden
bovenliggende
commit
40e4f5bef4
2 gewijzigde bestanden met toevoegingen van 8 en 6 verwijderingen
  1. 6 5
      drivers/gles3/rasterizer_canvas_gles3.cpp
  2. 2 1
      drivers/gles3/rasterizer_scene_gles3.cpp

+ 6 - 5
drivers/gles3/rasterizer_canvas_gles3.cpp

@@ -213,12 +213,12 @@ RasterizerStorageGLES3::Texture *RasterizerCanvasGLES3::_bind_canvas_texture(con
 
 		} else {
 
+			texture = texture->get_ptr();
+
 			if (texture->redraw_if_visible) { //check before proxy, because this is usually used with proxies
 				VisualServerRaster::redraw_request();
 			}
 
-			texture = texture->get_ptr();
-
 			if (texture->render_target)
 				texture->render_target->used_in_frame = true;
 
@@ -254,11 +254,12 @@ RasterizerStorageGLES3::Texture *RasterizerCanvasGLES3::_bind_canvas_texture(con
 
 		} else {
 
+			normal_map = normal_map->get_ptr();
+
 			if (normal_map->redraw_if_visible) { //check before proxy, because this is usually used with proxies
 				VisualServerRaster::redraw_request();
 			}
 
-			normal_map = normal_map->get_ptr();
 			glActiveTexture(GL_TEXTURE1);
 			glBindTexture(GL_TEXTURE_2D, normal_map->tex_id);
 			state.current_normal = p_normal_map;
@@ -1385,12 +1386,12 @@ void RasterizerCanvasGLES3::canvas_render_items(Item *p_item_list, int p_z, cons
 						continue;
 					}
 
+					t = t->get_ptr();
+
 					if (t->redraw_if_visible) { //check before proxy, because this is usually used with proxies
 						VisualServerRaster::redraw_request();
 					}
 
-					t = t->get_ptr();
-
 					if (storage->config.srgb_decode_supported && t->using_srgb) {
 						//no srgb in 2D
 						glTexParameteri(t->target, _TEXTURE_SRGB_DECODE_EXT, _SKIP_DECODE_EXT);

+ 2 - 1
drivers/gles3/rasterizer_scene_gles3.cpp

@@ -1190,11 +1190,12 @@ bool RasterizerSceneGLES3::_setup_material(RasterizerStorageGLES3::Material *p_m
 
 		if (t) {
 
+			t = t->get_ptr(); //resolve for proxies
+
 			if (t->redraw_if_visible) { //must check before proxy because this is often used with proxies
 				VisualServerRaster::redraw_request();
 			}
 
-			t = t->get_ptr(); //resolve for proxies
 #ifdef TOOLS_ENABLED
 			if (t->detect_3d) {
 				t->detect_3d(t->detect_3d_ud);