瀏覽代碼

Merge branch 'master' into experimental

Conflicts:
	jme3-core/src/main/java/com/jme3/renderer/opengl/GLRenderer.java
	jme3-core/src/main/java/com/jme3/scene/Node.java
	jme3-core/src/main/java/com/jme3/scene/Spatial.java
	jme3-core/src/main/java/com/jme3/shader/ShaderGenerator.java
Kirill Vainer 9 年之前
父節點
當前提交
74a1d8b219

+ 13 - 129
.gitignore

@@ -1,34 +1,22 @@
+**/nbproject/private/
 /.gradle/
-/.nb-gradle/private/
-/.nb-gradle/profiles/private/
+/.nb-gradle/
 /.idea/
 /dist/
 /build/
+/bin/
 /netbeans/
-/sdk/jdks/local/
-/jme3-core/build/
+/.classpath
+/.project
+/.settings
+*.dll
+*.so
+*.jnilib
+*.dylib
+*.iml
+.DS_Store
 /jme3-core/src/main/resources/com/jme3/system/version.properties
-/jme3-plugins/build/
-/jme3-desktop/build/
-/jme3-android-native/build/
-/jme3-android/build/
-/jme3-android-examples/build/
-/jme3-blender/build/
-/jme3-effects/build/
-/jme3-bullet/build/
-/jme3-terrain/build/
-/jme3-bullet-native/build/
-/jme3-bullet-native-android/build/
-/jme3-jogg/build/
-/jme3-jbullet/build/
-/jme3-lwjgl/build/
-/jme3-networking/build/
-/jme3-niftygui/build/
-/jme3-testdata/build/
-/jme3-examples/build/
-/jme3-jogl/build/
-/jme3-ios/build/
-/jme3-gl-autogen/build/
+/jme3-*/build/
 /jme3-bullet-native/bullet.zip
 /jme3-bullet-native/bullet-2.82-r2704/
 /jme3-android-native/openal-soft/
@@ -38,113 +26,9 @@
 /jme3-android-native/src/native/jme_decode/com_jme3_audio_plugins_NativeVorbisFile.h
 /jme3-android-native/src/native/jme_decode/com_jme3_texture_plugins_AndroidNativeImageLoader.h
 /jme3-android-native/stb_image.h
