Skip to content

Commit 670dda3

Browse files
authored
Fix NPE on AbstractShadowFilter deserialization
move the initialization of the Post Shadow Material to the AbstractShadowFilter.init() method
1 parent 36c4d5a commit 670dda3

File tree

1 file changed

+15
-16
lines changed

1 file changed

+15
-16
lines changed

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

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2009-2024 jMonkeyEngine
2+
* Copyright (c) 2009-2025 jMonkeyEngine
33
* All rights reserved.
44
*
55
* Redistribution and use in source and binary forms, with or without
@@ -51,7 +51,6 @@
5151
import java.io.IOException;
5252

5353
/**
54-
*
5554
* Generic abstract filter that holds common implementations for the different
5655
* shadow filters
5756
*
@@ -63,9 +62,9 @@ public abstract class AbstractShadowFilter<T extends AbstractShadowRenderer> ext
6362
protected ViewPort viewPort;
6463

6564
/**
66-
* used for serialization
65+
* For serialization only. Do not use.
6766
*/
68-
protected AbstractShadowFilter(){
67+
protected AbstractShadowFilter() {
6968
}
7069

7170
/**
@@ -79,11 +78,8 @@ protected AbstractShadowFilter(){
7978
@SuppressWarnings("all")
8079
protected AbstractShadowFilter(AssetManager manager, int shadowMapSize, T shadowRenderer) {
8180
super("Post Shadow");
82-
material = new Material(manager, "Common/MatDefs/Shadow/PostShadowFilter.j3md");
8381
this.shadowRenderer = shadowRenderer;
84-
this.shadowRenderer.setPostShadowMaterial(material);
85-
86-
//this is legacy setting for shadows with backface shadows
82+
// this is legacy setting for shadows with backface shadows
8783
this.shadowRenderer.setRenderBackFacesShadows(true);
8884
}
8985

@@ -100,6 +96,7 @@ protected boolean isRequiresDepthTexture() {
10096
public Material getShadowMaterial() {
10197
return material;
10298
}
99+
103100
Vector4f tmpv = new Vector4f();
104101

105102
@Override
@@ -113,31 +110,33 @@ protected void preFrame(float tpf) {
113110
@Override
114111
protected void postQueue(RenderQueue queue) {
115112
shadowRenderer.postQueue(queue);
116-
if(shadowRenderer.skipPostPass){
117-
//removing the shadow map so that the post pass is skipped
118-
material.setTexture("ShadowMap0", null);
119-
}
113+
if (shadowRenderer.skipPostPass) {
114+
// removing the shadow map so that the post pass is skipped
115+
material.setTexture("ShadowMap0", null);
116+
}
120117
}
121118

122119
@Override
123120
protected void postFrame(RenderManager renderManager, ViewPort viewPort, FrameBuffer prevFilterBuffer, FrameBuffer sceneBuffer) {
124-
if(!shadowRenderer.skipPostPass){
121+
if (!shadowRenderer.skipPostPass) {
125122
shadowRenderer.setPostShadowParams();
126123
}
127124
}
128125

129126
@Override
130127
protected void initFilter(AssetManager manager, RenderManager renderManager, ViewPort vp, int w, int h) {
131128
shadowRenderer.needsfallBackMaterial = true;
129+
material = new Material(manager, "Common/MatDefs/Shadow/PostShadowFilter.j3md");
130+
shadowRenderer.setPostShadowMaterial(material);
132131
shadowRenderer.initialize(renderManager, vp);
133132
this.viewPort = vp;
134133
}
135-
136-
/**
134+
135+
/**
137136
* How far the shadows are rendered in the view
138137
*
139-
* @see #setShadowZExtend(float zFar)
140138
* @return shadowZExtend
139+
* @see #setShadowZExtend(float zFar)
141140
*/
142141
public float getShadowZExtend() {
143142
return shadowRenderer.getShadowZExtend();

0 commit comments

Comments
 (0)