From 0f1c35c5f06c84431854a9b5a505c5401665e527 Mon Sep 17 00:00:00 2001 From: Kirill Vainer Date: Mon, 7 Dec 2015 21:34:51 -0500 Subject: [PATCH] minor formatting changes Conflicts: jme3-lwjgl/src/main/java/com/jme3/system/lwjgl/LwjglContext.java --- .../material/DefaultTechniqueDefLogic.java | 18 +-- .../material/SinglePassLightingLogic.java | 138 +++++++++--------- .../com/jme3/system/lwjgl/LwjglContext.java | 27 +--- 3 files changed, 83 insertions(+), 100 deletions(-) diff --git a/jme3-core/src/main/java/com/jme3/material/DefaultTechniqueDefLogic.java b/jme3-core/src/main/java/com/jme3/material/DefaultTechniqueDefLogic.java index 601ea7878..4edc38ee6 100644 --- a/jme3-core/src/main/java/com/jme3/material/DefaultTechniqueDefLogic.java +++ b/jme3-core/src/main/java/com/jme3/material/DefaultTechniqueDefLogic.java @@ -49,14 +49,14 @@ import java.util.EnumSet; public class DefaultTechniqueDefLogic implements TechniqueDefLogic { protected final TechniqueDef techniqueDef; - + public DefaultTechniqueDefLogic(TechniqueDef techniqueDef) { this.techniqueDef = techniqueDef; } - + @Override - public Shader makeCurrent(AssetManager assetManager, RenderManager renderManager, - EnumSet rendererCaps, DefineList defines) { + public Shader makeCurrent(AssetManager assetManager, RenderManager renderManager, + EnumSet rendererCaps, DefineList defines) { return techniqueDef.getShader(assetManager, rendererCaps, defines); } @@ -65,14 +65,14 @@ public class DefaultTechniqueDefLogic implements TechniqueDefLogic { int lodLevel = geom.getLodLevel(); if (geom instanceof InstancedGeometry) { InstancedGeometry instGeom = (InstancedGeometry) geom; - renderer.renderMesh(mesh, lodLevel, instGeom.getActualNumInstances(), - instGeom.getAllInstanceData()); + renderer.renderMesh(mesh, lodLevel, instGeom.getActualNumInstances(), + instGeom.getAllInstanceData()); } else { renderer.renderMesh(mesh, lodLevel, 1, null); } } - - public static ColorRGBA getAmbientColor(LightList lightList, boolean removeLights, ColorRGBA ambientLightColor) { + + protected static ColorRGBA getAmbientColor(LightList lightList, boolean removeLights, ColorRGBA ambientLightColor) { ambientLightColor.set(0, 0, 0, 1); for (int j = 0; j < lightList.size(); j++) { Light l = lightList.get(j); @@ -86,7 +86,7 @@ public class DefaultTechniqueDefLogic implements TechniqueDefLogic { ambientLightColor.a = 1.0f; return ambientLightColor; } - + @Override public void render(RenderManager renderManager, Shader shader, Geometry geometry, LightList lights) { Renderer renderer = renderManager.getRenderer(); diff --git a/jme3-core/src/main/java/com/jme3/material/SinglePassLightingLogic.java b/jme3-core/src/main/java/com/jme3/material/SinglePassLightingLogic.java index 8c6e8cd43..3f48c7bb0 100644 --- a/jme3-core/src/main/java/com/jme3/material/SinglePassLightingLogic.java +++ b/jme3-core/src/main/java/com/jme3/material/SinglePassLightingLogic.java @@ -57,14 +57,14 @@ public final class SinglePassLightingLogic extends DefaultTechniqueDefLogic { private static final String DEFINE_SINGLE_PASS_LIGHTING = "SINGLE_PASS_LIGHTING"; private static final String DEFINE_NB_LIGHTS = "NB_LIGHTS"; private static final RenderState ADDITIVE_LIGHT = new RenderState(); - + private final ColorRGBA ambientLightColor = new ColorRGBA(0, 0, 0, 1); - + static { ADDITIVE_LIGHT.setBlendMode(BlendMode.AlphaAdditive); ADDITIVE_LIGHT.setDepthWrite(false); } - + private final int singlePassLightingDefineId; private final int nbLightsDefineId; @@ -73,7 +73,7 @@ public final class SinglePassLightingLogic extends DefaultTechniqueDefLogic { singlePassLightingDefineId = techniqueDef.addShaderUnmappedDefine(DEFINE_SINGLE_PASS_LIGHTING, VarType.Boolean); nbLightsDefineId = techniqueDef.addShaderUnmappedDefine(DEFINE_NB_LIGHTS, VarType.Int); } - + @Override public Shader makeCurrent(AssetManager assetManager, RenderManager renderManager, EnumSet rendererCaps, DefineList defines) { @@ -81,7 +81,7 @@ public final class SinglePassLightingLogic extends DefaultTechniqueDefLogic { defines.set(singlePassLightingDefineId, true); return super.makeCurrent(assetManager, renderManager, rendererCaps, defines); } - + /** * Uploads the lights in the light list as two uniform arrays.

* *

@@ -120,73 +120,72 @@ public final class SinglePassLightingLogic extends DefaultTechniqueDefLogic { int endIndex = numLights + startIndex; for (curIndex = startIndex; curIndex < endIndex && curIndex < lightList.size(); curIndex++) { + Light l = lightList.get(curIndex); + if (l.getType() == Light.Type.Ambient) { + endIndex++; + continue; + } + ColorRGBA color = l.getColor(); + //Color + lightData.setVector4InArray(color.getRed(), + color.getGreen(), + color.getBlue(), + l.getType().getId(), + lightDataIndex); + lightDataIndex++; - Light l = lightList.get(curIndex); - if(l.getType() == Light.Type.Ambient){ - endIndex++; - continue; - } - ColorRGBA color = l.getColor(); - //Color - lightData.setVector4InArray(color.getRed(), - color.getGreen(), - color.getBlue(), - l.getType().getId(), - lightDataIndex); - lightDataIndex++; - - switch (l.getType()) { - case Directional: - DirectionalLight dl = (DirectionalLight) l; - Vector3f dir = dl.getDirection(); - //Data directly sent in view space to avoid a matrix mult for each pixel - tmpVec.set(dir.getX(), dir.getY(), dir.getZ(), 0.0f); - rm.getCurrentCamera().getViewMatrix().mult(tmpVec, tmpVec); + switch (l.getType()) { + case Directional: + DirectionalLight dl = (DirectionalLight) l; + Vector3f dir = dl.getDirection(); + //Data directly sent in view space to avoid a matrix mult for each pixel + tmpVec.set(dir.getX(), dir.getY(), dir.getZ(), 0.0f); + rm.getCurrentCamera().getViewMatrix().mult(tmpVec, tmpVec); // tmpVec.divideLocal(tmpVec.w); // tmpVec.normalizeLocal(); - lightData.setVector4InArray(tmpVec.getX(), tmpVec.getY(), tmpVec.getZ(), -1, lightDataIndex); - lightDataIndex++; - //PADDING - lightData.setVector4InArray(0,0,0,0, lightDataIndex); - lightDataIndex++; - break; - case Point: - PointLight pl = (PointLight) l; - Vector3f pos = pl.getPosition(); - float invRadius = pl.getInvRadius(); - tmpVec.set(pos.getX(), pos.getY(), pos.getZ(), 1.0f); - rm.getCurrentCamera().getViewMatrix().mult(tmpVec, tmpVec); - //tmpVec.divideLocal(tmpVec.w); - lightData.setVector4InArray(tmpVec.getX(), tmpVec.getY(), tmpVec.getZ(), invRadius, lightDataIndex); - lightDataIndex++; - //PADDING - lightData.setVector4InArray(0,0,0,0, lightDataIndex); - lightDataIndex++; - break; - case Spot: - SpotLight sl = (SpotLight) l; - Vector3f pos2 = sl.getPosition(); - Vector3f dir2 = sl.getDirection(); - float invRange = sl.getInvSpotRange(); - float spotAngleCos = sl.getPackedAngleCos(); - tmpVec.set(pos2.getX(), pos2.getY(), pos2.getZ(), 1.0f); - rm.getCurrentCamera().getViewMatrix().mult(tmpVec, tmpVec); - // tmpVec.divideLocal(tmpVec.w); - lightData.setVector4InArray(tmpVec.getX(), tmpVec.getY(), tmpVec.getZ(), invRange, lightDataIndex); - lightDataIndex++; - - //We transform the spot direction in view space here to save 5 varying later in the lighting shader - //one vec4 less and a vec4 that becomes a vec3 - //the downside is that spotAngleCos decoding happens now in the frag shader. - tmpVec.set(dir2.getX(), dir2.getY(), dir2.getZ(), 0.0f); - rm.getCurrentCamera().getViewMatrix().mult(tmpVec, tmpVec); - tmpVec.normalizeLocal(); - lightData.setVector4InArray(tmpVec.getX(), tmpVec.getY(), tmpVec.getZ(), spotAngleCos, lightDataIndex); - lightDataIndex++; - break; - default: - throw new UnsupportedOperationException("Unknown type of light: " + l.getType()); - } + lightData.setVector4InArray(tmpVec.getX(), tmpVec.getY(), tmpVec.getZ(), -1, lightDataIndex); + lightDataIndex++; + //PADDING + lightData.setVector4InArray(0, 0, 0, 0, lightDataIndex); + lightDataIndex++; + break; + case Point: + PointLight pl = (PointLight) l; + Vector3f pos = pl.getPosition(); + float invRadius = pl.getInvRadius(); + tmpVec.set(pos.getX(), pos.getY(), pos.getZ(), 1.0f); + rm.getCurrentCamera().getViewMatrix().mult(tmpVec, tmpVec); + //tmpVec.divideLocal(tmpVec.w); + lightData.setVector4InArray(tmpVec.getX(), tmpVec.getY(), tmpVec.getZ(), invRadius, lightDataIndex); + lightDataIndex++; + //PADDING + lightData.setVector4InArray(0, 0, 0, 0, lightDataIndex); + lightDataIndex++; + break; + case Spot: + SpotLight sl = (SpotLight) l; + Vector3f pos2 = sl.getPosition(); + Vector3f dir2 = sl.getDirection(); + float invRange = sl.getInvSpotRange(); + float spotAngleCos = sl.getPackedAngleCos(); + tmpVec.set(pos2.getX(), pos2.getY(), pos2.getZ(), 1.0f); + rm.getCurrentCamera().getViewMatrix().mult(tmpVec, tmpVec); + // tmpVec.divideLocal(tmpVec.w); + lightData.setVector4InArray(tmpVec.getX(), tmpVec.getY(), tmpVec.getZ(), invRange, lightDataIndex); + lightDataIndex++; + + //We transform the spot direction in view space here to save 5 varying later in the lighting shader + //one vec4 less and a vec4 that becomes a vec3 + //the downside is that spotAngleCos decoding happens now in the frag shader. + tmpVec.set(dir2.getX(), dir2.getY(), dir2.getZ(), 0.0f); + rm.getCurrentCamera().getViewMatrix().mult(tmpVec, tmpVec); + tmpVec.normalizeLocal(); + lightData.setVector4InArray(tmpVec.getX(), tmpVec.getY(), tmpVec.getZ(), spotAngleCos, lightDataIndex); + lightDataIndex++; + break; + default: + throw new UnsupportedOperationException("Unknown type of light: " + l.getType()); + } } vars.release(); //Padding of unsued buffer space @@ -197,7 +196,6 @@ public final class SinglePassLightingLogic extends DefaultTechniqueDefLogic { return curIndex; } - @Override public void render(RenderManager renderManager, Shader shader, Geometry geometry, LightList lights) { int nbRenderedLights = 0; diff --git a/jme3-lwjgl/src/main/java/com/jme3/system/lwjgl/LwjglContext.java b/jme3-lwjgl/src/main/java/com/jme3/system/lwjgl/LwjglContext.java index 3f1139886..172733cf2 100644 --- a/jme3-lwjgl/src/main/java/com/jme3/system/lwjgl/LwjglContext.java +++ b/jme3-lwjgl/src/main/java/com/jme3/system/lwjgl/LwjglContext.java @@ -29,6 +29,7 @@ * 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.system.lwjgl; import com.jme3.input.lwjgl.JInputJoyInput; @@ -69,7 +70,6 @@ public abstract class LwjglContext implements JmeContext { private static final Logger logger = Logger.getLogger(LwjglContext.class.getName()); protected static final String THREAD_NAME = "jME3 Main"; - protected AtomicBoolean created = new AtomicBoolean(false); protected AtomicBoolean renderable = new AtomicBoolean(false); protected final Object createdLock = new Object(); @@ -113,7 +113,6 @@ public abstract class LwjglContext implements JmeContext { return null; } } - protected int determineMaxSamples(int requestedSamples) { try { // If we already have a valid context, determine samples using current @@ -131,13 +130,11 @@ public abstract class LwjglContext implements JmeContext { } catch (LWJGLException ex) { listener.handleError("Failed to check if display is current", ex); } - if ((Pbuffer.getCapabilities() & Pbuffer.PBUFFER_SUPPORTED) == 0) { // No pbuffer, assume everything is supported. return Integer.MAX_VALUE; } else { Pbuffer pb = null; - // OpenGL2 method: Create pbuffer and query samples // from GL_ARB_framebuffer_object or GL_EXT_framebuffer_multisample. try { @@ -162,7 +159,6 @@ public abstract class LwjglContext implements JmeContext { } } } - protected void loadNatives() { if (JmeSystem.isLowPermissions()) { return; @@ -179,7 +175,6 @@ public abstract class LwjglContext implements JmeContext { } NativeLibraryLoader.loadNativeLibrary("lwjgl", true); } - protected int getNumSamplesToUse() { int samples = 0; if (settings.getSamples() > 1) { @@ -190,7 +185,6 @@ public abstract class LwjglContext implements JmeContext { "Couldn''t satisfy antialiasing samples requirement: x{0}. " + "Video hardware only supports: x{1}", new Object[]{samples, supportedSamples}); - samples = supportedSamples; } } @@ -202,50 +196,45 @@ public abstract class LwjglContext implements JmeContext { throw new RendererException("OpenGL 2.0 or higher is " + "required for jMonkeyEngine"); } - + if (settings.getRenderer().equals(AppSettings.LWJGL_OPENGL2) || settings.getRenderer().equals(AppSettings.LWJGL_OPENGL3)) { GL gl = new LwjglGL(); GLExt glext = new LwjglGLExt(); GLFbo glfbo; - + if (GLContext.getCapabilities().OpenGL30) { glfbo = new LwjglGLFboGL3(); } else { glfbo = new LwjglGLFboEXT(); } - + if (settings.getBoolean("GraphicsDebug")) { gl = new GLDebugDesktop(gl, glext, glfbo); glext = (GLExt) gl; glfbo = (GLFbo) gl; } - if (settings.getBoolean("GraphicsTiming")) { GLTimingState timingState = new GLTimingState(); gl = (GL) GLTiming.createGLTiming(gl, timingState, GL.class, GL2.class, GL3.class, GL4.class); glext = (GLExt) GLTiming.createGLTiming(glext, timingState, GLExt.class); glfbo = (GLFbo) GLTiming.createGLTiming(glfbo, timingState, GLFbo.class); } - if (settings.getBoolean("GraphicsTrace")) { gl = (GL) GLTracer.createDesktopGlTracer(gl, GL.class, GL2.class, GL3.class, GL4.class); glext = (GLExt) GLTracer.createDesktopGlTracer(glext, GLExt.class); glfbo = (GLFbo) GLTracer.createDesktopGlTracer(glfbo, GLFbo.class); } - renderer = new GLRenderer(gl, glext, glfbo); renderer.initialize(); } else { throw new UnsupportedOperationException("Unsupported renderer: " + settings.getRenderer()); } - if (GLContext.getCapabilities().GL_ARB_debug_output && settings.getBoolean("GraphicsDebug")) { ARBDebugOutput.glDebugMessageCallbackARB(new ARBDebugOutputCallback(new LwjglGLDebugOutputHandler())); } - - renderer.setMainFrameBufferSrgb(settings.isGammaCorrection()); - renderer.setLinearizeSrgbImages(settings.isGammaCorrection()); + renderer.setMainFrameBufferSrgb(settings.getGammaCorrection()); + renderer.setLinearizeSrgbImages(settings.getGammaCorrection()); // Init input if (keyInput != null) { @@ -270,15 +259,12 @@ public abstract class LwjglContext implements JmeContext { createdLock.notifyAll(); } } - public void internalCreate() { timer = new LwjglTimer(); - synchronized (createdLock) { created.set(true); createdLock.notifyAll(); } - if (renderable.get()) { initContextFirstTime(); } else { @@ -308,7 +294,6 @@ public abstract class LwjglContext implements JmeContext { public boolean isCreated() { return created.get(); } - public boolean isRenderable() { return renderable.get(); }