瀏覽代碼

Properly redraw if something animated is visible

Juan Linietsky 6 年之前
父節點
當前提交
34dd772054

+ 8 - 8
drivers/gles2/rasterizer_canvas_gles2.cpp

@@ -202,12 +202,12 @@ RasterizerStorageGLES2::Texture *RasterizerCanvasGLES2::_bind_canvas_texture(con
 
 
 		} else {
 		} else {
 
 
-			texture = texture->get_ptr();
-
 			if (texture->redraw_if_visible) {
 			if (texture->redraw_if_visible) {
 				VisualServerRaster::redraw_request();
 				VisualServerRaster::redraw_request();
 			}
 			}
 
 
+			texture = texture->get_ptr();
+
 			if (texture->render_target) {
 			if (texture->render_target) {
 				texture->render_target->used_in_frame = true;
 				texture->render_target->used_in_frame = true;
 			}
 			}
@@ -244,12 +244,12 @@ RasterizerStorageGLES2::Texture *RasterizerCanvasGLES2::_bind_canvas_texture(con
 
 
 		} else {
 		} else {
 
 
-			normal_map = normal_map->get_ptr();
-
 			if (normal_map->redraw_if_visible) { //check before proxy, because this is usually used with proxies
 			if (normal_map->redraw_if_visible) { //check before proxy, because this is usually used with proxies
 				VisualServerRaster::redraw_request();
 				VisualServerRaster::redraw_request();
 			}
 			}
 
 
+			normal_map = normal_map->get_ptr();
+
 			glActiveTexture(GL_TEXTURE0 + storage->config.max_texture_image_units - 2);
 			glActiveTexture(GL_TEXTURE0 + storage->config.max_texture_image_units - 2);
 			glBindTexture(GL_TEXTURE_2D, normal_map->tex_id);
 			glBindTexture(GL_TEXTURE_2D, normal_map->tex_id);
 			state.current_normal = p_normal_map;
 			state.current_normal = p_normal_map;
@@ -1412,6 +1412,10 @@ void RasterizerCanvasGLES2::canvas_render_items(Item *p_item_list, int p_z, cons
 						continue;
 						continue;
 					}
 					}
 
 
+					if (t->redraw_if_visible) {
+						VisualServerRaster::redraw_request();
+					}
+
 					t = t->get_ptr();
 					t = t->get_ptr();
 
 
 #ifdef TOOLS_ENABLED
 #ifdef TOOLS_ENABLED
@@ -1422,10 +1426,6 @@ void RasterizerCanvasGLES2::canvas_render_items(Item *p_item_list, int p_z, cons
 					if (t->render_target)
 					if (t->render_target)
 						t->render_target->used_in_frame = true;
 						t->render_target->used_in_frame = true;
 
 
-					if (t->redraw_if_visible) {
-						VisualServerRaster::redraw_request();
-					}
-
 					glBindTexture(t->target, t->tex_id);
 					glBindTexture(t->target, t->tex_id);
 				}
 				}
 
 

+ 3 - 4
drivers/gles2/rasterizer_scene_gles2.cpp

@@ -1312,12 +1312,12 @@ bool RasterizerSceneGLES2::_setup_material(RasterizerStorageGLES2::Material *p_m
 			continue;
 			continue;
 		}
 		}
 
 
-		t = t->get_ptr();
-
 		if (t->redraw_if_visible) { //must check before proxy because this is often used with proxies
 		if (t->redraw_if_visible) { //must check before proxy because this is often used with proxies
 			VisualServerRaster::redraw_request();
 			VisualServerRaster::redraw_request();
 		}
 		}
 
 
+		t = t->get_ptr();
+
 #ifdef TOOLS_ENABLED
 #ifdef TOOLS_ENABLED
 		if (t->detect_3d) {
 		if (t->detect_3d) {
 			t->detect_3d(t->detect_3d_ud);
 			t->detect_3d(t->detect_3d_ud);
@@ -1671,11 +1671,10 @@ void RasterizerSceneGLES2::_render_geometry(RenderList::Element *p_element) {
 				if (c.texture.is_valid() && storage->texture_owner.owns(c.texture)) {
 				if (c.texture.is_valid() && storage->texture_owner.owns(c.texture)) {
 					RasterizerStorageGLES2::Texture *t = storage->texture_owner.get(c.texture);
 					RasterizerStorageGLES2::Texture *t = storage->texture_owner.get(c.texture);
 
 
-					t = t->get_ptr();
-
 					if (t->redraw_if_visible) {
 					if (t->redraw_if_visible) {
 						VisualServerRaster::redraw_request();
 						VisualServerRaster::redraw_request();
 					}
 					}
+					t = t->get_ptr();
 
 
 #ifdef TOOLS_ENABLED
 #ifdef TOOLS_ENABLED
 					if (t->detect_3d) {
 					if (t->detect_3d) {

+ 6 - 6
drivers/gles3/rasterizer_canvas_gles3.cpp

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

+ 3 - 4
drivers/gles3/rasterizer_scene_gles3.cpp

@@ -1199,12 +1199,12 @@ bool RasterizerSceneGLES3::_setup_material(RasterizerStorageGLES3::Material *p_m
 
 
 		if (t) {
 		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
 			if (t->redraw_if_visible) { //must check before proxy because this is often used with proxies
 				VisualServerRaster::redraw_request();
 				VisualServerRaster::redraw_request();
 			}
 			}
 
 
+			t = t->get_ptr(); //resolve for proxies
+
 #ifdef TOOLS_ENABLED
 #ifdef TOOLS_ENABLED
 			if (t->detect_3d) {
 			if (t->detect_3d) {
 				t->detect_3d(t->detect_3d_ud);
 				t->detect_3d(t->detect_3d_ud);
@@ -1629,11 +1629,10 @@ void RasterizerSceneGLES3::_render_geometry(RenderList::Element *e) {
 
 
 					RasterizerStorageGLES3::Texture *t = storage->texture_owner.get(c.texture);
 					RasterizerStorageGLES3::Texture *t = storage->texture_owner.get(c.texture);
 
 
-					t = t->get_ptr(); //resolve for proxies
-
 					if (t->redraw_if_visible) {
 					if (t->redraw_if_visible) {
 						VisualServerRaster::redraw_request();
 						VisualServerRaster::redraw_request();
 					}
 					}
+					t = t->get_ptr(); //resolve for proxies
 
 
 #ifdef TOOLS_ENABLED
 #ifdef TOOLS_ENABLED
 					if (t->detect_3d) {
 					if (t->detect_3d) {

+ 0 - 1
servers/visual/visual_server_raster.cpp

@@ -123,7 +123,6 @@ void VisualServerRaster::draw(bool p_swap_buffers, double frame_step) {
 
 
 		frame_drawn_callbacks.pop_front();
 		frame_drawn_callbacks.pop_front();
 	}
 	}
-
 	VS::get_singleton()->emit_signal("frame_post_draw");
 	VS::get_singleton()->emit_signal("frame_post_draw");
 }
 }
 void VisualServerRaster::sync() {
 void VisualServerRaster::sync() {