Преглед на файлове

AlwaysSync object flag (set to true by default)

clementlandrin преди 2 години
родител
ревизия
709e7bebb0
променени са 1 файла, в които са добавени 7 реда и са изтрити 7 реда
  1. 7 7
      h3d/scene/Object.hx

+ 7 - 7
h3d/scene/Object.hx

@@ -16,7 +16,7 @@ package h3d.scene;
 	public var FCullingColliderInherited = 0x1000;
 	public var FFixedPosition = 0x2000;
 	public var FFixedPositionSynced = 0x4000;
-	public var FCulledNoSync = 0x8000;
+	public var FAlwaysSync = 0x8000;
 	public inline function new(value) {
 		this = value;
 	}
@@ -159,10 +159,10 @@ class Object {
 	public var fixedPosition(get, set) : Bool;
 
 	/**
-		When set, the object and all its children will not sync() if this root object is culled.
+		When unset, the object and all its children will not sync() if this root object or one of its parent is culled or not visible.
 		This allows to optimize cpu cost of objects having many children.
 	**/
-	public var culledNoSync(get, set) : Bool;
+	public var alwaysSync(get, set) : Bool;
 
 	/**
 		When set, collider shape will be used for automatic frustum culling.
@@ -190,7 +190,7 @@ class Object {
 		Create a new empty object, and adds it to the parent object if not null.
 	**/
 	public function new( ?parent : Object ) {
-		flags = new ObjectFlags(0);
+		flags = new ObjectFlags(0x8000);
 		absPos = new h3d.Matrix();
 		absPos.identity();
 		x = 0; y = 0; z = 0; scaleX = 1; scaleY = 1; scaleZ = 1;
@@ -216,7 +216,7 @@ class Object {
 	inline function get_ignoreParentTransform() return flags.has(FIgnoreParentTransform);
 	inline function get_cullingColliderInherited() return flags.has(FCullingColliderInherited);
 	inline function get_fixedPosition() return flags.has(FFixedPosition);
-	inline function get_culledNoSync() return flags.has(FCulledNoSync);
+	inline function get_alwaysSync() return flags.has(FAlwaysSync);
 	inline function set_posChanged(b) return flags.set(FPosChanged, b || follow != null);
 	inline function set_culled(b) return flags.set(FCulled, b);
 	inline function set_visible(b) return flags.set(FVisible,b);
@@ -231,7 +231,7 @@ class Object {
 	inline function set_ignoreParentTransform(b) { if( b != ignoreParentTransform ) posChanged = true; return flags.set(FIgnoreParentTransform, b); }
 	inline function set_cullingColliderInherited(b) return flags.set(FCullingColliderInherited, b);
 	inline function set_fixedPosition(b) return flags.set(FFixedPosition, b);
-	inline function set_culledNoSync(b) return flags.set(FCulledNoSync, b);
+	inline function set_alwaysSync(b) return flags.set(FAlwaysSync, b);
 
 	/**
 		Create an animation instance bound to the object, set it as currentAnimation and play it.
@@ -716,7 +716,7 @@ class Object {
 			if( parent == null && old != null )
 				return; // if we were removed by an animation event
 		}
-		if ( culled && culledNoSync )
+		if ( !alwaysSync && (culled || !visible || !ctx.visibleFlag) )
 			return;
 		var old = ctx.visibleFlag;
 		if( !visible || (culled && inheritCulled) )