diff --git a/jme3-core/src/main/java/com/jme3/shadow/AbstractShadowRenderer.java b/jme3-core/src/main/java/com/jme3/shadow/AbstractShadowRenderer.java index 50db5a5a64..4047a52b2b 100644 --- a/jme3-core/src/main/java/com/jme3/shadow/AbstractShadowRenderer.java +++ b/jme3-core/src/main/java/com/jme3/shadow/AbstractShadowRenderer.java @@ -52,6 +52,7 @@ import com.jme3.renderer.queue.RenderQueue; import com.jme3.renderer.queue.RenderQueue.ShadowMode; import com.jme3.scene.Geometry; +import com.jme3.scene.Node; import com.jme3.scene.Spatial; import com.jme3.scene.debug.WireFrustum; import com.jme3.texture.FrameBuffer; @@ -396,6 +397,10 @@ public boolean isInitialized() { protected void doDisplayFrustumDebug(int shadowMapIndex) { } + protected Node getMainScene() { + return (Node) viewPort.getScenes().get(0); + } + @SuppressWarnings("fallthrough") @Override public void postQueue(RenderQueue rq) { @@ -413,15 +418,16 @@ public void postQueue(RenderQueue rq) { renderManager.setForcedTechnique("PreShadow"); for (int shadowMapIndex = 0; shadowMapIndex < nbShadowMaps; shadowMapIndex++) { - - if (debugfrustums) { - doDisplayFrustumDebug(shadowMapIndex); - } - renderShadowMap(shadowMapIndex); - + if (debugfrustums) { + doDisplayFrustumDebug(shadowMapIndex); } + renderShadowMap(shadowMapIndex); + } - debugfrustums = false; + if (debugfrustums) { + debugfrustums = false; + getMainScene().updateGeometricState(); + } //restore setting for future rendering r.setFrameBuffer(viewPort.getOutputFrameBuffer()); diff --git a/jme3-core/src/main/java/com/jme3/shadow/DirectionalLightShadowRenderer.java b/jme3-core/src/main/java/com/jme3/shadow/DirectionalLightShadowRenderer.java index 0b50f8be4b..c2e9e3ae5b 100644 --- a/jme3-core/src/main/java/com/jme3/shadow/DirectionalLightShadowRenderer.java +++ b/jme3-core/src/main/java/com/jme3/shadow/DirectionalLightShadowRenderer.java @@ -44,7 +44,6 @@ import com.jme3.renderer.Camera; import com.jme3.renderer.queue.GeometryList; import com.jme3.renderer.queue.RenderQueue; -import com.jme3.scene.Node; import com.jme3.scene.Spatial; import com.jme3.util.clone.Cloner; @@ -212,9 +211,9 @@ protected Camera getShadowCam(int shadowMapIndex) { @Override protected void doDisplayFrustumDebug(int shadowMapIndex) { - ((Node) viewPort.getScenes().get(0)).attachChild(createFrustum(points, shadowMapIndex)); + getMainScene().attachChild(createFrustum(points, shadowMapIndex)); ShadowUtil.updateFrustumPoints2(shadowCam, points); - ((Node) viewPort.getScenes().get(0)).attachChild(createFrustum(points, shadowMapIndex)); + getMainScene().attachChild(createFrustum(points, shadowMapIndex)); } @Override diff --git a/jme3-core/src/main/java/com/jme3/shadow/PointLightShadowRenderer.java b/jme3-core/src/main/java/com/jme3/shadow/PointLightShadowRenderer.java index 1999ba9e2d..813aa6683a 100644 --- a/jme3-core/src/main/java/com/jme3/shadow/PointLightShadowRenderer.java +++ b/jme3-core/src/main/java/com/jme3/shadow/PointLightShadowRenderer.java @@ -43,7 +43,6 @@ import com.jme3.renderer.queue.GeometryList; import com.jme3.renderer.queue.RenderQueue; import com.jme3.scene.Geometry; -import com.jme3.scene.Node; import com.jme3.scene.Spatial; import com.jme3.util.TempVars; import com.jme3.util.clone.Cloner; @@ -166,7 +165,7 @@ protected void doDisplayFrustumDebug(int shadowMapIndex) { } Geometry geo = frustums[shadowMapIndex]; if (geo.getParent() == null) { - ((Node) viewPort.getScenes().get(0)).attachChild(geo); + getMainScene().attachChild(geo); } } diff --git a/jme3-core/src/main/java/com/jme3/shadow/PssmShadowRenderer.java b/jme3-core/src/main/java/com/jme3/shadow/PssmShadowRenderer.java index a0d405000b..49144c16b4 100644 --- a/jme3-core/src/main/java/com/jme3/shadow/PssmShadowRenderer.java +++ b/jme3-core/src/main/java/com/jme3/shadow/PssmShadowRenderer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009-2021 jMonkeyEngine + * Copyright (c) 2009-2025 jMonkeyEngine * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -438,13 +438,9 @@ public void postQueue(RenderQueue rq) { renderManager.setCamera(shadowCam, false); if (debugfrustums) { -// frustumFromBound(b.casterBB,ColorRGBA.Blue ); -// frustumFromBound(b.receiverBB,ColorRGBA.Green ); -// frustumFromBound(b.splitBB,ColorRGBA.Yellow ); - ((Node) viewPort.getScenes().get(0)).attachChild(createFrustum(points, i)); + getMainScene().attachChild(createFrustum(points, i)); ShadowUtil.updateFrustumPoints2(shadowCam, points); - ((Node) viewPort.getScenes().get(0)).attachChild(createFrustum(points, i)); - + getMainScene().attachChild(createFrustum(points, i)); } r.setFrameBuffer(shadowFB[i]); @@ -456,7 +452,11 @@ public void postQueue(RenderQueue rq) { viewPort.getQueue().renderShadowQueue(splitOccluders, renderManager, shadowCam, true); renderManager.setLightFilter(tmpLightFilter); } - debugfrustums = false; + + if (debugfrustums) { + debugfrustums = false; + getMainScene().updateGeometricState(); + } //restore setting for future rendering r.setFrameBuffer(viewPort.getOutputFrameBuffer()); @@ -465,6 +465,11 @@ public void postQueue(RenderQueue rq) { renderManager.setCamera(viewCam, false); } + + protected Node getMainScene() { + return (Node) viewPort.getScenes().get(0); + } + boolean debugfrustums = false; public void displayFrustum() { diff --git a/jme3-core/src/main/java/com/jme3/shadow/SpotLightShadowRenderer.java b/jme3-core/src/main/java/com/jme3/shadow/SpotLightShadowRenderer.java index 448857408b..7f8eace53f 100644 --- a/jme3-core/src/main/java/com/jme3/shadow/SpotLightShadowRenderer.java +++ b/jme3-core/src/main/java/com/jme3/shadow/SpotLightShadowRenderer.java @@ -44,7 +44,6 @@ import com.jme3.renderer.Camera; import com.jme3.renderer.queue.GeometryList; import com.jme3.renderer.queue.RenderQueue; -import com.jme3.scene.Node; import com.jme3.scene.Spatial; import com.jme3.util.TempVars; import com.jme3.util.clone.Cloner; @@ -89,7 +88,7 @@ public SpotLightShadowRenderer(AssetManager assetManager, int shadowMapSize) { init(shadowMapSize); } - + private void init(int shadowMapSize) { shadowCam = new Camera(shadowMapSize, shadowMapSize); for (int i = 0; i < points.length; i++) { @@ -175,9 +174,9 @@ protected Camera getShadowCam(int shadowMapIndex) { protected void doDisplayFrustumDebug(int shadowMapIndex) { Vector3f[] points2 = points.clone(); - ((Node) viewPort.getScenes().get(0)).attachChild(createFrustum(points, shadowMapIndex)); + getMainScene().attachChild(createFrustum(points, shadowMapIndex)); ShadowUtil.updateFrustumPoints2(shadowCam, points2); - ((Node) viewPort.getScenes().get(0)).attachChild(createFrustum(points2, shadowMapIndex)); + getMainScene().attachChild(createFrustum(points2, shadowMapIndex)); } @Override