diff --git a/common.gradle b/common.gradle index 05400cdaac..1f6aae34eb 100644 --- a/common.gradle +++ b/common.gradle @@ -26,7 +26,7 @@ java { tasks.withType(JavaCompile) { // compile-time options: //options.compilerArgs << '-Xlint:deprecation' // to show deprecation warnings - options.compilerArgs << '-Xlint:unchecked' + options.compilerArgs.addAll(['-Xlint:unchecked', '-Xlint:-options', '-Werror']) options.encoding = 'UTF-8' options.release = 8 } @@ -101,26 +101,26 @@ task javadocJar(type: Jar, dependsOn: javadoc, description: 'Creates a jar from } ext.pomConfig = { - name POM_NAME - description POM_DESCRIPTION - url POM_URL - inceptionYear POM_INCEPTION_YEAR + name = POM_NAME + description = POM_DESCRIPTION + url = POM_URL + inceptionYear = POM_INCEPTION_YEAR scm { - url POM_SCM_URL - connection POM_SCM_CONNECTION - developerConnection POM_SCM_DEVELOPER_CONNECTION + url = POM_SCM_URL + connection = POM_SCM_CONNECTION + developerConnection = POM_SCM_DEVELOPER_CONNECTION } licenses { license { - name POM_LICENSE_NAME - url POM_LICENSE_URL - distribution POM_LICENSE_DISTRIBUTION + name = POM_LICENSE_NAME + url = POM_LICENSE_URL + distribution = POM_LICENSE_DISTRIBUTION } } developers { developer { - name 'jMonkeyEngine Team' - id 'jMonkeyEngine' + name = 'jMonkeyEngine Team' + id = 'jMonkeyEngine' } } } diff --git a/jme3-android/src/main/java/com/jme3/system/android/JmeAndroidSystem.java b/jme3-android/src/main/java/com/jme3/system/android/JmeAndroidSystem.java index 0ba2d85e0c..1ba1941645 100644 --- a/jme3-android/src/main/java/com/jme3/system/android/JmeAndroidSystem.java +++ b/jme3-android/src/main/java/com/jme3/system/android/JmeAndroidSystem.java @@ -78,6 +78,7 @@ public void writeImageFile(OutputStream outStream, String format, ByteBuffer ima @Override + @SuppressWarnings("deprecation") public JmeContext newContext(AppSettings settings, Type contextType) { if (settings.getAudioRenderer() == null) { audioRendererType = null; diff --git a/jme3-android/src/main/java/com/jme3/system/android/OGLESContext.java b/jme3-android/src/main/java/com/jme3/system/android/OGLESContext.java index a553afa25a..e27558a575 100644 --- a/jme3-android/src/main/java/com/jme3/system/android/OGLESContext.java +++ b/jme3-android/src/main/java/com/jme3/system/android/OGLESContext.java @@ -711,8 +711,8 @@ public void requestDialog( public void run() { final FrameLayout layoutTextDialogInput = new FrameLayout(view.getContext()); final EditText editTextDialogInput = new EditText(view.getContext()); - editTextDialogInput.setWidth(LayoutParams.FILL_PARENT); - editTextDialogInput.setHeight(LayoutParams.FILL_PARENT); + editTextDialogInput.setWidth(LayoutParams.MATCH_PARENT); + editTextDialogInput.setHeight(LayoutParams.MATCH_PARENT); editTextDialogInput.setPadding(20, 20, 20, 20); editTextDialogInput.setGravity(Gravity.FILL_HORIZONTAL); //editTextDialogInput.setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI); diff --git a/jme3-core/src/main/java/com/jme3/effect/ParticleEmitter.java b/jme3-core/src/main/java/com/jme3/effect/ParticleEmitter.java index 338894bbdf..9e6cf2ae29 100644 --- a/jme3-core/src/main/java/com/jme3/effect/ParticleEmitter.java +++ b/jme3-core/src/main/java/com/jme3/effect/ParticleEmitter.java @@ -187,6 +187,7 @@ public ParticleEmitter clone(boolean cloneMaterial) { * The old clone() method that did not use the new Cloner utility. */ @Override + @Deprecated public ParticleEmitter oldClone(boolean cloneMaterial) { ParticleEmitter clone = (ParticleEmitter) super.clone(cloneMaterial); clone.shape = shape.deepClone(); diff --git a/jme3-core/src/main/java/com/jme3/environment/EnvironmentCamera.java b/jme3-core/src/main/java/com/jme3/environment/EnvironmentCamera.java index cd27573d02..10c42df8da 100644 --- a/jme3-core/src/main/java/com/jme3/environment/EnvironmentCamera.java +++ b/jme3-core/src/main/java/com/jme3/environment/EnvironmentCamera.java @@ -309,7 +309,7 @@ protected void initialize(Application app) { viewports[i] = createOffViewPort("EnvView" + i, cameras[i]); framebuffers[i] = createOffScreenFrameBuffer(size, viewports[i]); textures[i] = new Texture2D(size, size, colorFormat); - framebuffers[i].setColorTexture(textures[i]); + framebuffers[i].addColorTarget(FrameBuffer.FrameBufferTarget.newTarget(textures[i])); } } @@ -416,7 +416,7 @@ protected FrameBuffer createOffScreenFrameBuffer(int mapSize, ViewPort offView) protected FrameBuffer createOffScreenFrameBuffer(int mapSize, ViewPort offView, Image.Format depthFormat) { // create offscreen framebuffer final FrameBuffer offBuffer = new FrameBuffer(mapSize, mapSize, 1); - offBuffer.setDepthBuffer(depthFormat); + offBuffer.setDepthTarget(FrameBuffer.FrameBufferTarget.newTarget(depthFormat)); offView.setOutputFrameBuffer(offBuffer); return offBuffer; } diff --git a/jme3-core/src/main/java/com/jme3/environment/EnvironmentProbeControl.java b/jme3-core/src/main/java/com/jme3/environment/EnvironmentProbeControl.java index 82d45f32de..5250612686 100644 --- a/jme3-core/src/main/java/com/jme3/environment/EnvironmentProbeControl.java +++ b/jme3-core/src/main/java/com/jme3/environment/EnvironmentProbeControl.java @@ -186,6 +186,7 @@ public static void untagGlobal(Spatial s) { } @Override + @Deprecated public Control cloneForSpatial(Spatial spatial) { throw new UnsupportedOperationException(); } diff --git a/jme3-core/src/main/java/com/jme3/renderer/Caps.java b/jme3-core/src/main/java/com/jme3/renderer/Caps.java index 5b111c811b..7fefc972e4 100644 --- a/jme3-core/src/main/java/com/jme3/renderer/Caps.java +++ b/jme3-core/src/main/java/com/jme3/renderer/Caps.java @@ -648,7 +648,7 @@ public static boolean supports(Collection caps, FrameBuffer fb) { return false; } - RenderBuffer depthBuf = fb.getDepthBuffer(); + RenderBuffer depthBuf = fb.getDepthTarget(); if (depthBuf != null) { Format depthFmt = depthBuf.getFormat(); if (!depthFmt.isDepthFormat()) { @@ -675,8 +675,8 @@ public static boolean supports(Collection caps, FrameBuffer fb) { } } } - for (int i = 0; i < fb.getNumColorBuffers(); i++) { - if (!supportsColorBuffer(caps, fb.getColorBuffer(i))) { + for (int i = 0; i < fb.getNumColorTargets(); i++) { + if (!supportsColorBuffer(caps, fb.getColorTarget(i))) { return false; } } diff --git a/jme3-core/src/main/java/com/jme3/renderer/RenderContext.java b/jme3-core/src/main/java/com/jme3/renderer/RenderContext.java index ae51d09bdd..15a202a6a5 100644 --- a/jme3-core/src/main/java/com/jme3/renderer/RenderContext.java +++ b/jme3-core/src/main/java/com/jme3/renderer/RenderContext.java @@ -35,16 +35,21 @@ import com.jme3.math.ColorRGBA; import com.jme3.scene.VertexBuffer; import com.jme3.shader.Shader; +import com.jme3.shader.bufferobject.BufferObject; import com.jme3.texture.FrameBuffer; import com.jme3.texture.Image; import java.lang.ref.WeakReference; -import com.jme3.shader.bufferobject.BufferObject; /** * Represents the current state of the graphics library. This class is used * internally to reduce state changes. NOTE: This class is specific to OpenGL. */ public class RenderContext { + @SuppressWarnings("unchecked") + private static WeakReference[] newWeakReferenceArray(int size) { + return (WeakReference[]) new WeakReference[size]; + } + /** * Number of texture units that JME supports. */ @@ -264,8 +269,8 @@ public class RenderContext { * * @see Renderer#setTexture(int, com.jme3.texture.Texture) */ - public final WeakReference boundTextures[] - = new WeakReference[maxTextureUnits]; + public final WeakReference[] boundTextures + = newWeakReferenceArray(maxTextureUnits); /** @@ -274,7 +279,7 @@ public class RenderContext { * @see Renderer#setUniformBufferObject(int, com.jme3.shader.BufferObject) * @see Renderer#setShaderStorageBufferObject(int, com.jme3.shader.BufferObject) */ - public final WeakReference[] boundBO = new WeakReference[maxBufferObjectUnits]; + public final WeakReference[] boundBO = newWeakReferenceArray(maxBufferObjectUnits); /** * IDList for texture units. @@ -331,7 +336,7 @@ public class RenderContext { * Vertex attribs currently bound and enabled. If a slot is null, then * it is disabled. */ - public final WeakReference[] boundAttribs = new WeakReference[16]; + public final WeakReference[] boundAttribs = newWeakReferenceArray(16); /** * IDList for vertex attributes. diff --git a/jme3-core/src/main/java/com/jme3/renderer/RenderManager.java b/jme3-core/src/main/java/com/jme3/renderer/RenderManager.java index a554bcfa47..c0fc96d4cf 100644 --- a/jme3-core/src/main/java/com/jme3/renderer/RenderManager.java +++ b/jme3-core/src/main/java/com/jme3/renderer/RenderManager.java @@ -31,13 +31,9 @@ */ package com.jme3.renderer; -import com.jme3.renderer.pipeline.ForwardPipeline; -import com.jme3.renderer.pipeline.DefaultPipelineContext; -import com.jme3.renderer.pipeline.RenderPipeline; -import com.jme3.renderer.pipeline.PipelineContext; -import com.jme3.light.DefaultLightFilter; -import com.jme3.light.LightFilter; -import com.jme3.light.LightList; +import com.jme3.light.DefaultLightFilter; +import com.jme3.light.LightFilter; +import com.jme3.light.LightList; import com.jme3.material.MatParamOverride; import com.jme3.material.Material; import com.jme3.material.MaterialDef; @@ -46,11 +42,15 @@ import com.jme3.material.TechniqueDef; import com.jme3.math.FastMath; import com.jme3.math.Matrix4f; -import com.jme3.post.SceneProcessor; -import com.jme3.profile.AppProfiler; -import com.jme3.profile.AppStep; -import com.jme3.profile.VpStep; -import com.jme3.renderer.queue.GeometryList; +import com.jme3.post.SceneProcessor; +import com.jme3.profile.AppProfiler; +import com.jme3.profile.AppStep; +import com.jme3.profile.VpStep; +import com.jme3.renderer.pipeline.DefaultPipelineContext; +import com.jme3.renderer.pipeline.ForwardPipeline; +import com.jme3.renderer.pipeline.PipelineContext; +import com.jme3.renderer.pipeline.RenderPipeline; +import com.jme3.renderer.queue.GeometryList; import com.jme3.renderer.queue.RenderQueue; import com.jme3.renderer.queue.RenderQueue.Bucket; import com.jme3.renderer.queue.RenderQueue.ShadowMode; @@ -111,7 +111,7 @@ public class RenderManager { private final HashMap, PipelineContext> contexts = new HashMap<>(); private final LinkedList usedContexts = new LinkedList<>(); private final LinkedList> usedPipelines = new LinkedList<>(); - private RenderPipeline defaultPipeline = new ForwardPipeline(); + private RenderPipeline defaultPipeline = new ForwardPipeline(); private Camera prevCam = null; private Material forcedMaterial = null; private String forcedTechnique = null; @@ -1382,19 +1382,22 @@ public void applyViewPort(ViewPort vp) { * @param vp View port to render * @param tpf Time per frame value */ - public void renderViewPort(ViewPort vp, float tpf) { - if (!vp.isEnabled()) { - return; - } - RenderPipeline pipeline = vp.getPipeline(); - if (pipeline == null) { - pipeline = defaultPipeline; - } - - PipelineContext context = pipeline.fetchPipelineContext(this); - if (context == null) { - throw new NullPointerException("Failed to fetch pipeline context."); - } + public void renderViewPort(ViewPort vp, float tpf) { + if (!vp.isEnabled()) { + return; + } + RenderPipeline pipeline = vp.getPipeline(); + if (pipeline == null) { + pipeline = defaultPipeline; + } + renderViewPort(vp, tpf, pipeline); + } + + private void renderViewPort(ViewPort vp, float tpf, RenderPipeline pipeline) { + T context = pipeline.fetchPipelineContext(this); + if (context == null) { + throw new NullPointerException("Failed to fetch pipeline context."); + } if (!context.startViewPortRender(this, vp)) { usedContexts.add(context); } diff --git a/jme3-core/src/main/java/com/jme3/renderer/ViewPort.java b/jme3-core/src/main/java/com/jme3/renderer/ViewPort.java index f256405276..b1fcfed1b5 100644 --- a/jme3-core/src/main/java/com/jme3/renderer/ViewPort.java +++ b/jme3-core/src/main/java/com/jme3/renderer/ViewPort.java @@ -31,9 +31,10 @@ */ package com.jme3.renderer; -import com.jme3.renderer.pipeline.RenderPipeline; import com.jme3.math.ColorRGBA; import com.jme3.post.SceneProcessor; +import com.jme3.renderer.pipeline.PipelineContext; +import com.jme3.renderer.pipeline.RenderPipeline; import com.jme3.renderer.queue.RenderQueue; import com.jme3.scene.Geometry; import com.jme3.scene.Spatial; @@ -88,7 +89,7 @@ public class ViewPort { /** * Dedicated pipeline. */ - protected RenderPipeline pipeline; + protected RenderPipeline pipeline; /** * FrameBuffer for output. */ @@ -440,7 +441,7 @@ public boolean isEnabled() { * * @param pipeline pipeline, or null to use render manager's pipeline */ - public void setPipeline(RenderPipeline pipeline) { + public void setPipeline(RenderPipeline pipeline) { this.pipeline = pipeline; } @@ -449,7 +450,7 @@ public void setPipeline(RenderPipeline pipeline) { * * @return */ - public RenderPipeline getPipeline() { + public RenderPipeline getPipeline() { return pipeline; } diff --git a/jme3-core/src/main/java/com/jme3/renderer/opengl/GLRenderer.java b/jme3-core/src/main/java/com/jme3/renderer/opengl/GLRenderer.java index b7d11f9ba6..4e4d684fa3 100644 --- a/jme3-core/src/main/java/com/jme3/renderer/opengl/GLRenderer.java +++ b/jme3-core/src/main/java/com/jme3/renderer/opengl/GLRenderer.java @@ -1956,6 +1956,7 @@ public void copyFrameBuffer(FrameBuffer src, FrameBuffer dst) { } @Override + @Deprecated public void copyFrameBuffer(FrameBuffer src, FrameBuffer dst, boolean copyDepth) { copyFrameBuffer(src, dst, true, copyDepth); } @@ -2226,7 +2227,7 @@ private void toggleFramebufferSrgb(FrameBuffer fb) { } public void updateFrameBuffer(FrameBuffer fb) { - if (fb.getNumColorBuffers() == 0 && fb.getDepthBuffer() == null) { + if (fb.getNumColorTargets() == 0 && fb.getDepthTarget() == null) { throw new IllegalArgumentException("The framebuffer: " + fb + "\nDoesn't have any color/depth buffers"); } @@ -2242,13 +2243,13 @@ public void updateFrameBuffer(FrameBuffer fb) { bindFrameBuffer(fb); - FrameBuffer.RenderBuffer depthBuf = fb.getDepthBuffer(); + FrameBuffer.RenderBuffer depthBuf = fb.getDepthTarget(); if (depthBuf != null) { updateFrameBufferAttachment(fb, depthBuf); } - for (int i = 0; i < fb.getNumColorBuffers(); i++) { - FrameBuffer.RenderBuffer colorBuf = fb.getColorBuffer(i); + for (int i = 0; i < fb.getNumColorTargets(); i++) { + FrameBuffer.RenderBuffer colorBuf = fb.getColorTarget(i); updateFrameBufferAttachment(fb, colorBuf); } @@ -2309,13 +2310,13 @@ public void setReadDrawBuffers(FrameBuffer fb) { if (fb != null) { - if (fb.getNumColorBuffers() == 0) { + if (fb.getNumColorTargets() == 0) { // make sure to select NONE as draw buf // no color buffer attached. gl2.glDrawBuffer(GL.GL_NONE); gl2.glReadBuffer(GL.GL_NONE); } else { - if (fb.getNumColorBuffers() > limits.get(Limits.FrameBufferAttachments)) { + if (fb.getNumColorTargets() > limits.get(Limits.FrameBufferAttachments)) { throw new RendererException("Framebuffer has more color " + "attachments than are supported" + " by the video hardware!"); @@ -2325,21 +2326,21 @@ public void setReadDrawBuffers(FrameBuffer fb) { throw new RendererException("Multiple render targets " + " are not supported by the video hardware"); } - if (fb.getNumColorBuffers() > limits.get(Limits.FrameBufferMrtAttachments)) { + if (fb.getNumColorTargets() > limits.get(Limits.FrameBufferMrtAttachments)) { throw new RendererException("Framebuffer has more" + " multi targets than are supported" + " by the video hardware!"); } intBuf16.clear(); - for (int i = 0; i < fb.getNumColorBuffers(); i++) { + for (int i = 0; i < fb.getNumColorTargets(); i++) { intBuf16.put(GLFbo.GL_COLOR_ATTACHMENT0_EXT + i); } intBuf16.flip(); glext.glDrawBuffers(intBuf16); } else { - RenderBuffer rb = fb.getColorBuffer(fb.getTargetIndex()); + RenderBuffer rb = fb.getColorTarget(fb.getTargetIndex()); // select this draw buffer gl2.glDrawBuffer(GLFbo.GL_COLOR_ATTACHMENT0_EXT + rb.getSlot()); // select this read buffer @@ -2373,8 +2374,8 @@ public void setFrameBuffer(FrameBuffer fb) { if (boundFB != null && (boundFB.getMipMapsGenerationHint() != null ? boundFB.getMipMapsGenerationHint() : generateMipmapsForFramebuffers)) { - for (int i = 0; i < boundFB.getNumColorBuffers(); i++) { - RenderBuffer rb = boundFB.getColorBuffer(i); + for (int i = 0; i < boundFB.getNumColorTargets(); i++) { + RenderBuffer rb = boundFB.getColorTarget(i); Texture tex = rb.getTexture(); if (tex != null && tex.getMinFilter().usesMipMapLevels() && isMipmapGenerationSupported(tex.getImage().getFormat(), @@ -2429,7 +2430,7 @@ public void readFrameBuffer(FrameBuffer fb, ByteBuffer byteBuf) { private void readFrameBufferWithGLFormat(FrameBuffer fb, ByteBuffer byteBuf, int glFormat, int dataType) { if (fb != null) { - RenderBuffer rb = fb.getColorBuffer(); + RenderBuffer rb = fb.getColorTarget(); if (rb == null) { throw new IllegalArgumentException("Specified framebuffer" + " does not have a colorbuffer"); @@ -2464,11 +2465,11 @@ public void deleteFrameBuffer(FrameBuffer fb) { context.boundFBO = 0; } - if (fb.getDepthBuffer() != null) { - deleteRenderBuffer(fb, fb.getDepthBuffer()); + if (fb.getDepthTarget() != null) { + deleteRenderBuffer(fb, fb.getDepthTarget()); } - if (fb.getColorBuffer() != null) { - deleteRenderBuffer(fb, fb.getColorBuffer()); + if (fb.getColorTarget() != null) { + deleteRenderBuffer(fb, fb.getColorTarget()); } intBuf1.put(0, fb.getId()); diff --git a/jme3-core/src/main/java/com/jme3/renderer/pipeline/ForwardPipeline.java b/jme3-core/src/main/java/com/jme3/renderer/pipeline/ForwardPipeline.java index 2f02ab3e82..96850bd182 100644 --- a/jme3-core/src/main/java/com/jme3/renderer/pipeline/ForwardPipeline.java +++ b/jme3-core/src/main/java/com/jme3/renderer/pipeline/ForwardPipeline.java @@ -46,7 +46,7 @@ * * @author codex */ -public class ForwardPipeline implements RenderPipeline { +public class ForwardPipeline implements RenderPipeline { private boolean rendered = false; diff --git a/jme3-core/src/main/java/com/jme3/renderer/pipeline/NullPipeline.java b/jme3-core/src/main/java/com/jme3/renderer/pipeline/NullPipeline.java index b104e5bd5d..bee0e4a56a 100644 --- a/jme3-core/src/main/java/com/jme3/renderer/pipeline/NullPipeline.java +++ b/jme3-core/src/main/java/com/jme3/renderer/pipeline/NullPipeline.java @@ -12,7 +12,7 @@ * * @author codex */ -public class NullPipeline implements RenderPipeline { +public class NullPipeline implements RenderPipeline { private boolean rendered = false; diff --git a/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonDebugger.java b/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonDebugger.java index f8f450ab47..1b5e912a78 100644 --- a/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonDebugger.java +++ b/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonDebugger.java @@ -159,4 +159,4 @@ private T getMesh(String suffix) { return null; } -} \ No newline at end of file +} diff --git a/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonInterBoneWire.java b/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonInterBoneWire.java index 6db686bed8..5c4ea5b11a 100644 --- a/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonInterBoneWire.java +++ b/jme3-core/src/main/java/com/jme3/scene/debug/SkeletonInterBoneWire.java @@ -55,7 +55,7 @@ * * @author Marcin Roguski (Kaelthas) */ -public class SkeletonInterBoneWire extends Mesh { +public class SkeletonInterBoneWire extends Mesh { private static final int POINT_AMOUNT = 10; /** The amount of connections between bones. */ private int connectionsAmount; diff --git a/jme3-core/src/main/java/com/jme3/system/NullRenderer.java b/jme3-core/src/main/java/com/jme3/system/NullRenderer.java index f220c50b98..162f347206 100644 --- a/jme3-core/src/main/java/com/jme3/system/NullRenderer.java +++ b/jme3-core/src/main/java/com/jme3/system/NullRenderer.java @@ -145,6 +145,7 @@ public void copyFrameBuffer(FrameBuffer src, FrameBuffer dst) { } @Override + @Deprecated public void copyFrameBuffer(FrameBuffer src, FrameBuffer dst, boolean copyDepth) { } diff --git a/jme3-core/src/main/java/com/jme3/texture/Texture2D.java b/jme3-core/src/main/java/com/jme3/texture/Texture2D.java index ab633aed49..7bdc55bec8 100644 --- a/jme3-core/src/main/java/com/jme3/texture/Texture2D.java +++ b/jme3-core/src/main/java/com/jme3/texture/Texture2D.java @@ -97,6 +97,7 @@ public Texture2D(int width, int height, int numSamples, Image.Format format){ } @Override + @Deprecated public Texture createSimpleClone() { Texture2D clone = new Texture2D(); createSimpleClone(clone); @@ -104,6 +105,7 @@ public Texture createSimpleClone() { } @Override + @Deprecated public Texture createSimpleClone(Texture rVal) { rVal.setWrap(WrapAxis.S, wrapS); rVal.setWrap(WrapAxis.T, wrapT); diff --git a/jme3-core/src/main/java/com/jme3/texture/Texture3D.java b/jme3-core/src/main/java/com/jme3/texture/Texture3D.java index bb12a858dd..6052ea35ff 100644 --- a/jme3-core/src/main/java/com/jme3/texture/Texture3D.java +++ b/jme3-core/src/main/java/com/jme3/texture/Texture3D.java @@ -100,6 +100,7 @@ public Texture3D(int width, int height, int depth, int numSamples, Image.Format } @Override + @Deprecated public Texture createSimpleClone() { Texture3D clone = new Texture3D(); createSimpleClone(clone); @@ -107,6 +108,7 @@ public Texture createSimpleClone() { } @Override + @Deprecated public Texture createSimpleClone(Texture rVal) { rVal.setWrap(WrapAxis.S, wrapS); rVal.setWrap(WrapAxis.T, wrapT); @@ -226,4 +228,4 @@ public void read(JmeImporter importer) throws IOException { wrapT = capsule.readEnum("wrapT", WrapMode.class, WrapMode.EdgeClamp); wrapR = capsule.readEnum("wrapR", WrapMode.class, WrapMode.EdgeClamp); } -} \ No newline at end of file +} diff --git a/jme3-core/src/main/java/com/jme3/texture/TextureArray.java b/jme3-core/src/main/java/com/jme3/texture/TextureArray.java index e839399c33..644e094f70 100644 --- a/jme3-core/src/main/java/com/jme3/texture/TextureArray.java +++ b/jme3-core/src/main/java/com/jme3/texture/TextureArray.java @@ -99,6 +99,7 @@ public TextureArray(List images) { } @Override + @Deprecated public Texture createSimpleClone() { TextureArray clone = new TextureArray(); createSimpleClone(clone); @@ -106,6 +107,7 @@ public Texture createSimpleClone() { } @Override + @Deprecated public Texture createSimpleClone(Texture rVal) { rVal.setWrap(WrapAxis.S, wrapS); rVal.setWrap(WrapAxis.T, wrapT); diff --git a/jme3-core/src/main/java/com/jme3/texture/TextureCubeMap.java b/jme3-core/src/main/java/com/jme3/texture/TextureCubeMap.java index 40e6c037c3..e867e49d5e 100644 --- a/jme3-core/src/main/java/com/jme3/texture/TextureCubeMap.java +++ b/jme3-core/src/main/java/com/jme3/texture/TextureCubeMap.java @@ -94,11 +94,13 @@ private static Image createEmptyLayeredImage(int width, int height, } @Override + @Deprecated public Texture createSimpleClone() { return createSimpleClone(new TextureCubeMap()); } @Override + @Deprecated public Texture createSimpleClone(Texture rVal) { rVal.setWrap(WrapAxis.S, wrapS); rVal.setWrap(WrapAxis.T, wrapT); diff --git a/jme3-core/src/main/java/com/jme3/util/IntMap.java b/jme3-core/src/main/java/com/jme3/util/IntMap.java index 198b380dd8..49e38fd41e 100644 --- a/jme3-core/src/main/java/com/jme3/util/IntMap.java +++ b/jme3-core/src/main/java/com/jme3/util/IntMap.java @@ -47,7 +47,7 @@ */ public final class IntMap implements Iterable>, Cloneable, JmeCloneable { - private Entry[] table; + private Entry[] table; private final float loadFactor; private int size, mask, capacity, threshold; @@ -75,7 +75,7 @@ public IntMap(int initialCapacity, float loadFactor) { } this.loadFactor = loadFactor; this.threshold = (int) (capacity * loadFactor); - this.table = new Entry[capacity]; + this.table = newTable(capacity); this.mask = capacity - 1; } @@ -84,7 +84,7 @@ public IntMap(int initialCapacity, float loadFactor) { public IntMap clone(){ try { IntMap clone = (IntMap) super.clone(); - Entry[] newTable = new Entry[table.length]; + Entry[] newTable = newTable(table.length); for (int i = table.length - 1; i >= 0; i--){ if (table[i] != null) newTable[i] = table[i].clone(); @@ -117,9 +117,9 @@ public void cloneFields(Cloner cloner, Object original) { } public boolean containsValue(Object value) { - Entry[] table = this.table; + Entry[] table = this.table; for (int i = table.length; i-- > 0;){ - for (Entry e = table[i]; e != null; e = e.next){ + for (Entry e = table[i]; e != null; e = e.next){ if (e.value.equals(value)){ return true; } @@ -130,7 +130,7 @@ public boolean containsValue(Object value) { public boolean containsKey(int key) { int index = ((int) key) & mask; - for (Entry e = table[index]; e != null; e = e.next){ + for (Entry e = table[index]; e != null; e = e.next){ if (e.key == key){ return true; } @@ -138,42 +138,40 @@ public boolean containsKey(int key) { return false; } - @SuppressWarnings("unchecked") public T get(int key) { int index = key & mask; - for (Entry e = table[index]; e != null; e = e.next){ + for (Entry e = table[index]; e != null; e = e.next){ if (e.key == key){ - return (T) e.value; + return e.value; } } return null; } - @SuppressWarnings("unchecked") public T put(int key, T value) { int index = key & mask; // Check if key already exists. - for (Entry e = table[index]; e != null; e = e.next){ + for (Entry e = table[index]; e != null; e = e.next){ if (e.key != key){ continue; } - Object oldValue = e.value; + T oldValue = e.value; e.value = value; - return (T) oldValue; + return oldValue; } - table[index] = new Entry(key, value, table[index]); + table[index] = new Entry<>(key, value, table[index]); if (size++ >= threshold){ // Rehash. int newCapacity = 2 * capacity; - Entry[] newTable = new Entry[newCapacity]; - Entry[] src = table; + Entry[] newTable = newTable(newCapacity); + Entry[] src = table; int bucketMask = newCapacity - 1; for (int j = 0; j < src.length; j++){ - Entry e = src[j]; + Entry e = src[j]; if (e != null){ src[j] = null; do{ - Entry next = e.next; + Entry next = e.next; index = e.key & bucketMask; e.next = newTable[index]; newTable[index] = e; @@ -189,13 +187,12 @@ public T put(int key, T value) { return null; } - @SuppressWarnings("unchecked") public T remove(int key) { int index = key & mask; - Entry prev = table[index]; - Entry e = prev; + Entry prev = table[index]; + Entry e = prev; while (e != null){ - Entry next = e.next; + Entry next = e.next; if (e.key == key){ size--; if (prev == e){ @@ -203,7 +200,7 @@ public T remove(int key) { }else{ prev.next = next; } - return (T) e.value; + return e.value; } prev = e; e = next; @@ -216,7 +213,7 @@ public int size() { } public void clear() { - Entry[] table = this.table; + Entry[] table = this.table; for (int index = table.length; --index >= 0;) { table[index] = null; } @@ -235,7 +232,7 @@ final class IntMapIterator implements Iterator> { /** * Current entry. */ - private Entry cur; + private Entry cur; /** * Entry in the table @@ -262,13 +259,12 @@ public boolean hasNext() { } @Override - @SuppressWarnings("unchecked") - public Entry next() { + public Entry next() { if (el >= size) throw new NoSuchElementException("No more elements!"); if (cur != null) { - Entry e = cur; + Entry e = cur; cur = cur.next; el++; return e; @@ -286,7 +282,7 @@ public Entry next() { cur = table[++idx]; } while (cur == null); - Entry e = cur; + Entry e = cur; cur = cur.next; el ++; @@ -298,13 +294,18 @@ public void remove() { } } + @SuppressWarnings("unchecked") + private static Entry[] newTable(int size) { + return (Entry[]) new Entry[size]; + } + public static final class Entry implements Cloneable, JmeCloneable { final int key; T value; - Entry next; + Entry next; - Entry(int k, T v, Entry n) { + Entry(int k, T v, Entry n) { key = k; value = v; next = n; diff --git a/jme3-core/src/main/java/com/jme3/util/NativeObject.java b/jme3-core/src/main/java/com/jme3/util/NativeObject.java index 44ec3ad947..c1c49e2c48 100644 --- a/jme3-core/src/main/java/com/jme3/util/NativeObject.java +++ b/jme3-core/src/main/java/com/jme3/util/NativeObject.java @@ -167,6 +167,7 @@ protected NativeObject clone() { obj.objectManager = null; obj.id = INVALID_ID; obj.updateNeeded = true; + obj.weakRef = null; return obj; } catch (CloneNotSupportedException ex) { throw new AssertionError(); @@ -244,6 +245,7 @@ public void dispose() { * @param the type * @return a weak reference (possibly a pre-existing one) */ + @SuppressWarnings("unchecked") public WeakReference getWeakRef() { if (weakRef == null) { weakRef = new WeakReference<>(this); diff --git a/jme3-core/src/main/java/com/jme3/util/struct/StructStd140BufferObject.java b/jme3-core/src/main/java/com/jme3/util/struct/StructStd140BufferObject.java index 4529239865..0aafd66848 100644 --- a/jme3-core/src/main/java/com/jme3/util/struct/StructStd140BufferObject.java +++ b/jme3-core/src/main/java/com/jme3/util/struct/StructStd140BufferObject.java @@ -120,7 +120,7 @@ public void read(JmeImporter im) throws IOException { try { String rootClass = ic.readString("rootClass", null); if (rootClass == null) throw new Exception("rootClass is undefined"); - Class rootStructClass = (Class) Class.forName(rootClass); + Class rootStructClass = Class.forName(rootClass).asSubclass(Struct.class); Struct rootStruct = rootStructClass.newInstance(); loadLayout(rootStruct); } catch (Exception e) { diff --git a/jme3-core/src/test/java/com/jme3/material/plugins/J3MLoaderTest.java b/jme3-core/src/test/java/com/jme3/material/plugins/J3MLoaderTest.java index c1c330d226..076feb199c 100644 --- a/jme3-core/src/test/java/com/jme3/material/plugins/J3MLoaderTest.java +++ b/jme3-core/src/test/java/com/jme3/material/plugins/J3MLoaderTest.java @@ -21,8 +21,8 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.when; import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; /** * @author Daniel Johansson diff --git a/jme3-desktop/src/main/java/com/jme3/system/AWTComponentRenderer.java b/jme3-desktop/src/main/java/com/jme3/system/AWTComponentRenderer.java index bfb0e85e31..93c03e13d5 100644 --- a/jme3-desktop/src/main/java/com/jme3/system/AWTComponentRenderer.java +++ b/jme3-desktop/src/main/java/com/jme3/system/AWTComponentRenderer.java @@ -186,8 +186,8 @@ public AWTComponentRenderer(Component destination, TransferMode transferMode, Fr this.frameBuffer = frameBuffer; } else { this.frameBuffer = new FrameBuffer(width, height, 1); - this.frameBuffer.setDepthBuffer(Image.Format.Depth); - this.frameBuffer.setColorBuffer(Image.Format.RGBA8); + this.frameBuffer.setDepthTarget(FrameBuffer.FrameBufferTarget.newTarget(Image.Format.Depth)); + this.frameBuffer.addColorTarget(FrameBuffer.FrameBufferTarget.newTarget(Image.Format.RGBA8)); this.frameBuffer.setSrgb(true); } @@ -388,4 +388,4 @@ public void dispose() { frameState.compareAndSet(DISPOSING_STATE, DISPOSED_STATE); imageState.compareAndSet(DISPOSING_STATE, DISPOSED_STATE); } -} \ No newline at end of file +} diff --git a/jme3-desktop/src/main/java/com/jme3/system/AWTFrameProcessor.java b/jme3-desktop/src/main/java/com/jme3/system/AWTFrameProcessor.java index 111e856973..541dad9e3d 100644 --- a/jme3-desktop/src/main/java/com/jme3/system/AWTFrameProcessor.java +++ b/jme3-desktop/src/main/java/com/jme3/system/AWTFrameProcessor.java @@ -620,8 +620,8 @@ protected void reshapeCurrentViewPort(int width, int height) { if (found) { FrameBuffer frameBuffer = new FrameBuffer(width, height, 1); - frameBuffer.setDepthBuffer(Image.Format.Depth); - frameBuffer.setColorBuffer(Image.Format.RGBA8); + frameBuffer.setDepthTarget(FrameBuffer.FrameBufferTarget.newTarget(Image.Format.Depth)); + frameBuffer.addColorTarget(FrameBuffer.FrameBufferTarget.newTarget(Image.Format.RGBA8)); frameBuffer.setSrgb(true); viewPort.setOutputFrameBuffer(frameBuffer); diff --git a/jme3-networking/src/main/java/com/jme3/network/message/ClientRegistrationMessage.java b/jme3-networking/src/main/java/com/jme3/network/message/ClientRegistrationMessage.java index 50272e9deb..dcad1c5b8d 100644 --- a/jme3-networking/src/main/java/com/jme3/network/message/ClientRegistrationMessage.java +++ b/jme3-networking/src/main/java/com/jme3/network/message/ClientRegistrationMessage.java @@ -93,7 +93,7 @@ public String toString() { public static class ClientRegistrationSerializer extends Serializer { @Override - public ClientRegistrationMessage readObject( ByteBuffer data, Class c ) throws IOException { + public T readObject(ByteBuffer data, Class c) throws IOException { // Read the null/non-null marker if (data.get() == 0x0) @@ -105,7 +105,7 @@ public ClientRegistrationMessage readObject( ByteBuffer data, Class c ) throws I msg.id = data.getLong(); msg.version = data.getInt(); - return msg; + return c.cast(msg); } @Override diff --git a/jme3-networking/src/main/java/com/jme3/network/message/DisconnectMessage.java b/jme3-networking/src/main/java/com/jme3/network/message/DisconnectMessage.java index 29f732768c..07695a21ea 100644 --- a/jme3-networking/src/main/java/com/jme3/network/message/DisconnectMessage.java +++ b/jme3-networking/src/main/java/com/jme3/network/message/DisconnectMessage.java @@ -85,7 +85,7 @@ public String toString() { public static class DisconnectSerializer extends Serializer { @Override - public DisconnectMessage readObject( ByteBuffer data, Class c ) throws IOException { + public T readObject(ByteBuffer data, Class c) throws IOException { // Read the null/non-null marker if (data.get() == 0x0) @@ -96,7 +96,7 @@ public DisconnectMessage readObject( ByteBuffer data, Class c ) throws IOExcepti msg.reason = StringSerializer.readString(data); msg.type = StringSerializer.readString(data); - return msg; + return c.cast(msg); } @Override diff --git a/jme3-plugins-json-gson/src/main/java/com/jme3/plugins/gson/GsonObject.java b/jme3-plugins-json-gson/src/main/java/com/jme3/plugins/gson/GsonObject.java index 8aadbfb182..cf0ae7508b 100644 --- a/jme3-plugins-json-gson/src/main/java/com/jme3/plugins/gson/GsonObject.java +++ b/jme3-plugins-json-gson/src/main/java/com/jme3/plugins/gson/GsonObject.java @@ -78,7 +78,8 @@ public JsonElement get(String string) { @Override public Entry[] entrySet() { Set> entrySet = obj().entrySet(); - Entry[] entries = new Entry[entrySet.size()]; + @SuppressWarnings("unchecked") + Entry[] entries = (Entry[]) new Entry[entrySet.size()]; int i = 0; for (Entry entry : entrySet) { @@ -110,4 +111,4 @@ public JsonPrimitive getAsJsonPrimitive(String string) { com.google.gson.JsonPrimitive el= obj().getAsJsonPrimitive(string); return isNull(el) ? null : new GsonPrimitive(el); } -} \ No newline at end of file +} diff --git a/jme3-plugins/src/gltf/java/com/jme3/scene/plugins/gltf/TextureTransformExtensionLoader.java b/jme3-plugins/src/gltf/java/com/jme3/scene/plugins/gltf/TextureTransformExtensionLoader.java index aff6fbdcf1..43f6078e36 100644 --- a/jme3-plugins/src/gltf/java/com/jme3/scene/plugins/gltf/TextureTransformExtensionLoader.java +++ b/jme3-plugins/src/gltf/java/com/jme3/scene/plugins/gltf/TextureTransformExtensionLoader.java @@ -91,12 +91,17 @@ private void uvTransform(Mesh mesh, Matrix3f transform, VertexBuffer.Type verTyp fb.put(v.getX()).put(v.getY()); } fb.clear(); - tc.updateData(fb); - } - } - - // The algorithm relies on the fact that the GltfLoader.class object - // loads all textures of a given mesh before doing so for the next mesh. + tc.updateData(fb); + } + } + + @SuppressWarnings("unchecked") + private Map fetchTransformMap(GltfLoader loader) { + return loader.fetchFromCache("textureTransformData", 1, HashMap.class); + } + + // The algorithm relies on the fact that the GltfLoader.class object + // loads all textures of a given mesh before doing so for the next mesh. @Override public Object handleExtension(GltfLoader loader, String parentName, JsonElement parent, JsonElement extension, Object input) throws IOException { if (!(input instanceof Texture2D)) { @@ -129,11 +134,11 @@ public Object handleExtension(GltfLoader loader, String parentName, JsonElement } if (jsonObject.has("texCoord")) { texCoord = jsonObject.get("texCoord").getAsInt(); // it overrides the parent's texCoord value - } - Matrix3f transform = translation.mult(rotation).mult(scale); - Mesh meshLast = loader.fetchFromCache("textureTransformData", 0, Mesh.class); - Map transformMap = loader.fetchFromCache("textureTransformData", 1, HashMap.class); - if (mesh != meshLast || (transformMap != null && transformMap.get(texCoord) == null)) { + } + Matrix3f transform = translation.mult(rotation).mult(scale); + Mesh meshLast = loader.fetchFromCache("textureTransformData", 0, Mesh.class); + Map transformMap = fetchTransformMap(loader); + if (mesh != meshLast || (transformMap != null && transformMap.get(texCoord) == null)) { // at this point, we're processing a new mesh or the same mesh as before but for a different UV set if (mesh != meshLast) { // it's a new mesh loader.addToCache("textureTransformData", 0, mesh, 2); diff --git a/jme3-plugins/src/test/java/com/jme3/export/JmeExporterTest.java b/jme3-plugins/src/test/java/com/jme3/export/JmeExporterTest.java index 9b86ca2902..96113bb6c9 100644 --- a/jme3-plugins/src/test/java/com/jme3/export/JmeExporterTest.java +++ b/jme3-plugins/src/test/java/com/jme3/export/JmeExporterTest.java @@ -42,6 +42,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.stream.Stream; @@ -227,26 +228,27 @@ public InputStream openStream() { } // compare - Map userData[] = new Map[nodes.length]; + List> userData = new ArrayList<>(nodes.length); for (int i = 0; i < nodes.length; i++) { Node n = nodes[i]; - userData[i] = new HashMap(); + Map data = new HashMap<>(); for (String k : n.getUserDataKeys()) { - userData[i].put(k, n.getUserData(k)); + data.put(k, n.getUserData(k)); } + userData.add(data); } compareMaps(userData); } - private static final void compareMaps(Map[] maps) { - String[] keys = maps[0].keySet().toArray(new String[0]); + private static final void compareMaps(List> maps) { + String[] keys = maps.get(0).keySet().toArray(new String[0]); // check if all maps have the same keys and values for those keys - for (int i = 1; i < maps.length; i++) { - Map map = maps[i]; + for (int i = 1; i < maps.size(); i++) { + Map map = maps.get(i); assertEquals(keys.length, map.size(), "Map " + i + " keys do not match"); for (String key : keys) { assertTrue(map.containsKey(key), "Missing key " + key + " in map " + i); - Object v1 = maps[0].get(key); + Object v1 = maps.get(0).get(key); Object v2 = map.get(key); if (v1.getClass().isArray()) { boolean c = Arrays.equals((Object[]) v1, (Object[]) v2);