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/
|
/.gradle/
|
||||||
/.nb-gradle/private/
|
/.nb-gradle/
|
||||||
/.nb-gradle/profiles/private/
|
|
||||||
/.idea/
|
/.idea/
|
||||||
/dist/
|
/dist/
|
||||||
/build/
|
/build/
|
||||||
|
/bin/
|
||||||
/netbeans/
|
/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
|
/.classpath
|
||||||
/.project
|
/.project
|
||||||
/.settings
|
/.settings
|
||||||
@ -130,21 +15,20 @@
|
|||||||
*.dylib
|
*.dylib
|
||||||
*.iml
|
*.iml
|
||||||
.DS_Store
|
.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_64/bulletjme.dll
|
||||||
!/jme3-bullet-native/libs/native/windows/x86/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/libbulletjme.dylib
|
||||||
!/jme3-bullet-native/libs/native/osx/x86_64/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/libbulletjme.so
|
||||||
!/jme3-bullet-native/libs/native/linux/x86_64/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.
|
* @param lineWidth the line width.
|
||||||
*/
|
*/
|
||||||
public void setLineWidth(float lineWidth) {
|
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.lineWidth = lineWidth;
|
||||||
this.applyLineWidth = true;
|
this.applyLineWidth = true;
|
||||||
cachedHashCode = -1;
|
cachedHashCode = -1;
|
||||||
|
@ -616,7 +616,9 @@ public class RenderManager {
|
|||||||
|
|
||||||
gm.getMaterial().preload(this);
|
gm.getMaterial().preload(this);
|
||||||
Mesh mesh = gm.getMesh();
|
Mesh mesh = gm.getMesh();
|
||||||
if (mesh != null) {
|
if (mesh != null
|
||||||
|
&& mesh.getVertexCount() != 0
|
||||||
|
&& mesh.getTriangleCount() != 0) {
|
||||||
for (VertexBuffer vb : mesh.getBufferList().getArray()) {
|
for (VertexBuffer vb : mesh.getBufferList().getArray()) {
|
||||||
if (vb.getData() != null && vb.getUsage() != VertexBuffer.Usage.CpuOnly) {
|
if (vb.getData() != null && vb.getUsage() != VertexBuffer.Usage.CpuOnly) {
|
||||||
renderer.updateBufferData(vb);
|
renderer.updateBufferData(vb);
|
||||||
@ -641,8 +643,10 @@ public class RenderManager {
|
|||||||
* <p>
|
* <p>
|
||||||
* In addition to enqueuing the visible geometries, this method
|
* In addition to enqueuing the visible geometries, this method
|
||||||
* also scenes which cast or receive shadows, by putting them into the
|
* also scenes which cast or receive shadows, by putting them into the
|
||||||
* RenderQueue's {@link RenderQueue#renderShadowQueue(GeometryList, RenderManager, Camera, boolean) shadow queue}.
|
* RenderQueue's
|
||||||
* Each Spatial which has its {@link Spatial#setShadowMode(com.jme3.renderer.queue.RenderQueue.ShadowMode) shadow mode}
|
* {@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
|
* set to not off, will be put into the appropriate shadow queue, note that
|
||||||
* this process does not check for frustum culling on any
|
* this process does not check for frustum culling on any
|
||||||
* {@link ShadowMode#Cast shadow casters}, as they don't have to be
|
* {@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>
|
* (see {@link #renderTranslucentQueue(com.jme3.renderer.ViewPort) })</li>
|
||||||
* <li>If any objects remained in the render queue, they are removed
|
* <li>If any objects remained in the render queue, they are removed
|
||||||
* from the queue. This is generally objects added to the
|
* 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>
|
* which were not rendered because of a missing shadow renderer.</li>
|
||||||
* </ul>
|
* </ul>
|
||||||
*
|
*
|
||||||
|
@ -474,14 +474,13 @@ public final class GLRenderer implements Renderer {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// Print capabilities (if fine logging is enabled)
|
// Print capabilities (if fine logging is enabled)
|
||||||
if (logger.isLoggable(Level.INFO)) {
|
if (logger.isLoggable(Level.FINE)) {
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
sb.append("Supported capabilities: \n");
|
sb.append("Supported capabilities: \n");
|
||||||
for (Caps cap : caps)
|
for (Caps cap : caps)
|
||||||
{
|
{
|
||||||
sb.append("\t").append(cap.toString()).append("\n");
|
sb.append("\t").append(cap.toString()).append("\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
sb.append("\nHardware limits: \n");
|
sb.append("\nHardware limits: \n");
|
||||||
for (Limits limit : Limits.values()) {
|
for (Limits limit : Limits.values()) {
|
||||||
Integer value = limits.get(limit);
|
Integer value = limits.get(limit);
|
||||||
@ -492,7 +491,7 @@ public final class GLRenderer implements Renderer {
|
|||||||
.append(value).append("\n");
|
.append(value).append("\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
logger.log(Level.INFO, sb.toString());
|
logger.log(Level.FINE, sb.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
texUtil.initialize(caps);
|
texUtil.initialize(caps);
|
||||||
@ -1536,7 +1535,6 @@ public final class GLRenderer implements Renderer {
|
|||||||
FrameBuffer.RenderBuffer colorBuf = fb.getColorBuffer(i);
|
FrameBuffer.RenderBuffer colorBuf = fb.getColorBuffer(i);
|
||||||
updateFrameBufferAttachment(fb, colorBuf);
|
updateFrameBufferAttachment(fb, colorBuf);
|
||||||
}
|
}
|
||||||
|
|
||||||
FrameBuffer.RenderBuffer depthBuf = fb.getDepthBuffer();
|
FrameBuffer.RenderBuffer depthBuf = fb.getDepthBuffer();
|
||||||
if (depthBuf != null) {
|
if (depthBuf != null) {
|
||||||
updateFrameBufferAttachment(fb, depthBuf);
|
updateFrameBufferAttachment(fb, depthBuf);
|
||||||
@ -2568,7 +2566,6 @@ public final class GLRenderer implements Renderer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setVertexAttrib(VertexBuffer vb) {
|
public void setVertexAttrib(VertexBuffer vb) {
|
||||||
setVertexAttrib(vb, null);
|
setVertexAttrib(vb, null);
|
||||||
}
|
}
|
||||||
@ -2619,6 +2616,7 @@ public final class GLRenderer implements Renderer {
|
|||||||
|
|
||||||
int vertCount = mesh.getVertexCount();
|
int vertCount = mesh.getVertexCount();
|
||||||
boolean useInstancing = count > 1 && caps.contains(Caps.MeshInstancing);
|
boolean useInstancing = count > 1 && caps.contains(Caps.MeshInstancing);
|
||||||
|
|
||||||
if (useInstancing) {
|
if (useInstancing) {
|
||||||
glext.glDrawElementsInstancedARB(convertElementMode(mesh.getMode()),
|
glext.glDrawElementsInstancedARB(convertElementMode(mesh.getMode()),
|
||||||
indexBuf.getData().limit(),
|
indexBuf.getData().limit(),
|
||||||
@ -2717,7 +2715,6 @@ public final class GLRenderer implements Renderer {
|
|||||||
setVertexAttribVAO(vb, interleavedData);
|
setVertexAttribVAO(vb, interleavedData);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mesh.clearUpdateNeeded();
|
mesh.clearUpdateNeeded();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2819,13 +2816,11 @@ public final class GLRenderer implements Renderer {
|
|||||||
VertexBuffer indices = getIndexBuffer(mesh, lod);
|
VertexBuffer indices = getIndexBuffer(mesh, lod);
|
||||||
|
|
||||||
clearVertexAttribs();
|
clearVertexAttribs();
|
||||||
|
|
||||||
if (indices != null) {
|
if (indices != null) {
|
||||||
drawTriangleList(indices, mesh, count);
|
drawTriangleList(indices, mesh, count);
|
||||||
} else {
|
} else {
|
||||||
drawTriangleArray(mesh.getMode(), count, mesh.getVertexCount());
|
drawTriangleArray(mesh.getMode(), count, mesh.getVertexCount());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void renderMesh(Mesh mesh, int lod, int count, VertexBuffer[] instanceData) {
|
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)) {
|
if (count > 1 && !caps.contains(Caps.MeshInstancing)) {
|
||||||
throw new RendererException("Mesh instancing is not supported by the video hardware");
|
throw new RendererException("Mesh instancing is not supported by the video hardware");
|
||||||
}
|
}
|
||||||
|
|
||||||
//this is kept for backward compatibility.
|
//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());
|
gl.glLineWidth(mesh.getLineWidth());
|
||||||
context.lineWidth = mesh.getLineWidth();
|
context.lineWidth = mesh.getLineWidth();
|
||||||
}
|
}
|
||||||
@ -2846,9 +2840,7 @@ public final class GLRenderer implements Renderer {
|
|||||||
if (gl4 != null && mesh.getMode().equals(Mode.Patch)) {
|
if (gl4 != null && mesh.getMode().equals(Mode.Patch)) {
|
||||||
gl4.glPatchParameter(mesh.getPatchVertexCount());
|
gl4.glPatchParameter(mesh.getPatchVertexCount());
|
||||||
}
|
}
|
||||||
|
|
||||||
statistics.onMeshDrawn(mesh, lod, count);
|
statistics.onMeshDrawn(mesh, lod, count);
|
||||||
|
|
||||||
// Here while count is still passed in. Can be removed when/if
|
// Here while count is still passed in. Can be removed when/if
|
||||||
// the method is collapsed again. -pspeed
|
// the method is collapsed again. -pspeed
|
||||||
count = Math.max(mesh.getInstanceCount(), count);
|
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 IntMap<VertexBuffer> buffers = new IntMap<VertexBuffer>();
|
||||||
private VertexBuffer[] lodLevels;
|
private VertexBuffer[] lodLevels;
|
||||||
private float pointSize = 1;
|
private float pointSize = 1;
|
||||||
private float lineWidth = -1;
|
private float lineWidth = 1;
|
||||||
|
|
||||||
private transient int vertexArrayID = -1;
|
private transient int vertexArrayID = -1;
|
||||||
|
|
||||||
@ -578,6 +578,9 @@ public class Mesh extends NativeObject implements Savable, Cloneable, JmeCloneab
|
|||||||
*/
|
*/
|
||||||
@Deprecated
|
@Deprecated
|
||||||
public void setLineWidth(float lineWidth) {
|
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.lineWidth = lineWidth;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -259,7 +259,6 @@ public class Node extends Spatial {
|
|||||||
if ((refreshFlags & RF_MATPARAM_OVERRIDE) != 0) {
|
if ((refreshFlags & RF_MATPARAM_OVERRIDE) != 0) {
|
||||||
updateMatParamOverrides();
|
updateMatParamOverrides();
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((refreshFlags & RF_TRANSFORM) != 0){
|
if ((refreshFlags & RF_TRANSFORM) != 0){
|
||||||
// combine with parent transforms- same for all spatial
|
// combine with parent transforms- same for all spatial
|
||||||
// subclasses.
|
// subclasses.
|
||||||
@ -450,6 +449,7 @@ public class Node extends Spatial {
|
|||||||
child.setTransformRefresh();
|
child.setTransformRefresh();
|
||||||
// lights are also inherited from parent
|
// lights are also inherited from parent
|
||||||
child.setLightListRefresh();
|
child.setLightListRefresh();
|
||||||
|
|
||||||
child.setMatParamOverrideRefresh();
|
child.setMatParamOverrideRefresh();
|
||||||
|
|
||||||
invalidateUpdateList();
|
invalidateUpdateList();
|
||||||
|
@ -126,6 +126,7 @@ public abstract class Spatial implements Savable, Cloneable, Collidable, Cloneab
|
|||||||
RF_CHILD_LIGHTLIST = 0x08, // some child need geometry update
|
RF_CHILD_LIGHTLIST = 0x08, // some child need geometry update
|
||||||
RF_MATPARAM_OVERRIDE = 0x10;
|
RF_MATPARAM_OVERRIDE = 0x10;
|
||||||
|
|
||||||
|
|
||||||
protected CullHint cullHint = CullHint.Inherit;
|
protected CullHint cullHint = CullHint.Inherit;
|
||||||
protected BatchHint batchHint = BatchHint.Inherit;
|
protected BatchHint batchHint = BatchHint.Inherit;
|
||||||
/**
|
/**
|
||||||
@ -137,10 +138,8 @@ public abstract class Spatial implements Savable, Cloneable, Collidable, Cloneab
|
|||||||
*/
|
*/
|
||||||
protected LightList localLights;
|
protected LightList localLights;
|
||||||
protected transient LightList worldLights;
|
protected transient LightList worldLights;
|
||||||
|
|
||||||
protected ArrayList<MatParamOverride> localOverrides;
|
protected ArrayList<MatParamOverride> localOverrides;
|
||||||
protected ArrayList<MatParamOverride> worldOverrides;
|
protected ArrayList<MatParamOverride> worldOverrides;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This spatial's name.
|
* This spatial's name.
|
||||||
*/
|
*/
|
||||||
@ -210,7 +209,6 @@ public abstract class Spatial implements Savable, Cloneable, Collidable, Cloneab
|
|||||||
|
|
||||||
localOverrides = new ArrayList<MatParamOverride>();
|
localOverrides = new ArrayList<MatParamOverride>();
|
||||||
worldOverrides = new ArrayList<MatParamOverride>();
|
worldOverrides = new ArrayList<MatParamOverride>();
|
||||||
|
|
||||||
refreshFlags |= RF_BOUND;
|
refreshFlags |= RF_BOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -285,7 +283,8 @@ public abstract class Spatial implements Savable, Cloneable, Collidable, Cloneab
|
|||||||
// Make sure next updateGeometricState() visits this branch
|
// Make sure next updateGeometricState() visits this branch
|
||||||
// to update lights.
|
// to update lights.
|
||||||
Spatial p = parent;
|
Spatial p = parent;
|
||||||
while (p != null) {
|
while (p != null) {
|
||||||
|
|
||||||
if ((p.refreshFlags & RF_CHILD_LIGHTLIST) != 0) {
|
if ((p.refreshFlags & RF_CHILD_LIGHTLIST) != 0) {
|
||||||
// The parent already has this flag,
|
// The parent already has this flag,
|
||||||
// so must all ancestors.
|
// so must all ancestors.
|
||||||
@ -309,7 +308,6 @@ public abstract class Spatial implements Savable, Cloneable, Collidable, Cloneab
|
|||||||
p = p.parent;
|
p = p.parent;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Indicate that the bounding of this spatial has changed and that
|
* Indicate that the bounding of this spatial has changed and that
|
||||||
* a refresh is required.
|
* a refresh is required.
|
||||||
@ -643,7 +641,6 @@ public abstract class Spatial implements Savable, Cloneable, Collidable, Cloneab
|
|||||||
}
|
}
|
||||||
localOverrides.clear();
|
localOverrides.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Should only be called from updateGeometricState().
|
* Should only be called from updateGeometricState().
|
||||||
* In most cases should not be subclassed.
|
* 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.
|
* efficient manner possible.
|
||||||
*/
|
*/
|
||||||
void checkDoTransformUpdate() {
|
void checkDoTransformUpdate() {
|
||||||
@ -918,6 +915,7 @@ public abstract class Spatial implements Savable, Cloneable, Collidable, Cloneab
|
|||||||
if ((refreshFlags & RF_BOUND) != 0) {
|
if ((refreshFlags & RF_BOUND) != 0) {
|
||||||
updateWorldBound();
|
updateWorldBound();
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((refreshFlags & RF_MATPARAM_OVERRIDE) != 0) {
|
if ((refreshFlags & RF_MATPARAM_OVERRIDE) != 0) {
|
||||||
updateMatParamOverrides();
|
updateMatParamOverrides();
|
||||||
}
|
}
|
||||||
@ -1375,7 +1373,7 @@ public abstract class Spatial implements Savable, Cloneable, Collidable, Cloneab
|
|||||||
// the transforms and stuff get refreshed.
|
// the transforms and stuff get refreshed.
|
||||||
clone.setTransformRefresh();
|
clone.setTransformRefresh();
|
||||||
clone.setLightListRefresh();
|
clone.setLightListRefresh();
|
||||||
clone.setMatParamOverrideRefresh();
|
clone.setMatParamOverrideRefresh();
|
||||||
|
|
||||||
return clone;
|
return clone;
|
||||||
}
|
}
|
||||||
@ -1402,7 +1400,6 @@ public abstract class Spatial implements Savable, Cloneable, Collidable, Cloneab
|
|||||||
for (MatParamOverride override : localOverrides) {
|
for (MatParamOverride override : localOverrides) {
|
||||||
clone.localOverrides.add((MatParamOverride) override.clone());
|
clone.localOverrides.add((MatParamOverride) override.clone());
|
||||||
}
|
}
|
||||||
|
|
||||||
// No need to force cloned to update.
|
// No need to force cloned to update.
|
||||||
// This node already has the refresh flags
|
// This node already has the refresh flags
|
||||||
// set below so it will have to update anyway.
|
// 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.
|
// the transforms and stuff get refreshed.
|
||||||
clone.setTransformRefresh();
|
clone.setTransformRefresh();
|
||||||
clone.setLightListRefresh();
|
clone.setLightListRefresh();
|
||||||
clone.setMatParamOverrideRefresh();
|
clone.setMatParamOverrideRefresh();
|
||||||
|
|
||||||
return clone;
|
return clone;
|
||||||
}
|
}
|
||||||
@ -1633,7 +1630,6 @@ public abstract class Spatial implements Savable, Cloneable, Collidable, Cloneab
|
|||||||
|
|
||||||
localLights = (LightList) ic.readSavable("lights", null);
|
localLights = (LightList) ic.readSavable("lights", null);
|
||||||
localLights.setOwner(this);
|
localLights.setOwner(this);
|
||||||
|
|
||||||
localOverrides = ic.readSavableArrayList("overrides", null);
|
localOverrides = ic.readSavableArrayList("overrides", null);
|
||||||
if (localOverrides == null) {
|
if (localOverrides == null) {
|
||||||
localOverrides = new ArrayList<>();
|
localOverrides = new ArrayList<>();
|
||||||
|
@ -69,11 +69,10 @@ public abstract class ShaderGenerator {
|
|||||||
protected ShaderGenerator(AssetManager assetManager) {
|
protected ShaderGenerator(AssetManager assetManager) {
|
||||||
this.assetManager = assetManager;
|
this.assetManager = assetManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void initialize(TechniqueDef techniqueDef) {
|
public void initialize(TechniqueDef techniqueDef) {
|
||||||
this.techniqueDef = techniqueDef;
|
this.techniqueDef = techniqueDef;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generate vertex and fragment shaders for the given technique
|
* 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
|
// Too much code assumes that type is either Vertex or Fragment
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
indent = 0;
|
indent = 0;
|
||||||
|
|
||||||
StringBuilder sourceDeclaration = new StringBuilder();
|
StringBuilder sourceDeclaration = new StringBuilder();
|
||||||
|
@ -29,6 +29,7 @@
|
|||||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package com.jme3.system.lwjgl;
|
package com.jme3.system.lwjgl;
|
||||||
|
|
||||||
import com.jme3.input.jinput.JInputJoyInput;
|
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());
|
private static final Logger logger = Logger.getLogger(LwjglContext.class.getName());
|
||||||
|
|
||||||
protected static final String THREAD_NAME = "jME3 Main";
|
protected static final String THREAD_NAME = "jME3 Main";
|
||||||
|
|
||||||
protected AtomicBoolean created = new AtomicBoolean(false);
|
protected AtomicBoolean created = new AtomicBoolean(false);
|
||||||
protected AtomicBoolean renderable = new AtomicBoolean(false);
|
protected AtomicBoolean renderable = new AtomicBoolean(false);
|
||||||
protected final Object createdLock = new Object();
|
protected final Object createdLock = new Object();
|
||||||
@ -112,7 +112,6 @@ public abstract class LwjglContext implements JmeContext {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected int determineMaxSamples(int requestedSamples) {
|
protected int determineMaxSamples(int requestedSamples) {
|
||||||
try {
|
try {
|
||||||
// If we already have a valid context, determine samples using current
|
// If we already have a valid context, determine samples using current
|
||||||
@ -130,13 +129,11 @@ public abstract class LwjglContext implements JmeContext {
|
|||||||
} catch (LWJGLException ex) {
|
} catch (LWJGLException ex) {
|
||||||
listener.handleError("Failed to check if display is current", ex);
|
listener.handleError("Failed to check if display is current", ex);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((Pbuffer.getCapabilities() & Pbuffer.PBUFFER_SUPPORTED) == 0) {
|
if ((Pbuffer.getCapabilities() & Pbuffer.PBUFFER_SUPPORTED) == 0) {
|
||||||
// No pbuffer, assume everything is supported.
|
// No pbuffer, assume everything is supported.
|
||||||
return Integer.MAX_VALUE;
|
return Integer.MAX_VALUE;
|
||||||
} else {
|
} else {
|
||||||
Pbuffer pb = null;
|
Pbuffer pb = null;
|
||||||
|
|
||||||
// OpenGL2 method: Create pbuffer and query samples
|
// OpenGL2 method: Create pbuffer and query samples
|
||||||
// from GL_ARB_framebuffer_object or GL_EXT_framebuffer_multisample.
|
// from GL_ARB_framebuffer_object or GL_EXT_framebuffer_multisample.
|
||||||
try {
|
try {
|
||||||
@ -161,7 +158,6 @@ public abstract class LwjglContext implements JmeContext {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void loadNatives() {
|
protected void loadNatives() {
|
||||||
if (JmeSystem.isLowPermissions()) {
|
if (JmeSystem.isLowPermissions()) {
|
||||||
return;
|
return;
|
||||||
@ -179,7 +175,6 @@ public abstract class LwjglContext implements JmeContext {
|
|||||||
System.setProperty("org.lwjgl.librarypath", extractPath);
|
System.setProperty("org.lwjgl.librarypath", extractPath);
|
||||||
NativeLibraryLoader.loadNativeLibrary("lwjgl", true, false);
|
NativeLibraryLoader.loadNativeLibrary("lwjgl", true, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected int getNumSamplesToUse() {
|
protected int getNumSamplesToUse() {
|
||||||
int samples = 0;
|
int samples = 0;
|
||||||
if (settings.getSamples() > 1) {
|
if (settings.getSamples() > 1) {
|
||||||
@ -190,7 +185,6 @@ public abstract class LwjglContext implements JmeContext {
|
|||||||
"Couldn''t satisfy antialiasing samples requirement: x{0}. "
|
"Couldn''t satisfy antialiasing samples requirement: x{0}. "
|
||||||
+ "Video hardware only supports: x{1}",
|
+ "Video hardware only supports: x{1}",
|
||||||
new Object[]{samples, supportedSamples});
|
new Object[]{samples, supportedSamples});
|
||||||
|
|
||||||
samples = supportedSamples;
|
samples = supportedSamples;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -202,48 +196,43 @@ public abstract class LwjglContext implements JmeContext {
|
|||||||
throw new RendererException("OpenGL 2.0 or higher is "
|
throw new RendererException("OpenGL 2.0 or higher is "
|
||||||
+ "required for jMonkeyEngine");
|
+ "required for jMonkeyEngine");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (settings.getRenderer().equals(AppSettings.LWJGL_OPENGL2)
|
if (settings.getRenderer().equals(AppSettings.LWJGL_OPENGL2)
|
||||||
|| settings.getRenderer().equals(AppSettings.LWJGL_OPENGL3)) {
|
|| settings.getRenderer().equals(AppSettings.LWJGL_OPENGL3)) {
|
||||||
GL gl = new LwjglGL();
|
GL gl = new LwjglGL();
|
||||||
GLExt glext = new LwjglGLExt();
|
GLExt glext = new LwjglGLExt();
|
||||||
GLFbo glfbo;
|
GLFbo glfbo;
|
||||||
|
|
||||||
if (GLContext.getCapabilities().OpenGL30) {
|
if (GLContext.getCapabilities().OpenGL30) {
|
||||||
glfbo = new LwjglGLFboGL3();
|
glfbo = new LwjglGLFboGL3();
|
||||||
} else {
|
} else {
|
||||||
glfbo = new LwjglGLFboEXT();
|
glfbo = new LwjglGLFboEXT();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (settings.getBoolean("GraphicsDebug")) {
|
if (settings.getBoolean("GraphicsDebug")) {
|
||||||
gl = new GLDebugDesktop(gl, glext, glfbo);
|
gl = new GLDebugDesktop(gl, glext, glfbo);
|
||||||
glext = (GLExt) gl;
|
glext = (GLExt) gl;
|
||||||
glfbo = (GLFbo) gl;
|
glfbo = (GLFbo) gl;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (settings.getBoolean("GraphicsTiming")) {
|
if (settings.getBoolean("GraphicsTiming")) {
|
||||||
GLTimingState timingState = new GLTimingState();
|
GLTimingState timingState = new GLTimingState();
|
||||||
gl = (GL) GLTiming.createGLTiming(gl, timingState, GL.class, GL2.class, GL3.class, GL4.class);
|
gl = (GL) GLTiming.createGLTiming(gl, timingState, GL.class, GL2.class, GL3.class, GL4.class);
|
||||||
glext = (GLExt) GLTiming.createGLTiming(glext, timingState, GLExt.class);
|
glext = (GLExt) GLTiming.createGLTiming(glext, timingState, GLExt.class);
|
||||||
glfbo = (GLFbo) GLTiming.createGLTiming(glfbo, timingState, GLFbo.class);
|
glfbo = (GLFbo) GLTiming.createGLTiming(glfbo, timingState, GLFbo.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (settings.getBoolean("GraphicsTrace")) {
|
if (settings.getBoolean("GraphicsTrace")) {
|
||||||
gl = (GL) GLTracer.createDesktopGlTracer(gl, GL.class, GL2.class, GL3.class, GL4.class);
|
gl = (GL) GLTracer.createDesktopGlTracer(gl, GL.class, GL2.class, GL3.class, GL4.class);
|
||||||
glext = (GLExt) GLTracer.createDesktopGlTracer(glext, GLExt.class);
|
glext = (GLExt) GLTracer.createDesktopGlTracer(glext, GLExt.class);
|
||||||
glfbo = (GLFbo) GLTracer.createDesktopGlTracer(glfbo, GLFbo.class);
|
glfbo = (GLFbo) GLTracer.createDesktopGlTracer(glfbo, GLFbo.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
renderer = new GLRenderer(gl, glext, glfbo);
|
renderer = new GLRenderer(gl, glext, glfbo);
|
||||||
renderer.initialize();
|
renderer.initialize();
|
||||||
} else {
|
} else {
|
||||||
throw new UnsupportedOperationException("Unsupported renderer: " + settings.getRenderer());
|
throw new UnsupportedOperationException("Unsupported renderer: " + settings.getRenderer());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (GLContext.getCapabilities().GL_ARB_debug_output && settings.getBoolean("GraphicsDebug")) {
|
if (GLContext.getCapabilities().GL_ARB_debug_output && settings.getBoolean("GraphicsDebug")) {
|
||||||
ARBDebugOutput.glDebugMessageCallbackARB(new ARBDebugOutputCallback(new LwjglGLDebugOutputHandler()));
|
ARBDebugOutput.glDebugMessageCallbackARB(new ARBDebugOutputCallback(new LwjglGLDebugOutputHandler()));
|
||||||
}
|
}
|
||||||
|
|
||||||
renderer.setMainFrameBufferSrgb(settings.isGammaCorrection());
|
renderer.setMainFrameBufferSrgb(settings.isGammaCorrection());
|
||||||
renderer.setLinearizeSrgbImages(settings.isGammaCorrection());
|
renderer.setLinearizeSrgbImages(settings.isGammaCorrection());
|
||||||
|
|
||||||
@ -270,15 +259,12 @@ public abstract class LwjglContext implements JmeContext {
|
|||||||
createdLock.notifyAll();
|
createdLock.notifyAll();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void internalCreate() {
|
public void internalCreate() {
|
||||||
timer = new LwjglTimer();
|
timer = new LwjglTimer();
|
||||||
|
|
||||||
synchronized (createdLock) {
|
synchronized (createdLock) {
|
||||||
created.set(true);
|
created.set(true);
|
||||||
createdLock.notifyAll();
|
createdLock.notifyAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (renderable.get()) {
|
if (renderable.get()) {
|
||||||
initContextFirstTime();
|
initContextFirstTime();
|
||||||
} else {
|
} else {
|
||||||
@ -308,7 +294,6 @@ public abstract class LwjglContext implements JmeContext {
|
|||||||
public boolean isCreated() {
|
public boolean isCreated() {
|
||||||
return created.get();
|
return created.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isRenderable() {
|
public boolean isRenderable() {
|
||||||
return renderable.get();
|
return renderable.get();
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user