Skip to content
Open
Show file tree
Hide file tree
Changes from 23 commits
Commits
Show all changes
56 commits
Select commit Hold shift + click to select a range
406c314
Use correct HALF_FLOAT constant for GLES
shadowislord Sep 9, 2017
2596946
Support GLTracer and GL debug in Android
shadowislord Sep 9, 2017
69139a1
Support instancing in GLTracer
shadowislord Sep 9, 2017
23700d5
Don't use unsupported TEXTURE_{BASE,MAX}_LEVEL in GLES
shadowislord Sep 9, 2017
7a22f8c
Support ABGR8 using swizzle extension
shadowislord Sep 9, 2017
af3a0c7
Move glFramebufferTextureLayer to GLFbo
shadowislord Sep 9, 2017
b0316e4
Avoid RGB111110F in filters unless its actually supported
shadowislord Sep 9, 2017
88aaa07
Use the same depth format in all places in FPP
shadowislord Sep 9, 2017
7441865
Print the object with the problem in NativeObjectManager
shadowislord Sep 9, 2017
134c365
Merge remote-tracking branch 'origin/master' into opengles2-fixes
shadowislord Sep 9, 2017
bc50b09
Don't upload NULL texture slices
shadowislord Sep 9, 2017
16e4726
Support shadow maps in GLES
shadowislord Sep 9, 2017
4d60b2d
Merge remote-tracking branch 'origin/opengles2-fixes' into in-pass-sh…
shadowislord Sep 9, 2017
2ce2995
Don't reset lights that were never checked in light filter
shadowislord Sep 9, 2017
f5ad027
Make tech logic impls responsible for light filtering
shadowislord Sep 9, 2017
55e9fd0
Remove scale from updateFrustumPoints since its always 1.0
shadowislord Sep 9, 2017
cfcec44
Add ShadowMap interface
shadowislord Sep 9, 2017
42051b0
StaticPass supports setting shadow map index on light
shadowislord Sep 9, 2017
ce28e35
Fix additional render state missing apply = false
shadowislord Sep 9, 2017
8a74727
Make sure apply = false for all forced render states
shadowislord Sep 9, 2017
d159e17
Combine forced render state with the one in the technique
shadowislord Sep 9, 2017
9c4fcac
Add PreShadowArrayRenderer
shadowislord Sep 9, 2017
77e552f
Implement static pass in the lighting material
shadowislord Sep 9, 2017
5aa2c72
Fix syntax error
shadowislord Sep 10, 2017
a314588
Support dynamic number of shadow maps
shadowislord Sep 10, 2017
0a4a439
optimize pssm split calculation
shadowislord Sep 18, 2017
2c38591
optimize pssm split calculation
shadowislord Sep 18, 2017
3889cb4
calculate lighting in world space
shadowislord Sep 18, 2017
b52d0e3
fix wrong counts
shadowislord Sep 18, 2017
1e861fd
Merge branch 'in-pass-shadows' of github.com:jMonkeyEngine/jmonkeyeng…
shadowislord Sep 18, 2017
47b34c6
optimize clearing shadow maps
shadowislord Sep 18, 2017
ec0fcd2
support point light shadows
shadowislord Sep 18, 2017
c136a42
use PBR + support point light shadows in shader
shadowislord Sep 18, 2017
c3cfab6
use 16-bit depth by default
shadowislord Sep 18, 2017
0fae383
remove unused methods
shadowislord Sep 18, 2017
4b4bf24
fix shadow disappearing when frustum in front of caster
shadowislord Sep 18, 2017
59c85d5
Merge remote-tracking branch 'origin/master' into in-pass-shadows
shadowislord Sep 18, 2017
d50fb09
Merge remote-tracking branch 'origin/master' into in-pass-shadows
shadowislord Sep 18, 2017
8d125a3
Merge remote-tracking branch 'origin/master' into in-pass-shadows
shadowislord Sep 19, 2017
fca6d4a
Merge remote-tracking branch 'origin/master' into in-pass-shadows
shadowislord Sep 22, 2017
628fa23
remove useless normalization in lighting shaders
shadowislord Sep 30, 2017
fe158e7
fix infinite recursive loop
shadowislord Sep 30, 2017
e453680
add point light mode for pre shadow techniques
shadowislord Sep 30, 2017
6487def
update GLTracer
shadowislord Sep 30, 2017
42432ed
remove hacks from ShadowUtil
shadowislord Sep 30, 2017
5108f52
Merge remote-tracking branch 'origin/master' into in-pass-shadows
shadowislord Oct 3, 2017
6fb2d02
Merge remote-tracking branch 'origin/master' into in-pass-shadows
shadowislord Mar 19, 2018
caad166
in-pass-shadows: add spot / point light support
shadowislord Mar 19, 2018
5b80095
in-pass-shadows: fix syntax errors
shadowislord Mar 19, 2018
5f66eea
in-pass-shadows: use glsllib extension
shadowislord Mar 19, 2018
2e9996d
in-pass-shadows: add test example
shadowislord Mar 19, 2018
251511e
in-pass-shadows: add customized light sort
shadowislord Mar 19, 2018
cbf6ffa
in-pass-shadows: show cfg dialog for test
shadowislord Mar 19, 2018
54ef6ec
Merge master into branch
Nehon May 26, 2018
d444c28
Changes the name of the array shadow renderer to InPassShadowRenderer…
Nehon May 27, 2018
dd2626c
Properly remove static pass
Nehon May 27, 2018
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -561,4 +561,9 @@ public Object glFenceSync(int condition, int flags) {
public void glBlendEquationSeparate(int colorMode, int alphaMode) {
GLES20.glBlendEquationSeparate(colorMode, alphaMode);
}

@Override
public void glFramebufferTextureLayerEXT(int target, int attachment, int texture, int level, int layer) {
throw new UnsupportedOperationException("OpenGL ES 2 does not support texture arrays");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -53,9 +53,11 @@
import com.jme3.input.dummy.DummyMouseInput;
import com.jme3.renderer.android.AndroidGL;
import com.jme3.renderer.opengl.GL;
import com.jme3.renderer.opengl.GLDebugES;
import com.jme3.renderer.opengl.GLExt;
import com.jme3.renderer.opengl.GLFbo;
import com.jme3.renderer.opengl.GLRenderer;
import com.jme3.renderer.opengl.GLTracer;
import com.jme3.system.*;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.logging.Level;
Expand Down Expand Up @@ -195,8 +197,12 @@ public void uncaughtException(Thread thread, Throwable thrown) {

timer = new NanoTimer();
Object gl = new AndroidGL();
// gl = GLTracer.createGlesTracer((GL)gl, (GLExt)gl);
// gl = new GLDebugES((GL)gl, (GLExt)gl);
if (settings.getBoolean("GraphicsDebug")) {
gl = new GLDebugES((GL) gl, (GLExt) gl, (GLFbo) gl);
}
if (settings.getBoolean("GraphicsTrace")) {
gl = GLTracer.createGlesTracer(gl, GL.class, GLFbo.class, GLExt.class);
}
renderer = new GLRenderer((GL)gl, (GLExt)gl, (GLFbo)gl);
renderer.initialize();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@
public final class DefaultLightFilter implements LightFilter {

private Camera camera;
private final HashSet<Light> processedLights = new HashSet<Light>();
private final HashSet<Light> processedLights = new HashSet<>();
private final LightProbeBlendingStrategy probeBlendStrat;

public DefaultLightFilter() {
Expand All @@ -59,6 +59,7 @@ public void setCamera(Camera camera) {
for (Light light : processedLights) {
light.frustumCheckNeeded = true;
}
processedLights.clear();
}

@Override
Expand Down
19 changes: 19 additions & 0 deletions jme3-core/src/main/java/com/jme3/light/Light.java
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
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;

Expand Down Expand Up @@ -120,6 +121,8 @@ public int getId(){
boolean frustumCheckNeeded = true;
boolean intersectsFrustum = false;

protected ShadowMap shadowMap;

protected Light() {
}

Expand Down Expand Up @@ -163,6 +166,22 @@ public float getLastDistance(){
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.
Expand Down
58 changes: 27 additions & 31 deletions jme3-core/src/main/java/com/jme3/material/Material.java
Original file line number Diff line number Diff line change
Expand Up @@ -81,9 +81,9 @@ public class Material implements CloneableSmartAsset, Cloneable, Savable {
private AssetKey key;
private String name;
private MaterialDef def;
private ListMap<String, MatParam> paramValues = new ListMap<String, MatParam>();
private ListMap<String, MatParam> paramValues = new ListMap<>();
private Technique technique;
private HashMap<String, Technique> techniques = new HashMap<String, Technique>();
private HashMap<String, Technique> techniques = new HashMap<>();
private RenderState additionalState = null;
private RenderState mergedRenderState = new RenderState();
private boolean transparent = false;
Expand Down Expand Up @@ -143,10 +143,12 @@ public void setName(String name) {
this.name = name;
}

@Override
public void setKey(AssetKey key) {
this.key = key;
}

@Override
public AssetKey getKey() {
return key;
}
Expand Down Expand Up @@ -200,9 +202,9 @@ public Material clone() {
mat.additionalState = additionalState.clone();
}
mat.technique = null;
mat.techniques = new HashMap<String, Technique>();
mat.techniques = new HashMap<>();

mat.paramValues = new ListMap<String, MatParam>();
mat.paramValues = new ListMap<>();
for (int i = 0; i < paramValues.size(); i++) {
Map.Entry<String, MatParam> entry = paramValues.getEntry(i);
mat.paramValues.put(entry.getKey(), entry.getValue().clone());
Expand Down Expand Up @@ -817,7 +819,14 @@ private int updateShaderMaterialParameters(Renderer renderer, Shader shader,

private void updateRenderState(RenderManager renderManager, Renderer renderer, TechniqueDef techniqueDef) {
if (renderManager.getForcedRenderState() != null) {
renderer.applyRenderState(renderManager.getForcedRenderState());
if (techniqueDef.getForcedRenderState() != null) {
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This could break compatibility... I think it fixes a bug, or changes behavior

renderer.applyRenderState(
techniqueDef.getForcedRenderState().copyMergedTo(
renderManager.getForcedRenderState(),
mergedRenderState));
} else {
renderer.applyRenderState(renderManager.getForcedRenderState());
}
} else {
if (techniqueDef.getRenderState() != null) {
renderer.applyRenderState(techniqueDef.getRenderState().copyMergedTo(additionalState, mergedRenderState));
Expand Down Expand Up @@ -933,10 +942,9 @@ private void resetUniformsNotSetByCurrent(Shader shader) {
* </ul>
*
* @param geometry The geometry to render
* @param lights Presorted and filtered light list to use for rendering
* @param renderManager The render manager requesting the rendering
*/
public void render(Geometry geometry, LightList lights, RenderManager renderManager) {
public void render(Geometry geometry, RenderManager renderManager) {
if (technique == null) {
selectTechnique(TechniqueDef.DEFAULT_TECHNIQUE_NAME, renderManager);
}
Expand All @@ -956,7 +964,7 @@ public void render(Geometry geometry, LightList lights, RenderManager renderMana
SafeArrayList<MatParamOverride> overrides = geometry.getWorldMatParamOverrides();

// Select shader to use
Shader shader = technique.makeCurrent(renderManager, overrides, renderManager.getForcedMatParams(), lights, rendererCaps);
Shader shader = technique.makeCurrent(renderManager, geometry, overrides, renderManager.getForcedMatParams(), rendererCaps);

// Begin tracking which uniforms were changed by material.
clearUniformsSetByCurrent(shader);
Expand All @@ -965,29 +973,24 @@ public void render(Geometry geometry, LightList lights, RenderManager renderMana
renderManager.updateUniformBindings(shader);

// Set material parameters
int unit = updateShaderMaterialParameters(renderer, shader, overrides, renderManager.getForcedMatParams());
int nextTextureUnit = updateShaderMaterialParameters(renderer, shader, overrides, renderManager.getForcedMatParams());

// Clear any uniforms not changed by material.
resetUniformsNotSetByCurrent(shader);

// Delegate rendering to the technique
technique.render(renderManager, shader, geometry, lights, unit);
technique.render(renderManager, shader, geometry, nextTextureUnit);
}

/**
* Called by {@link RenderManager} to render the geometry by
* using this material.
*
* Note that this version of the render method
* does not perform light filtering.
*
* @param geom The geometry to render
* @param rm The render manager requesting the rendering
*/
public void render(Geometry geom, RenderManager rm) {
render(geom, geom.getWorldLightList(), rm);
@Override
public String toString() {
return "Material[name=" + name +
", def=" + (def != null ? def.getName() : null) +
", tech=" + (technique != null && technique.getDef() != null ? technique.getDef().getName() : null) +
"]";
}


@Override
public void write(JmeExporter ex) throws IOException {
OutputCapsule oc = ex.getCapsule(this);
oc.write(def.getAssetName(), "material_def", null);
Expand All @@ -998,13 +1001,6 @@ public void write(JmeExporter ex) throws IOException {
}

@Override
public String toString() {
return "Material[name=" + name +
", def=" + (def != null ? def.getName() : null) +
", tech=" + (technique != null && technique.getDef() != null ? technique.getDef().getName() : null) +
"]";
}

public void read(JmeImporter im) throws IOException {
InputCapsule ic = im.getCapsule(this);

Expand Down Expand Up @@ -1054,7 +1050,7 @@ public void read(JmeImporter im) throws IOException {
}

def = (MaterialDef) im.getAssetManager().loadAsset(new AssetKey(defName));
paramValues = new ListMap<String, MatParam>();
paramValues = new ListMap<>();

// load the textures and update nextTexUnit
for (Map.Entry<String, MatParam> entry : params.entrySet()) {
Expand Down
3 changes: 3 additions & 0 deletions jme3-core/src/main/java/com/jme3/material/RenderState.java
Original file line number Diff line number Diff line change
Expand Up @@ -429,6 +429,9 @@ public enum StencilOperation {
ADDITIONAL.applyBlendEquationAlpha = false;
ADDITIONAL.applyBlendMode = false;
ADDITIONAL.applyPolyOffset = false;
ADDITIONAL.applyStencilTest = false;
ADDITIONAL.applyLineWidth = false;
ADDITIONAL.applyDepthFunc = false;
}
boolean wireframe = false;
boolean applyWireFrame = true;
Expand Down
11 changes: 6 additions & 5 deletions jme3-core/src/main/java/com/jme3/material/Technique.java
Original file line number Diff line number Diff line change
Expand Up @@ -133,9 +133,10 @@ private void applyOverrides(DefineList defineList, SafeArrayList<MatParamOverrid
* @param rendererCaps The renderer capabilities which the shader should support.
* @return A compatible shader.
*/
Shader makeCurrent(RenderManager renderManager, SafeArrayList<MatParamOverride> worldOverrides,
Shader makeCurrent(RenderManager renderManager, Geometry geometry,
SafeArrayList<MatParamOverride> worldOverrides,
SafeArrayList<MatParamOverride> forcedOverrides,
LightList lights, EnumSet<Caps> rendererCaps) {
EnumSet<Caps> rendererCaps) {
TechniqueDefLogic logic = def.getLogic();
AssetManager assetManager = owner.getMaterialDef().getAssetManager();

Expand All @@ -149,7 +150,7 @@ Shader makeCurrent(RenderManager renderManager, SafeArrayList<MatParamOverride>
applyOverrides(dynamicDefines, forcedOverrides);
}

return logic.makeCurrent(assetManager, renderManager, rendererCaps, lights, dynamicDefines);
return logic.makeCurrent(assetManager, renderManager, rendererCaps, geometry, dynamicDefines);
}

/**
Expand All @@ -161,9 +162,9 @@ Shader makeCurrent(RenderManager renderManager, SafeArrayList<MatParamOverride>
* @param geometry The geometry to render
* @param lights Lights which influence the geometry.
*/
void render(RenderManager renderManager, Shader shader, Geometry geometry, LightList lights, int lastTexUnit) {
void render(RenderManager renderManager, Shader shader, Geometry geometry, int lastTextureUnit) {
TechniqueDefLogic logic = def.getLogic();
logic.render(renderManager, shader, geometry, lights, lastTexUnit);
logic.render(renderManager, shader, geometry, lastTextureUnit);
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,14 +48,15 @@
public class DefaultTechniqueDefLogic implements TechniqueDefLogic {

protected final TechniqueDef techniqueDef;
protected final LightList filteredLightList = new LightList(null);

public DefaultTechniqueDefLogic(TechniqueDef techniqueDef) {
this.techniqueDef = techniqueDef;
}

@Override
public Shader makeCurrent(AssetManager assetManager, RenderManager renderManager,
EnumSet<Caps> rendererCaps, LightList lights, DefineList defines) {
EnumSet<Caps> rendererCaps, Geometry geometry, DefineList defines) {
return techniqueDef.getShader(assetManager, rendererCaps, defines);
}

Expand All @@ -70,6 +71,19 @@ public static void renderMeshFromGeometry(Renderer renderer, Geometry geom) {
renderer.renderMesh(mesh, lodLevel, 1, null);
}
}

@Override
public void render(RenderManager renderManager, Shader shader, Geometry geometry, int lastTexUnit) {
Renderer renderer = renderManager.getRenderer();
renderer.setShader(shader);
renderMeshFromGeometry(renderer, geometry);
}

protected LightList getFilteredLightList(RenderManager renderManager, Geometry geom) {
filteredLightList.clear();
renderManager.getLightFilter().filterLights(geom, filteredLightList);
return filteredLightList;
}

protected static ColorRGBA getAmbientColor(LightList lightList, boolean removeLights, ColorRGBA ambientLightColor) {
ambientLightColor.set(0, 0, 0, 1);
Expand All @@ -85,13 +99,4 @@ protected static ColorRGBA getAmbientColor(LightList lightList, boolean removeLi
ambientLightColor.a = 1.0f;
return ambientLightColor;
}



@Override
public void render(RenderManager renderManager, Shader shader, Geometry geometry, LightList lights, int lastTexUnit) {
Renderer renderer = renderManager.getRenderer();
renderer.setShader(shader);
renderMeshFromGeometry(renderer, geometry);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@
*/
package com.jme3.material.logic;

import com.jme3.asset.AssetManager;
import com.jme3.light.AmbientLight;
import com.jme3.light.DirectionalLight;
import com.jme3.light.Light;
Expand All @@ -41,20 +40,16 @@
import com.jme3.material.RenderState;
import com.jme3.material.TechniqueDef;
import com.jme3.math.ColorRGBA;
import com.jme3.math.FastMath;
import com.jme3.math.Quaternion;
import com.jme3.math.Vector3f;
import com.jme3.math.Vector4f;
import com.jme3.renderer.Caps;
import com.jme3.renderer.RenderManager;
import com.jme3.renderer.Renderer;
import com.jme3.scene.Geometry;
import com.jme3.shader.DefineList;
import com.jme3.shader.Shader;
import com.jme3.shader.Uniform;
import com.jme3.shader.VarType;
import com.jme3.util.TempVars;
import java.util.EnumSet;

public final class MultiPassLightingLogic extends DefaultTechniqueDefLogic {

Expand All @@ -73,7 +68,7 @@ public MultiPassLightingLogic(TechniqueDef techniqueDef) {
}

@Override
public void render(RenderManager renderManager, Shader shader, Geometry geometry, LightList lights, int lastTexUnit) {
public void render(RenderManager renderManager, Shader shader, Geometry geometry, int lastTexUnit) {
Renderer r = renderManager.getRenderer();
Uniform lightDir = shader.getUniform("g_LightDirection");
Uniform lightColor = shader.getUniform("g_LightColor");
Expand All @@ -82,6 +77,7 @@ public void render(RenderManager renderManager, Shader shader, Geometry geometry
boolean isFirstLight = true;
boolean isSecondLight = false;

LightList lights = getFilteredLightList(renderManager, geometry);
getAmbientColor(lights, false, ambientLightColor);

for (int i = 0; i < lights.size(); i++) {
Expand Down
Loading