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
This commit is contained in:
commit
74a1d8b219
144
.gitignore
vendored
144
.gitignore
vendored
@ -1,126 +1,11 @@
|
||||
**/nbproject/private/
|
||||
/.gradle/
|
||||
/.nb-gradle/private/
|
||||
/.nb-gradle/profiles/private/
|
||||
/.nb-gradle/
|
||||
/.idea/
|
||||
/dist/
|
||||
/build/
|
||||
/bin/
|
||||
/netbeans/
|
||||
/sdk/jdks/local/
|
||||
/jme3-core/build/
|
||||
/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-bullet-native/bullet.zip
|
||||
/jme3-bullet-native/bullet-2.82-r2704/
|
||||
/jme3-android-native/openal-soft/
|
||||
/jme3-android-native/OpenALSoft.zip
|
||||
/jme3-android-native/src/native/jme_decode/STBI/
|
||||
/jme3-android-native/src/native/jme_decode/Tremor/
|
||||
/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
|
||||
@ -130,21 +15,20 @@
|
||||
*.dylib
|
||||
*.iml
|
||||
.DS_Store
|
||||
/sdk/dist/
|
||||
/jme3-core/src/main/resources/com/jme3/system/version.properties
|
||||
/jme3-*/build/
|
||||
/jme3-bullet-native/bullet.zip
|
||||
/jme3-bullet-native/bullet-2.82-r2704/
|
||||
/jme3-android-native/openal-soft/
|
||||
/jme3-android-native/OpenALSoft.zip
|
||||
/jme3-android-native/src/native/jme_decode/STBI/
|
||||
/jme3-android-native/src/native/jme_decode/Tremor/
|
||||
/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
|
||||
!/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/
|
||||
|
@ -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;
|
||||
|
@ -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>
|
||||
*
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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();
|
||||
|
@ -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<>();
|
||||
|
@ -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();
|
||||
|
@ -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();
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user