Skip to content

Setting 'setNumSamples' on FilterPostProcessor causes SdsmDirectionalLightShadowFilter to crash. #2620

@foxcc2021

Description

@foxcc2021

Test case

package test;

import com.jme3.app.SimpleApplication;
import com.jme3.light.DirectionalLight;
import com.jme3.material.Material;
import com.jme3.math.Vector3f;
import com.jme3.post.FilterPostProcessor;
import com.jme3.renderer.queue.RenderQueue;
import com.jme3.scene.Geometry;
import com.jme3.scene.shape.Box;
import com.jme3.shadow.SdsmDirectionalLightShadowFilter;

public class TestShadowCrash2 extends SimpleApplication {
    
    @Override
    public void simpleInitApp() {
        Geometry box = new Geometry("", new Box(0.5f, 0.5f, 0.5f));
        box.setMaterial(new Material(getAssetManager(), "Common/MatDefs/Light/Lighting.j3md"));
        box.setShadowMode(RenderQueue.ShadowMode.CastAndReceive);
        rootNode.attachChild(box);
        
        Geometry floor = new Geometry("", new Box(0.5f, 0.5f, 0.5f));
        floor.setMaterial(new Material(getAssetManager(), "Common/MatDefs/Light/Lighting.j3md"));
        floor.setShadowMode(RenderQueue.ShadowMode.CastAndReceive);
        floor.setLocalTranslation(0, -1, 0);
        floor.setLocalScale(5, 1, 5);
        rootNode.attachChild(floor);
        
        DirectionalLight light = new DirectionalLight(new Vector3f(-1, -1, -1));
        rootNode.addLight(light);
        
        FilterPostProcessor fpp = new FilterPostProcessor(assetManager);
        fpp.setNumSamples(2);
        viewPort.addProcessor(fpp);
        
        SdsmDirectionalLightShadowFilter shadowFilter = new SdsmDirectionalLightShadowFilter(assetManager, 512, 2);
        shadowFilter.setLight(light);
        fpp.addFilter(shadowFilter);
    }

    @Override
    public void simpleUpdate(float tpf) {
        super.simpleUpdate(tpf);
    }
    
    public static void main(String[] args) {
        TestShadowCrash2 app = new TestShadowCrash2();
        app.start();
    }
}

Error log

Feb 21, 2026 12:20:50 AM com.jme3.app.SimpleApplication start
INFO: AppSettings not set, creating default settings.
Feb 21, 2026 12:20:50 AM com.jme3.system.JmeSystemDelegate lambda$new$1
WARNING: JmeDialogsFactory implementation not found.
Feb 21, 2026 12:20:50 AM com.jme3.system.JmeDesktopSystem initialize
INFO: Running on jMonkeyEngine 3.10.0-alpha1
 * Branch: HEAD
 * Git Hash: d3efabc
 * Build Date: 2026-02-09
Feb 21, 2026 12:20:51 AM com.jme3.system.lwjgl.LwjglContext printContextInitInfo
INFO: LWJGL 3.4.0+20 context running on thread jME3 Main
 * Graphics Adapter: GLFW 3.5.0 Win32 WGL Null EGL OSMesa VisualC DLL
Feb 21, 2026 12:20:51 AM com.jme3.renderer.opengl.GLRenderer loadCapabilitiesCommon
INFO: OpenGL Renderer Information
 * Vendor: NVIDIA Corporation
 * Renderer: NVIDIA GeForce RTX 3060/PCIe/SSE2
 * OpenGL Version: 3.2.0 NVIDIA 560.94
 * GLSL Version: 1.50 NVIDIA via Cg compiler
 * Profile: Core
