diff --git a/jme3-core/src/main/java/com/jme3/light/Light.java b/jme3-core/src/main/java/com/jme3/light/Light.java index 0a66fb729..af3a54074 100644 --- a/jme3-core/src/main/java/com/jme3/light/Light.java +++ b/jme3-core/src/main/java/com/jme3/light/Light.java @@ -37,6 +37,7 @@ import com.jme3.export.*; import com.jme3.math.ColorRGBA; import com.jme3.renderer.Camera; import com.jme3.scene.Spatial; +import com.jme3.shadow.next.ShadowMap; import com.jme3.util.TempVars; import java.io.IOException; @@ -120,6 +121,8 @@ public abstract class Light implements Savable, Cloneable { boolean frustumCheckNeeded = true; boolean intersectsFrustum = false; + protected ShadowMap shadowMap; + protected Light() { } @@ -163,6 +166,22 @@ public abstract class Light implements Savable, Cloneable { return lastDistance; } */ + + /** + * @return the light's shadow map, or null if none was assigned. + */ + public ShadowMap getShadowMap() { + return shadowMap; + } + + /** + * Used internally to associate the light with a shadow map + * + * @param shadowMap the light's shadow map + */ + public void setShadowMap(ShadowMap shadowMap) { + this.shadowMap = shadowMap; + } /** * Sets the light color. diff --git a/jme3-core/src/main/java/com/jme3/shadow/next/ShadowMap.java b/jme3-core/src/main/java/com/jme3/shadow/next/ShadowMap.java new file mode 100755 index 000000000..f0a7807cc --- /dev/null +++ b/jme3-core/src/main/java/com/jme3/shadow/next/ShadowMap.java @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2009-2016 jMonkeyEngine + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * * Neither the name of 'jMonkeyEngine' nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package com.jme3.shadow.next; + +import com.jme3.light.Light; +import com.jme3.light.Light.Type; + +/** + * Represents shadow information for a light. + * @param Type of light + * @author Kirill Vainer + */ +public interface ShadowMap { + + public Type getLightType(); + + public int getNumSlices(); + + public ShadowMapSlice getSlice(int index); + +} diff --git a/jme3-core/src/main/java/com/jme3/shadow/next/ShadowMapSlice.java b/jme3-core/src/main/java/com/jme3/shadow/next/ShadowMapSlice.java new file mode 100755 index 000000000..bfd0cc6f7 --- /dev/null +++ b/jme3-core/src/main/java/com/jme3/shadow/next/ShadowMapSlice.java @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2009-2016 jMonkeyEngine + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * * Neither the name of 'jMonkeyEngine' nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package com.jme3.shadow.next; + +import com.jme3.light.Light; +import com.jme3.math.Matrix4f; +import com.jme3.renderer.RenderManager; +import com.jme3.renderer.ViewPort; +import com.jme3.renderer.queue.GeometryList; + +/** + * Represents a single slice of a shadow map. + * + * @author Kirill Vainer + */ +public interface ShadowMapSlice { + + public Matrix4f getViewProjectionMatrix(); + + public void renderShadowMap(RenderManager renderManager, T light, ViewPort viewPort, GeometryList shadowCasters); +}