-/sdk/jme3-tests-template/src/com/jme3/gde/templates/tests/JmeTestsProject.zip
-/sdk/jme3-tests-template/src/com/jme3/gde/templates/tests/JME3TestsAndroidProject.zip
-/sdk/jme3-project-testdata/release/
-/sdk/JME3TestsTemplateAndroid/src/jme3test/
-/sdk/JME3TestsTemplate/src/jme3test/
-/sdk/build/
-/sdk/jme3-core-baselibs/release/
-/sdk/jme3-core-libraries/release/
-/sdk/jme3-project-baselibs/release/
-/sdk/jme3-project-libraries/release/
-/sdk/jme3-codepalette/build/
-/sdk/jme3-core-libraries/build/
-/sdk/jme3-code-check/build/
-/sdk/jme3-core-baselibs/build/
-/sdk/jme3-documentation/build/
-/sdk/jme3-core-updatecenters/build/
-/sdk/jme3-project-testdata/build/
-/sdk/jme3-project-libraries/build/
-/sdk/jme3-project-baselibs/build/
-/sdk/jme3-templates/build/
-/sdk/jme3-texture-editor/build/
-/sdk/jme3-tests-template/build/
-/sdk/jme3-upgrader/build/
-/sdk/jme3-core/build/
-/sdk/jme3-obfuscate/build/
-/sdk/jme3-gui/build/
-/sdk/jme3-cinematics/build/
-/sdk/jme3-terrain-editor/build/
-/sdk/jme3-lwjgl-applet/build/
-/sdk/jme3-blender/build/
-/sdk/jme3-navmesh-gen/build/
-/sdk/jme3-angelfont/build/
-/sdk/jme3-materialeditor/build/
-/sdk/jme3-android/build/
-/sdk/jme3-desktop-executables/build/
-/sdk/jme3-ogrexml/build/
-/sdk/jme3-ogretools/build/
-/sdk/jme3-scenecomposer/build/
-/sdk/jme3-assetpack-support/build/
-/sdk/jme3-model-importer/build/
-/sdk/jme3-wavefront/build/
-/sdk/jme3-vehicle-creator/build/
-/sdk/jme3-welcome-screen/build/
-/sdk/jme3-glsl-support/build/
-/sdk/jme3-dark-laf/build/
-/sdk/nbproject/private/
-/sdk/jme3-scenecomposer/nbproject/private/
-/sdk/jme3-core/nbproject/private/
-/sdk/jme3-core-baselibs/nbproject/private/
-/sdk/jme3-welcome-screen/nbproject/private/
-/sdk/jme3-lwjgl-applet/nbproject/private/
-/sdk/jme3-ogrexml/nbproject/private/
-/sdk/jme3-upgrader/nbproject/private/
-/sdk/jme3-obfuscate/nbproject/private/
-/sdk/jme3-navmesh-gen/nbproject/private/
-/sdk/jme3-wavefront/nbproject/private/
-/sdk/jme3-project-libraries/nbproject/private/
-/sdk/jme3-ogretools/nbproject/private/
-/sdk/jme3-assetpack-support/nbproject/private/
-/sdk/jme3-cinematics/nbproject/private/
-/sdk/jme3-model-importer/nbproject/private/
-/sdk/jme3-desktop-executables/nbproject/private/
-/sdk/jme3-glsl-support/nbproject/private/
-/sdk/jme3-android/nbproject/private/
-/sdk/jme3-angelfont/nbproject/private/
-/sdk/jme3-codepalette/nbproject/private/
-/sdk/jme3-documentation/nbproject/private/
-/sdk/jme3-vehicle-creator/nbproject/private/
-/sdk/jme3-code-check/nbproject/private/
-/sdk/jme3-blender/nbproject/private/
-/sdk/jme3-core-libraries/nbproject/private/
-/sdk/jme3-core-updatecenters/nbproject/private/
-/sdk/jme3-gui/nbproject/private/
-/sdk/jme3-materialeditor/nbproject/private/
-/sdk/jme3-project-baselibs/nbproject/private/
-/sdk/jme3-project-testdata/nbproject/private/
-/sdk/jme3-templates/nbproject/private/
-/sdk/jme3-terrain-editor/nbproject/private/
-/sdk/jme3-tests-template/nbproject/private/
-/sdk/jme3-texture-editor/nbproject/private/
-/sdk/JME3TestsTemplate/nbproject/private/
-/sdk/JME3TestsTemplateAndroid/nbproject/private/
-/bin
-/.classpath
-/.project
-/.settings
-*.dll
-*.so
-*.jnilib
-*.dylib
-*.iml
-.DS_Store
-/sdk/dist/
 !/jme3-bullet-native/libs/native/windows/x86_64/bulletjme.dll
 !/jme3-bullet-native/libs/native/windows/x86/bulletjme.dll
 !/jme3-bullet-native/libs/native/osx/x86/libbulletjme.dylib
 !/jme3-bullet-native/libs/native/osx/x86_64/libbulletjme.dylib
 !/jme3-bullet-native/libs/native/linux/x86/libbulletjme.so
 !/jme3-bullet-native/libs/native/linux/x86_64/libbulletjme.so
-/.nb-gradle/
-/sdk/ant-jme/nbproject/private/
-/sdk/nbi/stub/ext/engine/nbproject/private/
-/sdk/nbi/stub/ext/components/products/jdk/nbproject/private/
-/sdk/nbi/stub/ext/components/products/blender/nbproject/private/
-/sdk/nbi/stub/ext/components/products/helloworld/nbproject/private/
-/sdk/BasicGameTemplate/nbproject/private/
-/sdk/nbi/stub/ext/components/products/jdk/build/
-/sdk/nbi/stub/ext/components/products/jdk/dist/
-/sdk/jme3-dark-laf/nbproject/private/
-jme3-lwjgl3/build/

+ 3 - 0
jme3-core/src/main/java/com/jme3/material/RenderState.java

@@ -822,6 +822,9 @@ public class RenderState implements Cloneable, Savable {
      * @param lineWidth the line width.
      */
     public void setLineWidth(float lineWidth) {
+        if (lineWidth < 1f) {
+            throw new IllegalArgumentException("lineWidth must be greater than or equal to 1.0");
+        }
         this.lineWidth = lineWidth;
         this.applyLineWidth = true;
         cachedHashCode = -1;

+ 9 - 4
jme3-core/src/main/java/com/jme3/renderer/RenderManager.java

@@ -616,7 +616,9 @@ public class RenderManager {
 
             gm.getMaterial().preload(this);
             Mesh mesh = gm.getMesh();
-            if (mesh != null) {
+            if (mesh != null
+                    && mesh.getVertexCount() != 0
+                    && mesh.getTriangleCount() != 0) {
                 for (VertexBuffer vb : mesh.getBufferList().getArray()) {
                     if (vb.getData() != null && vb.getUsage() != VertexBuffer.Usage.CpuOnly) {
                         renderer.updateBufferData(vb);
@@ -641,8 +643,10 @@ public class RenderManager {
      * <p>
      * In addition to enqueuing the visible geometries, this method
      * also scenes which cast or receive shadows, by putting them into the
-     * RenderQueue's {@link RenderQueue#renderShadowQueue(GeometryList, RenderManager, Camera, boolean) shadow queue}.
-     * Each Spatial which has its {@link Spatial#setShadowMode(com.jme3.renderer.queue.RenderQueue.ShadowMode) shadow mode}
+     * RenderQueue's 
+     * {@link RenderQueue#addToShadowQueue(com.jme3.scene.Geometry, com.jme3.renderer.queue.RenderQueue.ShadowMode) 
+     * shadow queue}. Each Spatial which has its 
+     * {@link Spatial#setShadowMode(com.jme3.renderer.queue.RenderQueue.ShadowMode) shadow mode}
      * set to not off, will be put into the appropriate shadow queue, note that
      * this process does not check for frustum culling on any 
      * {@link ShadowMode#Cast shadow casters}, as they don't have to be
@@ -989,7 +993,8 @@ public class RenderManager {
      * (see {@link #renderTranslucentQueue(com.jme3.renderer.ViewPort) })</li>
      * <li>If any objects remained in the render queue, they are removed
      * from the queue. This is generally objects added to the 
-     * {@link RenderQueue#renderShadowQueue(GeometryList, RenderManager, Camera, boolean) shadow queue}
+     * {@link RenderQueue#renderShadowQueue(com.jme3.renderer.queue.RenderQueue.ShadowMode, com.jme3.renderer.RenderManager, com.jme3.renderer.Camera, boolean) 
+     * shadow queue}
      * which were not rendered because of a missing shadow renderer.</li>
      * </ul>
      * 

+ 4 - 12
jme3-core/src/main/java/com/jme3/renderer/opengl/GLRenderer.java

@@ -474,14 +474,13 @@ public final class GLRenderer implements Renderer {
                 });
 
         // Print capabilities (if fine logging is enabled)
-        if (logger.isLoggable(Level.INFO)) {
+        if (logger.isLoggable(Level.FINE)) {
             StringBuilder sb = new StringBuilder();
             sb.append("Supported capabilities: \n");
             for (Caps cap : caps)
             {
                 sb.append("\t").append(cap.toString()).append("\n");
             }
-
             sb.append("\nHardware limits: \n");
             for (Limits limit : Limits.values()) {
                 Integer value = limits.get(limit);
@@ -492,7 +491,7 @@ public final class GLRenderer implements Renderer {
                   .append(value).append("\n");
             }
 
-            logger.log(Level.INFO, sb.toString());
+            logger.log(Level.FINE, sb.toString());
         }
 
         texUtil.initialize(caps);
@@ -1536,7 +1535,6 @@ public final class GLRenderer implements Renderer {
             FrameBuffer.RenderBuffer colorBuf = fb.getColorBuffer(i);
             updateFrameBufferAttachment(fb, colorBuf);
         }
-
         FrameBuffer.RenderBuffer depthBuf = fb.getDepthBuffer();
         if (depthBuf != null) {
             updateFrameBufferAttachment(fb, depthBuf);
@@ -2568,7 +2566,6 @@ public final class GLRenderer implements Renderer {
             }
         }
     }
-
     public void setVertexAttrib(VertexBuffer vb) {
         setVertexAttrib(vb, null);
     }
@@ -2619,6 +2616,7 @@ public final class GLRenderer implements Renderer {
 
         int vertCount = mesh.getVertexCount();
         boolean useInstancing = count > 1 && caps.contains(Caps.MeshInstancing);
+
         if (useInstancing) {
             glext.glDrawElementsInstancedARB(convertElementMode(mesh.getMode()),
                     indexBuf.getData().limit(),
@@ -2717,7 +2715,6 @@ public final class GLRenderer implements Renderer {
                 setVertexAttribVAO(vb, interleavedData);
             }
         }
-
         mesh.clearUpdateNeeded();
     }
 
@@ -2819,13 +2816,11 @@ public final class GLRenderer implements Renderer {
         VertexBuffer indices = getIndexBuffer(mesh, lod);
 
         clearVertexAttribs();
-
         if (indices != null) {
             drawTriangleList(indices, mesh, count);
         } else {
             drawTriangleArray(mesh.getMode(), count, mesh.getVertexCount());
         }
-
     }
 
     public void renderMesh(Mesh mesh, int lod, int count, VertexBuffer[] instanceData) {
@@ -2836,9 +2831,8 @@ public final class GLRenderer implements Renderer {
         if (count > 1 && !caps.contains(Caps.MeshInstancing)) {
             throw new RendererException("Mesh instancing is not supported by the video hardware");
         }
-
         //this is kept for backward compatibility.
-        if (mesh.getLineWidth() != -1 && context.lineWidth != mesh.getLineWidth()) {
+        if (mesh.getLineWidth() != 1f && context.lineWidth != mesh.getLineWidth()) {
             gl.glLineWidth(mesh.getLineWidth());
             context.lineWidth = mesh.getLineWidth();
         }
@@ -2846,9 +2840,7 @@ public final class GLRenderer implements Renderer {
         if (gl4 != null && mesh.getMode().equals(Mode.Patch)) {
             gl4.glPatchParameter(mesh.getPatchVertexCount());
         }
-
         statistics.onMeshDrawn(mesh, lod, count);
-
         // Here while count is still passed in.  Can be removed when/if
         // the method is collapsed again.  -pspeed
         count = Math.max(mesh.getInstanceCount(), count);

+ 4 - 1
jme3-core/src/main/java/com/jme3/scene/Mesh.java

@@ -171,7 +171,7 @@ public class Mesh extends NativeObject implements Savable, Cloneable, JmeCloneab
     private IntMap<VertexBuffer> buffers = new IntMap<VertexBuffer>();
     private VertexBuffer[] lodLevels;
     private float pointSize = 1;
-    private float lineWidth = -1;
+    private float lineWidth = 1;
 
     private transient int vertexArrayID = -1;
 
@@ -578,6 +578,9 @@ public class Mesh extends NativeObject implements Savable, Cloneable, JmeCloneab
      */
     @Deprecated
     public void setLineWidth(float lineWidth) {
+        if (lineWidth < 1f) {
+            throw new IllegalArgumentException("lineWidth must be greater than or equal to 1.0");
+        }
         this.lineWidth = lineWidth;
     }
 

+ 1 - 1
jme3-core/src/main/java/com/jme3/scene/Node.java

@@ -259,7 +259,6 @@ public class Node extends Spatial {
         if ((refreshFlags & RF_MATPARAM_OVERRIDE) != 0) {
             updateMatParamOverrides();
         }
-
         if ((refreshFlags & RF_TRANSFORM) != 0){
             // combine with parent transforms- same for all spatial
             // subclasses.
@@ -450,6 +449,7 @@ public class Node extends Spatial {
             child.setTransformRefresh();
             // lights are also inherited from parent
             child.setLightListRefresh();
+
             child.setMatParamOverrideRefresh();
             
             invalidateUpdateList();

+ 7 - 11
jme3-core/src/main/java/com/jme3/scene/Spatial.java

@@ -126,6 +126,7 @@ public abstract class Spatial implements Savable, Cloneable, Collidable, Cloneab
                                RF_CHILD_LIGHTLIST = 0x08, // some child need geometry update
                                RF_MATPARAM_OVERRIDE = 0x10;
     
+
     protected CullHint cullHint = CullHint.Inherit;
     protected BatchHint batchHint = BatchHint.Inherit;
     /**
@@ -137,10 +138,8 @@ public abstract class Spatial implements Savable, Cloneable, Collidable, Cloneab
      */
     protected LightList localLights;
     protected transient LightList worldLights;
-
     protected ArrayList<MatParamOverride> localOverrides;
     protected ArrayList<MatParamOverride> worldOverrides;
-
     /**
      * This spatial's name.
      */
@@ -210,7 +209,6 @@ public abstract class Spatial implements Savable, Cloneable, Collidable, Cloneab
 
         localOverrides = new ArrayList<MatParamOverride>();
         worldOverrides = new ArrayList<MatParamOverride>();
-
         refreshFlags |= RF_BOUND;
     }
 
@@ -285,7 +283,8 @@ public abstract class Spatial implements Savable, Cloneable, Collidable, Cloneab
         // Make sure next updateGeometricState() visits this branch
         // to update lights.
         Spatial p = parent;
-        while (p != null) {            
+        while (p != null) {
+
             if ((p.refreshFlags & RF_CHILD_LIGHTLIST) != 0) {
                 // The parent already has this flag,
                 // so must all ancestors.
@@ -309,7 +308,6 @@ public abstract class Spatial implements Savable, Cloneable, Collidable, Cloneab
             p = p.parent;
         }
     }
-
     /**
      * Indicate that the bounding of this spatial has changed and that
      * a refresh is required.
@@ -643,7 +641,6 @@ public abstract class Spatial implements Savable, Cloneable, Collidable, Cloneab
         }
         localOverrides.clear();
     }
-
     /**
      * Should only be called from updateGeometricState().
      * In most cases should not be subclassed.
@@ -662,7 +659,7 @@ public abstract class Spatial implements Savable, Cloneable, Collidable, Cloneab
     }
 
     /**
-     * Computes the world transform of this Spatial in the most 
+     * Computes the world transform of this Spatial in the most
      * efficient manner possible.
      */
     void checkDoTransformUpdate() {
@@ -918,6 +915,7 @@ public abstract class Spatial implements Savable, Cloneable, Collidable, Cloneab
         if ((refreshFlags & RF_BOUND) != 0) {
             updateWorldBound();
         }
+
         if ((refreshFlags & RF_MATPARAM_OVERRIDE) != 0) {
             updateMatParamOverrides();
         }
@@ -1375,7 +1373,7 @@ public abstract class Spatial implements Savable, Cloneable, Collidable, Cloneab
         // the transforms and stuff get refreshed.
         clone.setTransformRefresh();
         clone.setLightListRefresh();
-	clone.setMatParamOverrideRefresh();
+        clone.setMatParamOverrideRefresh();
 
         return clone;
     }
@@ -1402,7 +1400,6 @@ public abstract class Spatial implements Savable, Cloneable, Collidable, Cloneab
             for (MatParamOverride override : localOverrides) {
                 clone.localOverrides.add((MatParamOverride) override.clone());
             }
-
             // No need to force cloned to update.
             // This node already has the refresh flags
             // set below so it will have to update anyway.
@@ -1480,7 +1477,7 @@ public abstract class Spatial implements Savable, Cloneable, Collidable, Cloneab
         // the transforms and stuff get refreshed.
         clone.setTransformRefresh();
         clone.setLightListRefresh();
-	clone.setMatParamOverrideRefresh();
+		clone.setMatParamOverrideRefresh();
 
         return clone;
     }
@@ -1633,7 +1630,6 @@ public abstract class Spatial implements Savable, Cloneable, Collidable, Cloneab
 
         localLights = (LightList) ic.readSavable("lights", null);
         localLights.setOwner(this);
-
         localOverrides = ic.readSavableArrayList("overrides", null);
         if (localOverrides == null) {
             localOverrides = new ArrayList<>();

+ 1 - 3
jme3-core/src/main/java/com/jme3/shader/ShaderGenerator.java

@@ -69,11 +69,10 @@ public abstract class ShaderGenerator {
     protected ShaderGenerator(AssetManager assetManager) {
         this.assetManager = assetManager;
     }
-
     public void initialize(TechniqueDef techniqueDef) {
         this.techniqueDef = techniqueDef;
     }
-
+    
     /**
      * Generate vertex and fragment shaders for the given technique
      *
@@ -123,7 +122,6 @@ public abstract class ShaderGenerator {
             // Too much code assumes that type is either Vertex or Fragment
             return null;
         }
-
         indent = 0;
 
         StringBuilder sourceDeclaration = new StringBuilder();

+ 4 - 19
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.jinput.JInputJoyInput;
@@ -68,7 +69,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();
@@ -112,7 +112,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
@@ -130,13 +129,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 {
@@ -161,7 +158,6 @@ public abstract class LwjglContext implements JmeContext {
             }
         }
     }
-
     protected void loadNatives() {
         if (JmeSystem.isLowPermissions()) {
             return;
@@ -179,7 +175,6 @@ public abstract class LwjglContext implements JmeContext {
         System.setProperty("org.lwjgl.librarypath", extractPath);
         NativeLibraryLoader.loadNativeLibrary("lwjgl", true, false);
     }
-
     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,48 +196,43 @@ 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());
 
@@ -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();
     }