Feb 21, 2026 12:20:51 AM com.jme3.audio.openal.ALAudioRenderer printAudioRendererInfo
INFO: Audio Renderer Information
 * Device: OpenAL Soft
 * Vendor: OpenAL Community
 * Renderer: OpenAL Soft
 * Version: 1.1 ALSOFT 1.25.0
 * Supported channels: 64
 * ALC extensions: ALC_ENUMERATE_ALL_EXT ALC_ENUMERATION_EXT ALC_EXT_CAPTURE ALC_EXT_debug ALC_EXT_DEDICATED ALC_EXT_direct_context ALC_EXT_disconnect ALC_EXT_EFX ALC_EXT_thread_local_context ALC_SOFT_device_clock ALC_SOFT_HRTF ALC_SOFT_loopback ALC_SOFT_loopback_bformat ALC_SOFT_output_limiter ALC_SOFT_output_mode ALC_SOFT_pause_device ALC_SOFT_reopen_device ALC_SOFT_system_events
 * AL extensions: AL_EXT_ALAW AL_EXT_BFORMAT AL_EXT_debug AL_EXT_direct_context AL_EXT_DOUBLE AL_EXT_EXPONENT_DISTANCE AL_EXT_FLOAT32 AL_EXT_IMA4 AL_EXT_LINEAR_DISTANCE AL_EXT_MCFORMATS AL_EXT_MULAW AL_EXT_MULAW_BFORMAT AL_EXT_MULAW_MCFORMATS AL_EXT_OFFSET AL_EXT_source_distance_model AL_EXT_SOURCE_RADIUS AL_EXT_STATIC_BUFFER AL_EXT_STEREO_ANGLES AL_LOKI_quadriphonic AL_SOFT_bformat_ex AL_SOFT_bformat_hoa AL_SOFT_block_alignment AL_SOFT_buffer_length_query AL_SOFT_callback_buffer AL_SOFTX_convolution_effect AL_SOFT_deferred_updates AL_SOFT_direct_channels AL_SOFT_direct_channels_remix AL_SOFT_effect_target AL_SOFT_events AL_SOFT_gain_clamp_ex AL_SOFTX_hold_on_disconnect AL_SOFT_loop_points AL_SOFTX_map_buffer AL_SOFT_MSADPCM AL_SOFT_source_latency AL_SOFT_source_length AL_SOFTX_source_panning AL_SOFT_source_resampler AL_SOFT_source_spatialize AL_SOFT_source_start_delay AL_SOFT_UHJ AL_SOFT_UHJ_ex
Feb 21, 2026 12:20:51 AM com.jme3.audio.openal.ALAudioRenderer initEfx
INFO: Audio effect extension version: 1.0
Feb 21, 2026 12:20:51 AM com.jme3.audio.openal.ALAudioRenderer initEfx
INFO: Audio max auxiliary sends: 2
Feb 21, 2026 12:20:51 AM com.jme3.app.LegacyApplication handleError
SEVERE: Uncaught exception thrown in Thread[#33,jME3 Main,5,main]
java.lang.IllegalArgumentException: Material parameter is not defined: NumSamplesDepth
	at com.jme3.material.Material.checkSetParam(Material.java:515)
	at com.jme3.material.Material.setParam(Material.java:531)
	at com.jme3.material.Material.setInt(Material.java:726)
	at com.jme3.post.FilterPostProcessor.renderFilterChain(FilterPostProcessor.java:372)
	at com.jme3.post.FilterPostProcessor.postFrame(FilterPostProcessor.java:428)
	at com.jme3.renderer.pipeline.ForwardPipeline.pipelineRender(ForwardPipeline.java:127)
	at com.jme3.renderer.RenderManager.renderViewPort(RenderManager.java:1303)
	at com.jme3.renderer.RenderManager.render(RenderManager.java:1345)
	at com.jme3.app.SimpleApplication.update(SimpleApplication.java:361)
	at com.jme3.system.lwjgl.LwjglWindow.runLoop(LwjglWindow.java:735)
	at com.jme3.system.lwjgl.LwjglWindow.run(LwjglWindow.java:825)
	at java.base/java.lang.Thread.run(Thread.java:1583)

Feb 21, 2026 12:20:51 AM com.jme3.system.JmeSystemDelegate lambda$new$0
WARNING: JmeDialogsFactory implementation not found.
Uncaught exception thrown in Thread[#33,jME3 Main,5,main]
IllegalArgumentException: Material parameter is not defined: NumSamplesDepth
Feb 21, 2026 12:20:51 AM com.jme3.audio.openal.ALAudioRenderer destroyOpenAL
INFO: OpenAL context destroyed.

Exception: java.lang.AssertionError thrown from the UncaughtExceptionHandler in thread "jME3 Main"

Test environment: win11, java21, jMonkeyEngine 3.10.0-alpha1

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething that is supposed to work, but doesn't. More severe than a "defect".

    Type

    No type

    Projects

    Status

    No status

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions