4949import com .jme3 .renderer .queue .RenderQueue .Bucket ;
5050import com .jme3 .renderer .queue .RenderQueue .ShadowMode ;
5151import com .jme3 .scene .control .Control ;
52+ import com .jme3 .scene .threadwarden .SceneGraphThreadWarden ;
5253import com .jme3 .util .SafeArrayList ;
5354import com .jme3 .util .TempVars ;
5455import com .jme3 .util .clone .Cloner ;
@@ -278,11 +279,13 @@ protected void setRequiresUpdates(boolean f) {
278279 * a refresh is required.
279280 */
280281 protected void setTransformRefresh () {
282+ assert SceneGraphThreadWarden .assertOnCorrectThread (this );
281283 refreshFlags |= RF_TRANSFORM ;
282284 setBoundRefresh ();
283285 }
284286
285287 protected void setLightListRefresh () {
288+ assert SceneGraphThreadWarden .assertOnCorrectThread (this );
286289 refreshFlags |= RF_LIGHTLIST ;
287290 // Make sure next updateGeometricState() visits this branch
288291 // to update lights.
@@ -299,6 +302,7 @@ protected void setLightListRefresh() {
299302 }
300303
301304 protected void setMatParamOverrideRefresh () {
305+ assert SceneGraphThreadWarden .assertOnCorrectThread (this );
302306 refreshFlags |= RF_MATPARAM_OVERRIDE ;
303307 Spatial p = parent ;
304308 while (p != null ) {
@@ -316,6 +320,7 @@ protected void setMatParamOverrideRefresh() {
316320 * a refresh is required.
317321 */
318322 protected void setBoundRefresh () {
323+ assert SceneGraphThreadWarden .assertOnCorrectThread (this );
319324 refreshFlags |= RF_BOUND ;
320325
321326 Spatial p = parent ;
@@ -364,7 +369,8 @@ public boolean checkCulling(Camera cam) {
364369 throw new IllegalStateException ("Scene graph is not properly updated for rendering.\n "
365370 + "State was changed after rootNode.updateGeometricState() call. \n "
366371 + "Make sure you do not modify the scene from another thread!\n "
367- + "Problem spatial name: " + getName ());
372+ + "Problem spatial name: " + getName () + "\n " +
373+ SceneGraphThreadWarden .getTurnOnAssertsPrompt ());
368374 }
369375
370376 CullHint cm = getCullHint ();
@@ -612,6 +618,7 @@ protected void updateMatParamOverrides() {
612618 * @see MatParamOverride
613619 */
614620 public void addMatParamOverride (MatParamOverride override ) {
621+ assert SceneGraphThreadWarden .assertOnCorrectThread (this );
615622 if (override == null ) {
616623 throw new IllegalArgumentException ("override cannot be null" );
617624 }
@@ -626,6 +633,7 @@ public void addMatParamOverride(MatParamOverride override) {
626633 * @see MatParamOverride
627634 */
628635 public void removeMatParamOverride (MatParamOverride override ) {
636+ assert SceneGraphThreadWarden .assertOnCorrectThread (this );
629637 if (localOverrides .remove (override )) {
630638 setMatParamOverrideRefresh ();
631639 }
@@ -637,6 +645,7 @@ public void removeMatParamOverride(MatParamOverride override) {
637645 * @see #addMatParamOverride(com.jme3.material.MatParamOverride)
638646 */
639647 public void clearMatParamOverrides () {
648+ assert SceneGraphThreadWarden .assertOnCorrectThread (this );
640649 if (!localOverrides .isEmpty ()) {
641650 setMatParamOverrideRefresh ();
642651 }
@@ -772,6 +781,7 @@ public void runControlRender(RenderManager rm, ViewPort vp) {
772781 * @see Spatial#removeControl(java.lang.Class)
773782 */
774783 public void addControl (Control control ) {
784+ assert SceneGraphThreadWarden .assertOnCorrectThread (this );
775785 boolean before = requiresUpdates ();
776786 controls .add (control );
777787 control .setSpatial (this );
@@ -823,6 +833,7 @@ public void addControlAt(int index, Control control) {
823833 * @see Spatial#addControl(com.jme3.scene.control.Control)
824834 */
825835 public void removeControl (Class <? extends Control > controlType ) {
836+ assert SceneGraphThreadWarden .assertOnCorrectThread (this );
826837 boolean before = requiresUpdates ();
827838 for (int i = 0 ; i < controls .size (); i ++) {
828839 if (controlType .isAssignableFrom (controls .get (i ).getClass ())) {
@@ -850,6 +861,7 @@ public void removeControl(Class<? extends Control> controlType) {
850861 * @see Spatial#addControl(com.jme3.scene.control.Control)
851862 */
852863 public boolean removeControl (Control control ) {
864+ assert SceneGraphThreadWarden .assertOnCorrectThread (this );
853865 boolean before = requiresUpdates ();
854866 boolean result = controls .remove (control );
855867 if (result ) {
@@ -1005,6 +1017,7 @@ public Node getParent() {
10051017 * the parent of this node.
10061018 */
10071019 protected void setParent (Node parent ) {
1020+ assert SceneGraphThreadWarden .updateRequirement (this , parent );
10081021 this .parent = parent ;
10091022 }
10101023
@@ -1369,6 +1382,7 @@ public RenderQueue.ShadowMode getShadowMode() {
13691382 * @param lod The lod level to set.
13701383 */
13711384 public void setLodLevel (int lod ) {
1385+ assert SceneGraphThreadWarden .assertOnCorrectThread (this );
13721386 }
13731387
13741388 /**
0 commit comments