Browse Source

Update AbstractShadowRenderer.java

Wyatt Gillette 6 months ago
parent
commit
c5363ba46e
1 changed files with 42 additions and 49 deletions
  1. 42 49
      jme3-core/src/main/java/com/jme3/shadow/AbstractShadowRenderer.java

+ 42 - 49
jme3-core/src/main/java/com/jme3/shadow/AbstractShadowRenderer.java

@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2009-2024 jMonkeyEngine
+ * Copyright (c) 2009-2025 jMonkeyEngine
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -74,9 +74,9 @@ import java.util.logging.Logger;
  * abstract shadow renderer that holds commons feature to have for a shadow
  * renderer
  *
- * @author Rémy Bouquet aka Nehon
+ * @author Nehon
  */
-public abstract class AbstractShadowRenderer implements SceneProcessor, Savable, JmeCloneable, Cloneable {
+public abstract class AbstractShadowRenderer implements SceneProcessor, Savable, JmeCloneable {
 
     protected static final Logger logger = Logger.getLogger(AbstractShadowRenderer.class.getName());
     private static final LightFilter NULL_LIGHT_FILTER = new NullLightFilter();
@@ -100,6 +100,7 @@ public abstract class AbstractShadowRenderer implements SceneProcessor, Savable,
     protected RenderState forcedRenderState = new RenderState();
     protected boolean renderBackFacesShadows = true;
     protected AppProfiler prof;
+    protected boolean debugfrustums = false;
 
     /**
      * true if the fallback material should be used, otherwise false
@@ -130,24 +131,23 @@ public abstract class AbstractShadowRenderer implements SceneProcessor, Savable,
     protected boolean skipPostPass;
 
     /**
-     * used for serialization
+     * For serialization only. Do not use.
      */
     protected AbstractShadowRenderer() {
     }
 
     /**
-     * Create an abstract shadow renderer. Subclasses invoke this constructor.
+     * Creates an  AbstractShadowRenderer. Subclasses invoke this constructor.
      *
-     * @param assetManager the application asset manager
-     * @param shadowMapSize the size of the rendered shadow maps (512,1024,2048,
-     * etc...)
-     * @param nbShadowMaps the number of shadow maps rendered (the more shadow
-     * maps the more quality, the fewer fps).
+     * @param assetManager The application's asset manager.
+     * @param shadowMapSize The size of the rendered shadow maps (e.g., 512, 1024, 2048).
+     * @param nbShadowMaps The number of shadow maps to render (1 to 4). More maps
+     * improve quality but can reduce performance.
      */
     protected AbstractShadowRenderer(AssetManager assetManager, int shadowMapSize, int nbShadowMaps) {
         this.assetManager = assetManager;
-        this.nbShadowMaps = nbShadowMaps;
         this.shadowMapSize = shadowMapSize;
+        this.nbShadowMaps = nbShadowMaps;
         init(assetManager, nbShadowMaps, shadowMapSize);
     }
 
@@ -301,32 +301,33 @@ public abstract class AbstractShadowRenderer implements SceneProcessor, Savable,
      */
     protected Geometry createFrustum(Vector3f[] pts, int i) {
         WireFrustum frustum = new WireFrustum(pts);
-        Geometry frustumMdl = new Geometry("f", frustum);
-        frustumMdl.setCullHint(Spatial.CullHint.Never);
-        frustumMdl.setShadowMode(ShadowMode.Off);
+        Geometry geo = new Geometry("WireFrustum" + i, frustum);
         Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
         mat.getAdditionalRenderState().setWireframe(true);
-        frustumMdl.setMaterial(mat);
+        geo.setMaterial(mat);
+        geo.setCullHint(Spatial.CullHint.Never);
+        geo.setShadowMode(ShadowMode.Off);
+
         switch (i) {
             case 0:
-                frustumMdl.getMaterial().setColor("Color", ColorRGBA.Pink);
+                mat.setColor("Color", ColorRGBA.Pink);
                 break;
             case 1:
-                frustumMdl.getMaterial().setColor("Color", ColorRGBA.Red);
+                mat.setColor("Color", ColorRGBA.Red);
                 break;
             case 2:
-                frustumMdl.getMaterial().setColor("Color", ColorRGBA.Green);
+                mat.setColor("Color", ColorRGBA.Green);
                 break;
             case 3:
-                frustumMdl.getMaterial().setColor("Color", ColorRGBA.Blue);
+                mat.setColor("Color", ColorRGBA.Blue);
                 break;
             default:
-                frustumMdl.getMaterial().setColor("Color", ColorRGBA.White);
+                mat.setColor("Color", ColorRGBA.White);
                 break;
         }
 
-        frustumMdl.updateGeometricState();
-        return frustumMdl;
+        geo.updateGeometricState();
+        return geo;
     }
 
     /**
@@ -340,7 +341,7 @@ public abstract class AbstractShadowRenderer implements SceneProcessor, Savable,
         renderManager = rm;
         viewPort = vp;
         postTechniqueName = "PostShadow";
-        if(zFarOverride>0 && frustumCam == null){
+        if (zFarOverride > 0 && frustumCam == null) {
             initFrustumCam();
         }
     }
@@ -396,7 +397,6 @@ public abstract class AbstractShadowRenderer implements SceneProcessor, Savable,
     protected void doDisplayFrustumDebug(int shadowMapIndex) {
     }
 
-    @SuppressWarnings("fallthrough")
     @Override
     public void postQueue(RenderQueue rq) {
         lightReceivers.clear();
@@ -413,13 +413,11 @@ public abstract class AbstractShadowRenderer implements SceneProcessor, Savable,
         renderManager.setForcedTechnique("PreShadow");
 
         for (int shadowMapIndex = 0; shadowMapIndex < nbShadowMaps; shadowMapIndex++) {
-
-                if (debugfrustums) {
-                    doDisplayFrustumDebug(shadowMapIndex);
-                }
-                renderShadowMap(shadowMapIndex);
-
+            if (debugfrustums) {
+                doDisplayFrustumDebug(shadowMapIndex);
             }
+            renderShadowMap(shadowMapIndex);
+        }
 
         debugfrustums = false;
 
@@ -450,8 +448,6 @@ public abstract class AbstractShadowRenderer implements SceneProcessor, Savable,
         renderManager.setForcedRenderState(null);
     }
 
-    boolean debugfrustums = false;
-
     public void displayFrustum() {
         debugfrustums = true;
     }
@@ -536,11 +532,11 @@ public abstract class AbstractShadowRenderer implements SceneProcessor, Savable,
             //renderers
             //Note that j start at 1 because other shadow renderers will have
             //at least 1 shadow map and will set it on each frame anyway.
-            for (int j = 1; j < nbShadowMaps; j++) {
-                mat.clearParam(lightViewStringCache[j]);
+            for (int i = 1; i < nbShadowMaps; i++) {
+                mat.clearParam(lightViewStringCache[i]);
             }
-            for (int j = 1; j < nbShadowMaps; j++) {
-                mat.clearParam(shadowMapStringCache[j]);
+            for (int i = 1; i < nbShadowMaps; i++) {
+                mat.clearParam(shadowMapStringCache[i]);
             }
             mat.clearParam("FadeInfo");
             clearMaterialParameters(mat);
@@ -556,22 +552,20 @@ public abstract class AbstractShadowRenderer implements SceneProcessor, Savable,
      */
     protected abstract void setMaterialParameters(Material material);
 
-    private void setMatParams(GeometryList l) {
+    private void setMatParams(GeometryList list) {
         //iterate through all the geometries of the list to gather the materials
 
-        buildMatCache(l);
+        buildMatCache(list);
 
         //iterating through the mat cache and setting the parameters
         for (Material mat : matCache) {
-
             mat.setFloat("ShadowMapSize", shadowMapSize);
 
-            for (int j = 0; j < nbShadowMaps; j++) {
-                mat.setMatrix4(lightViewStringCache[j], lightViewProjectionsMatrices[j]);
+            for (int i = 0; i < nbShadowMaps; i++) {
+                mat.setMatrix4(lightViewStringCache[i], lightViewProjectionsMatrices[i]);
             }
-
-            for (int j = 0; j < nbShadowMaps; j++) {
-                mat.setTexture(shadowMapStringCache[j], shadowMaps[j]);
+            for (int i = 0; i < nbShadowMaps; i++) {
+                mat.setTexture(shadowMapStringCache[i], shadowMaps[i]);
             }
 
             mat.setBoolean("HardwareShadows", shadowCompareMode == CompareMode.Hardware);
@@ -581,7 +575,7 @@ public abstract class AbstractShadowRenderer implements SceneProcessor, Savable,
             mat.setBoolean("BackfaceShadows", renderBackFacesShadows);
 
             if (fadeInfo != null) {
-               mat.setVector2("FadeInfo", fadeInfo);
+                mat.setVector2("FadeInfo", fadeInfo);
             }
 
             setMaterialParameters(mat);
@@ -592,13 +586,12 @@ public abstract class AbstractShadowRenderer implements SceneProcessor, Savable,
         if (needsfallBackMaterial) {
             setPostShadowParams();
         }
-
     }
 
-    private void buildMatCache(GeometryList l) {
+    private void buildMatCache(GeometryList list) {
         matCache.clear();
-        for (int i = 0; i < l.size(); i++) {
-            Material mat = l.get(i).getMaterial();
+        for (int i = 0; i < list.size(); i++) {
+            Material mat = list.get(i).getMaterial();
             //checking if the material has the post technique and adding it to the material cache
             if (mat.getMaterialDef().getTechniqueDefs(postTechniqueName) != null) {
                 if (!matCache.contains(mat)) {