Skip to content

Commit c784f4b

Browse files
capdevoncodex128
andauthored
AbstractShadowRenderer: fix displayFrustum (jMonkeyEngine#2561)
* AbstractShadowRenderer: fix debugFrustum * PssmShadowRenderer: fix debugFrustum * PointLightShadowRenderer: fix debugFrustum * SpotLightShadowRenderer: fix debugFrustum * DirectionalLightShadowRenderer: fix debugFrustum * Update DirectionalLightShadowRenderer: remove unused imports * Update PointLightShadowRenderer: remove unused imports * Update SpotLightShadowRenderer: remove unused imports * Update PointLightShadowFilter.java * Update PointLightShadowRenderer.java * Revert PointLightShadowFilter.java: oops * Update AbstractShadowRenderer.java * Update AbstractShadowRenderer.java * Update DirectionalLightShadowRenderer.java * Update PssmShadowRenderer.java * Update SpotLightShadowRenderer.java * fix usage of getMainScene --------- Co-authored-by: codex <103840984+codex128@users.noreply.github.com>
1 parent bc3a715 commit c784f4b

File tree

5 files changed

+30
-18
lines changed

5 files changed

+30
-18
lines changed

jme3-core/src/main/java/com/jme3/shadow/AbstractShadowRenderer.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@
5656
import com.jme3.renderer.queue.RenderQueue;
5757
import com.jme3.renderer.queue.RenderQueue.ShadowMode;
5858
import com.jme3.scene.Geometry;
59+
import com.jme3.scene.Node;
5960
import com.jme3.scene.Spatial;
6061
import com.jme3.scene.debug.WireFrustum;
6162
import com.jme3.texture.FrameBuffer;
@@ -427,6 +428,10 @@ protected void doDisplayFrustumDebug(int shadowMapIndex) {
427428
// Default implementation does nothing.
428429
}
429430

431+
protected Node getSceneForDebug() {
432+
return (Node) viewPort.getScenes().get(0);
433+
}
434+
430435
@Override
431436
public void postQueue(RenderQueue rq) {
432437
lightReceivers.clear();
@@ -449,7 +454,10 @@ public void postQueue(RenderQueue rq) {
449454
renderShadowMap(shadowMapIndex);
450455
}
451456

452-
debugfrustums = false;
457+
if (debugfrustums) {
458+
debugfrustums = false;
459+
getSceneForDebug().updateGeometricState();
460+
}
453461

454462
//restore setting for future rendering
455463
r.setFrameBuffer(viewPort.getOutputFrameBuffer());
@@ -956,3 +964,5 @@ public void write(JmeExporter ex) throws IOException {
956964
oc.write(edgesThickness, "edgesThickness", 1.0f);
957965
}
958966
}
967+
968+

jme3-core/src/main/java/com/jme3/shadow/DirectionalLightShadowRenderer.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@
4444
import com.jme3.renderer.Camera;
4545
import com.jme3.renderer.queue.GeometryList;
4646
import com.jme3.renderer.queue.RenderQueue;
47-
import com.jme3.scene.Node;
4847
import com.jme3.scene.Spatial;
4948
import com.jme3.util.clone.Cloner;
5049

@@ -212,9 +211,9 @@ protected Camera getShadowCam(int shadowMapIndex) {
212211

213212
@Override
214213
protected void doDisplayFrustumDebug(int shadowMapIndex) {
215-
((Node) viewPort.getScenes().get(0)).attachChild(createFrustum(points, shadowMapIndex));
214+
getSceneForDebug().attachChild(createFrustum(points, shadowMapIndex));
216215
ShadowUtil.updateFrustumPoints2(shadowCam, points);
217-
((Node) viewPort.getScenes().get(0)).attachChild(createFrustum(points, shadowMapIndex));
216+
getSceneForDebug().attachChild(createFrustum(points, shadowMapIndex));
218217
}
219218

220219
@Override

jme3-core/src/main/java/com/jme3/shadow/PointLightShadowRenderer.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@
4343
import com.jme3.renderer.queue.GeometryList;
4444
import com.jme3.renderer.queue.RenderQueue;
4545
import com.jme3.scene.Geometry;
46-
import com.jme3.scene.Node;
4746
import com.jme3.scene.Spatial;
4847
import com.jme3.util.TempVars;
4948
import com.jme3.util.clone.Cloner;
@@ -166,7 +165,7 @@ protected void doDisplayFrustumDebug(int shadowMapIndex) {
166165
}
167166
Geometry geo = frustums[shadowMapIndex];
168167
if (geo.getParent() == null) {
169-
((Node) viewPort.getScenes().get(0)).attachChild(geo);
168+
getSceneForDebug().attachChild(geo);
170169
}
171170
}
172171

jme3-core/src/main/java/com/jme3/shadow/PssmShadowRenderer.java

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2009-2021 jMonkeyEngine
2+
* Copyright (c) 2009-2025 jMonkeyEngine
33
* All rights reserved.
44
*
55
* Redistribution and use in source and binary forms, with or without
@@ -438,13 +438,9 @@ public void postQueue(RenderQueue rq) {
438438
renderManager.setCamera(shadowCam, false);
439439

440440
if (debugfrustums) {
441-
// frustumFromBound(b.casterBB,ColorRGBA.Blue );
442-
// frustumFromBound(b.receiverBB,ColorRGBA.Green );
443-
// frustumFromBound(b.splitBB,ColorRGBA.Yellow );
444-
((Node) viewPort.getScenes().get(0)).attachChild(createFrustum(points, i));
441+
getSceneForDebug().attachChild(createFrustum(points, i));
445442
ShadowUtil.updateFrustumPoints2(shadowCam, points);
446-
((Node) viewPort.getScenes().get(0)).attachChild(createFrustum(points, i));
447-
443+
getSceneForDebug().attachChild(createFrustum(points, i));
448444
}
449445

450446
r.setFrameBuffer(shadowFB[i]);
@@ -456,7 +452,11 @@ public void postQueue(RenderQueue rq) {
456452
viewPort.getQueue().renderShadowQueue(splitOccluders, renderManager, shadowCam, true);
457453
renderManager.setLightFilter(tmpLightFilter);
458454
}
459-
debugfrustums = false;
455+
456+
if (debugfrustums) {
457+
debugfrustums = false;
458+
getSceneForDebug().updateGeometricState();
459+
}
460460

461461
//restore setting for future rendering
462462
r.setFrameBuffer(viewPort.getOutputFrameBuffer());
@@ -465,6 +465,11 @@ public void postQueue(RenderQueue rq) {
465465
renderManager.setCamera(viewCam, false);
466466

467467
}
468+
469+
protected Node getSceneForDebug() {
470+
return (Node) viewPort.getScenes().get(0);
471+
}
472+
468473
boolean debugfrustums = false;
469474

470475
public void displayFrustum() {

jme3-core/src/main/java/com/jme3/shadow/SpotLightShadowRenderer.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@
4444
import com.jme3.renderer.Camera;
4545
import com.jme3.renderer.queue.GeometryList;
4646
import com.jme3.renderer.queue.RenderQueue;
47-
import com.jme3.scene.Node;
4847
import com.jme3.scene.Spatial;
4948
import com.jme3.util.TempVars;
5049
import com.jme3.util.clone.Cloner;
@@ -89,7 +88,7 @@ public SpotLightShadowRenderer(AssetManager assetManager, int shadowMapSize) {
8988
init(shadowMapSize);
9089
}
9190

92-
91+
9392
private void init(int shadowMapSize) {
9493
shadowCam = new Camera(shadowMapSize, shadowMapSize);
9594
for (int i = 0; i < points.length; i++) {
@@ -175,9 +174,9 @@ protected Camera getShadowCam(int shadowMapIndex) {
175174
protected void doDisplayFrustumDebug(int shadowMapIndex) {
176175
Vector3f[] points2 = points.clone();
177176

178-
((Node) viewPort.getScenes().get(0)).attachChild(createFrustum(points, shadowMapIndex));
177+
getSceneForDebug().attachChild(createFrustum(points, shadowMapIndex));
179178
ShadowUtil.updateFrustumPoints2(shadowCam, points2);
180-
((Node) viewPort.getScenes().get(0)).attachChild(createFrustum(points2, shadowMapIndex));
179+
getSceneForDebug().attachChild(createFrustum(points2, shadowMapIndex));
181180
}
182181

183182
@Override

0 commit comments

Comments
 (0)