Sfoglia il codice sorgente

-Fixed redraw always on 3D viewprot bug
-Changed manipulation inertia default values. Do not touch them again or I'll cut your fingers and eat them.

Juan Linietsky 8 anni fa
parent
commit
d3ea92257d

+ 2 - 0
drivers/gles3/rasterizer_storage_gles3.cpp

@@ -1564,6 +1564,7 @@ void RasterizerStorageGLES3::_update_shader(Shader *p_shader) const {
 			p_shader->canvas_item.blend_mode = Shader::CanvasItem::BLEND_MODE_MIX;
 			p_shader->canvas_item.uses_screen_texture = false;
 			p_shader->canvas_item.uses_screen_uv = false;
+			p_shader->canvas_item.uses_time = false;
 
 			shaders.actions_canvas.render_mode_values["blend_add"] = Pair<int *, int>(&p_shader->canvas_item.blend_mode, Shader::CanvasItem::BLEND_MODE_ADD);
 			shaders.actions_canvas.render_mode_values["blend_mix"] = Pair<int *, int>(&p_shader->canvas_item.blend_mode, Shader::CanvasItem::BLEND_MODE_MIX);
@@ -1595,6 +1596,7 @@ void RasterizerStorageGLES3::_update_shader(Shader *p_shader) const {
 			p_shader->spatial.unshaded = false;
 			p_shader->spatial.no_depth_test = false;
 			p_shader->spatial.uses_sss = false;
+			p_shader->spatial.uses_time = false;
 			p_shader->spatial.uses_vertex_lighting = false;
 			p_shader->spatial.uses_screen_texture = false;
 			p_shader->spatial.uses_vertex = false;

+ 3 - 3
editor/editor_settings.cpp

@@ -690,11 +690,11 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) {
 	hints["editors/3d/navigation_feel/orbit_inertia"] = PropertyInfo(Variant::REAL, "editors/3d/navigation_feel/orbit_inertia", PROPERTY_HINT_RANGE, "0.0, 1, 0.01");
 	set("editors/3d/navigation_feel/translation_inertia", 0.15);
 	hints["editors/3d/navigation_feel/translation_inertia"] = PropertyInfo(Variant::REAL, "editors/3d/navigation_feel/translation_inertia", PROPERTY_HINT_RANGE, "0.0, 1, 0.01");
-	set("editors/3d/navigation_feel/zoom_inertia", 0.1);
+	set("editors/3d/navigation_feel/zoom_inertia", 0.075);
 	hints["editors/3d/navigation_feel/zoom_inertia"] = PropertyInfo(Variant::REAL, "editors/3d/navigation_feel/zoom_inertia", PROPERTY_HINT_RANGE, "0.0, 1, 0.01");
-	set("editors/3d/navigation_feel/manipulation_orbit_inertia", 0.1);
+	set("editors/3d/navigation_feel/manipulation_orbit_inertia", 0.075);
 	hints["editors/3d/navigation_feel/manipulation_orbit_inertia"] = PropertyInfo(Variant::REAL, "editors/3d/navigation_feel/manipulation_orbit_inertia", PROPERTY_HINT_RANGE, "0.0, 1, 0.01");
-	set("editors/3d/navigation_feel/manipulation_translation_inertia", 0.1);
+	set("editors/3d/navigation_feel/manipulation_translation_inertia", 0.075);
 	hints["editors/3d/navigation_feel/manipulation_translation_inertia"] = PropertyInfo(Variant::REAL, "editors/3d/navigation_feel/manipulation_translation_inertia", PROPERTY_HINT_RANGE, "0.0, 1, 0.01");
 
 	// freelook

+ 21 - 15
editor/plugins/spatial_editor_plugin.cpp

@@ -70,20 +70,17 @@
 #define MAX_FOV 179
 
 void SpatialEditorViewport::_update_camera(float p_interp_delta) {
-	if (orthogonal) {
-		//camera->set_orthogonal(size.width*cursor.distance,get_znear(),get_zfar());
-		camera->set_orthogonal(2 * cursor.distance, 0.1, 8192);
-	} else
-		camera->set_perspective(get_fov(), get_znear(), get_zfar());
+
+	bool is_orthogonal = camera->get_projection() == Camera::PROJECTION_ORTHOGONAL;
 
 	//when not being manipulated, move softly
-	float free_orbit_inertia = EDITOR_DEF("editors/3d/navigation_feel/orbit_inertia", 0.15);
-	float free_translation_inertia = EDITOR_DEF("editors/3d/navigation_feel/translation_inertia", 0.15);
+	float free_orbit_inertia = EDITOR_GET("editors/3d/navigation_feel/orbit_inertia");
+	float free_translation_inertia = EDITOR_GET("editors/3d/navigation_feel/translation_inertia");
 	//when being manipulated, move more quickly
-	float manip_orbit_inertia = EDITOR_DEF("editors/3d/navigation_feel/manipulation_orbit_inertia", 0.1);
-	float manip_translation_inertia = EDITOR_DEF("editors/3d/navigation_feel/manipulation_translation_inertia", 0.1);
+	float manip_orbit_inertia = EDITOR_GET("editors/3d/navigation_feel/manipulation_orbit_inertia");
+	float manip_translation_inertia = EDITOR_GET("editors/3d/navigation_feel/manipulation_translation_inertia");
 
-	float zoom_inertia = EDITOR_DEF("editors/3d/navigation_feel/zoom_inertia", 0.1);
+	float zoom_inertia = EDITOR_GET("editors/3d/navigation_feel/zoom_inertia");
 
 	//determine if being manipulated
 	bool manipulated = (Input::get_singleton()->get_mouse_button_mask() & (2 | 4)) || Input::get_singleton()->is_key_pressed(KEY_SHIFT) || Input::get_singleton()->is_key_pressed(KEY_ALT) || Input::get_singleton()->is_key_pressed(KEY_CONTROL);
@@ -104,21 +101,30 @@ void SpatialEditorViewport::_update_camera(float p_interp_delta) {
 		camera_cursor = cursor;
 	}
 
-	float tolerance = 0.0001;
+	float tolerance = 0.001;
 	bool equal = true;
-	if (Math::abs(old_camera_cursor.x_rot - camera_cursor.x_rot) > tolerance || Math::abs(old_camera_cursor.y_rot - camera_cursor.y_rot) > tolerance)
+	if (Math::abs(old_camera_cursor.x_rot - camera_cursor.x_rot) > tolerance || Math::abs(old_camera_cursor.y_rot - camera_cursor.y_rot) > tolerance) {
 		equal = false;
+	}
 
-	if (equal && old_camera_cursor.pos.distance_squared_to(camera_cursor.pos) > tolerance * tolerance)
+	if (equal && old_camera_cursor.pos.distance_squared_to(camera_cursor.pos) > tolerance * tolerance) {
 		equal = false;
+	}
 
-	if (equal && Math::abs(old_camera_cursor.distance - camera_cursor.distance) > tolerance)
+	if (equal && Math::abs(old_camera_cursor.distance - camera_cursor.distance) > tolerance) {
 		equal = false;
+	}
 
-	if (!equal || p_interp_delta == 0 || is_freelook_active()) {
+	if (!equal || p_interp_delta == 0 || is_freelook_active() || is_orthogonal != orthogonal) {
 
 		camera->set_global_transform(to_camera_transform(camera_cursor));
 		update_transform_gizmo_view();
+
+		if (orthogonal) {
+			//camera->set_orthogonal(size.width*cursor.distance,get_znear(),get_zfar());
+			camera->set_orthogonal(2 * cursor.distance, 0.1, 8192);
+		} else
+			camera->set_perspective(get_fov(), get_znear(), get_zfar());
 	}
 }
 

+ 19 - 1
servers/visual/visual_server_raster.h

@@ -589,11 +589,29 @@ class VisualServerRaster : public VisualServer {
 #endif
 
 	void _draw_margins();
+	static void _changes_changed() {}
 
 public:
+//if editor is redrawing when it shouldn't, enable this and put a breakpoint in _changes_changed()
+//#define DEBUG_CHANGES
+
+#ifdef DEBUG_CHANGES
+	_FORCE_INLINE_ static void redraw_request() {
+		changes++;
+		_changes_changed();
+	}
+
+#define DISPLAY_CHANGED \
+	changes++;          \
+	_changes_changed();
+
+#else
 	_FORCE_INLINE_ static void redraw_request() { changes++; }
 
-#define DISPLAY_CHANGED changes++;
+#define DISPLAY_CHANGED \
+	changes++;
+#endif
+//	print_line(String("CHANGED: ") + __FUNCTION__);
 
 #define BIND0R(m_r, m_name) \
 	m_r m_name() { return BINDBASE->m_name(); }