From a8d77a7cd18d5a390efc0315e971b231306d020f Mon Sep 17 00:00:00 2001 From: shamanDevel Date: Sun, 19 Jun 2016 18:30:31 +0200 Subject: [PATCH] OpenCLObject.register() now returns this. This allows to chain the register method like kernel=program.createKernel("ScaleKernel").register(); or testBuffer=clContext.createBuffer(1024).register(); --- .../java/com/jme3/opencl/AbstractOpenCLObject.java | 3 ++- jme3-core/src/main/java/com/jme3/opencl/Buffer.java | 6 ++++++ .../src/main/java/com/jme3/opencl/CommandQueue.java | 6 ++++++ jme3-core/src/main/java/com/jme3/opencl/Context.java | 6 ++++++ jme3-core/src/main/java/com/jme3/opencl/Event.java | 6 ++++++ jme3-core/src/main/java/com/jme3/opencl/Image.java | 8 +++++++- jme3-core/src/main/java/com/jme3/opencl/Kernel.java | 6 ++++++ .../src/main/java/com/jme3/opencl/OpenCLObject.java | 7 ++++++- jme3-core/src/main/java/com/jme3/opencl/Program.java | 6 ++++++ .../java/jme3test/opencl/TestContextSwitching.java | 3 +-- .../java/jme3test/opencl/TestVertexBufferSharing.java | 11 ++++------- .../main/java/jme3test/opencl/TestWriteToTexture.java | 9 +++------ 12 files changed, 59 insertions(+), 18 deletions(-) diff --git a/jme3-core/src/main/java/com/jme3/opencl/AbstractOpenCLObject.java b/jme3-core/src/main/java/com/jme3/opencl/AbstractOpenCLObject.java index fce0f481d..2bb80cff7 100644 --- a/jme3-core/src/main/java/com/jme3/opencl/AbstractOpenCLObject.java +++ b/jme3-core/src/main/java/com/jme3/opencl/AbstractOpenCLObject.java @@ -43,8 +43,9 @@ public abstract class AbstractOpenCLObject implements OpenCLObject { this.releaser = releaser; } @Override - public void register() { + public AbstractOpenCLObject register() { OpenCLObjectManager.getInstance().registerObject(this); + return this; } @Override public void release() { diff --git a/jme3-core/src/main/java/com/jme3/opencl/Buffer.java b/jme3-core/src/main/java/com/jme3/opencl/Buffer.java index a65381f31..ce3ff8fab 100644 --- a/jme3-core/src/main/java/com/jme3/opencl/Buffer.java +++ b/jme3-core/src/main/java/com/jme3/opencl/Buffer.java @@ -52,6 +52,12 @@ public abstract class Buffer extends AbstractOpenCLObject { protected Buffer(ObjectReleaser releaser) { super(releaser); } + + @Override + public Buffer register() { + super.register(); + return this; + } /** * @return the size of the buffer in bytes. diff --git a/jme3-core/src/main/java/com/jme3/opencl/CommandQueue.java b/jme3-core/src/main/java/com/jme3/opencl/CommandQueue.java index a2bfeb4fd..8b9f77ef2 100644 --- a/jme3-core/src/main/java/com/jme3/opencl/CommandQueue.java +++ b/jme3-core/src/main/java/com/jme3/opencl/CommandQueue.java @@ -51,6 +51,12 @@ public abstract class CommandQueue extends AbstractOpenCLObject { this.device = device; } + @Override + public CommandQueue register() { + super.register(); + return this; + } + /** * Returns the device associated with this command queue. * It can be used to query properties of the device that is used to execute diff --git a/jme3-core/src/main/java/com/jme3/opencl/Context.java b/jme3-core/src/main/java/com/jme3/opencl/Context.java index 455ae3851..52d5eba24 100644 --- a/jme3-core/src/main/java/com/jme3/opencl/Context.java +++ b/jme3-core/src/main/java/com/jme3/opencl/Context.java @@ -72,6 +72,12 @@ public abstract class Context extends AbstractOpenCLObject { super(releaser); } + @Override + public Context register() { + super.register(); + return this; + } + /** * Returns all available devices for this context. * These devices all belong to the same {@link Platform}. diff --git a/jme3-core/src/main/java/com/jme3/opencl/Event.java b/jme3-core/src/main/java/com/jme3/opencl/Event.java index 44ea3da16..66aa12a5c 100644 --- a/jme3-core/src/main/java/com/jme3/opencl/Event.java +++ b/jme3-core/src/main/java/com/jme3/opencl/Event.java @@ -43,6 +43,12 @@ public abstract class Event extends AbstractOpenCLObject { protected Event(ObjectReleaser releaser) { super(releaser); } + + @Override + public Event register() { + super.register(); + return this; + } /** * Waits until the action has finished (blocking). diff --git a/jme3-core/src/main/java/com/jme3/opencl/Image.java b/jme3-core/src/main/java/com/jme3/opencl/Image.java index 22c092fe2..7d5d07fb7 100644 --- a/jme3-core/src/main/java/com/jme3/opencl/Image.java +++ b/jme3-core/src/main/java/com/jme3/opencl/Image.java @@ -249,7 +249,13 @@ memory layout in which channels are stored in the image. protected Image(ObjectReleaser releaser) { super(releaser); } - + + @Override + public Image register() { + super.register(); + return this; + } + /** * @return the width of the image */ diff --git a/jme3-core/src/main/java/com/jme3/opencl/Kernel.java b/jme3-core/src/main/java/com/jme3/opencl/Kernel.java index 7415f12d5..1105a2504 100644 --- a/jme3-core/src/main/java/com/jme3/opencl/Kernel.java +++ b/jme3-core/src/main/java/com/jme3/opencl/Kernel.java @@ -97,6 +97,12 @@ public abstract class Kernel extends AbstractOpenCLObject { this.workGroupSize = new WorkSize(0); } + @Override + public Kernel register() { + super.register(); + return this; + } + /** * @return the name of the kernel as defined in the program source code */ diff --git a/jme3-core/src/main/java/com/jme3/opencl/OpenCLObject.java b/jme3-core/src/main/java/com/jme3/opencl/OpenCLObject.java index f9d631346..d2a45077d 100644 --- a/jme3-core/src/main/java/com/jme3/opencl/OpenCLObject.java +++ b/jme3-core/src/main/java/com/jme3/opencl/OpenCLObject.java @@ -61,6 +61,7 @@ public interface OpenCLObject { ObjectReleaser getReleaser(); /** * Releases this native object. + * * Should delegate to {@code getReleaser().release()}. */ void release(); @@ -70,6 +71,10 @@ public interface OpenCLObject { * {@link OpenCLObjectManager}, you have to release it manually * by calling {@link #release() }. * Without registering or releasing, a memory leak might occur. + *
+ * Returns {@code this} to allow calls like + * {@code Buffer buffer = clContext.createBuffer(1024).register();}. + * @return {@code this} */ - void register(); + OpenCLObject register(); } diff --git a/jme3-core/src/main/java/com/jme3/opencl/Program.java b/jme3-core/src/main/java/com/jme3/opencl/Program.java index a98cf2c02..c55f320d5 100644 --- a/jme3-core/src/main/java/com/jme3/opencl/Program.java +++ b/jme3-core/src/main/java/com/jme3/opencl/Program.java @@ -49,6 +49,12 @@ public abstract class Program extends AbstractOpenCLObject { protected Program(ObjectReleaser releaser) { super(releaser); } + + @Override + public Program register() { + super.register(); + return this; + } /** * Builds this program with the specified argument string on the specified diff --git a/jme3-examples/src/main/java/jme3test/opencl/TestContextSwitching.java b/jme3-examples/src/main/java/jme3test/opencl/TestContextSwitching.java index 80be89cd7..a1d87899d 100644 --- a/jme3-examples/src/main/java/jme3test/opencl/TestContextSwitching.java +++ b/jme3-examples/src/main/java/jme3test/opencl/TestContextSwitching.java @@ -131,8 +131,7 @@ public class TestContextSwitching extends SimpleApplication implements ScreenCon if (testBuffer == null && clContext != null && !bufferCreated) { try { - testBuffer = clContext.createBuffer(1024); - testBuffer.register(); + testBuffer = clContext.createBuffer(1024).register(); LOG.info("Test buffer created"); } catch (OpenCLException ex) { LOG.log(Level.SEVERE, "Unable to create buffer", ex); diff --git a/jme3-examples/src/main/java/jme3test/opencl/TestVertexBufferSharing.java b/jme3-examples/src/main/java/jme3test/opencl/TestVertexBufferSharing.java index 514a41d63..0e4314fbc 100644 --- a/jme3-examples/src/main/java/jme3test/opencl/TestVertexBufferSharing.java +++ b/jme3-examples/src/main/java/jme3test/opencl/TestVertexBufferSharing.java @@ -115,8 +115,7 @@ public class TestVertexBufferSharing extends SimpleApplication { private void initOpenCL1() { clContext = context.getOpenCLContext(); Device device = clContext.getDevices().get(0); - clQueue = clContext.createQueue(device); - clQueue.register(); + clQueue = clContext.createQueue(device).register(); //create kernel Program program = null; File tmpFolder = JmeSystem.getStorageFolder(); @@ -156,15 +155,13 @@ public class TestVertexBufferSharing extends SimpleApplication { } LOG.info("create new program from sources"); } - program.register(); - kernel = program.createKernel("ScaleKernel"); - kernel.register(); + program.register(); + kernel = program.createKernel("ScaleKernel").register(); } private void initOpenCL2() { //bind vertex buffer to OpenCL VertexBuffer vb = geom.getMesh().getBuffer(VertexBuffer.Type.Position); - buffer = clContext.bindVertexBuffer(vb, MemoryAccess.READ_WRITE); - buffer.register(); + buffer = clContext.bindVertexBuffer(vb, MemoryAccess.READ_WRITE).register(); ws = new com.jme3.opencl.Kernel.WorkSize(geom.getMesh().getVertexCount()); } private void updateOpenCL(float tpf) { diff --git a/jme3-examples/src/main/java/jme3test/opencl/TestWriteToTexture.java b/jme3-examples/src/main/java/jme3test/opencl/TestWriteToTexture.java index bb407893c..6feeab4b9 100644 --- a/jme3-examples/src/main/java/jme3test/opencl/TestWriteToTexture.java +++ b/jme3-examples/src/main/java/jme3test/opencl/TestWriteToTexture.java @@ -122,8 +122,7 @@ public class TestWriteToTexture extends SimpleApplication implements AnalogListe private void initOpenCL1() { clContext = context.getOpenCLContext(); - clQueue = clContext.createQueue(); - clQueue.register(); + clQueue = clContext.createQueue().register(); programCache = new ProgramCache(clContext); //create kernel String cacheID = getClass().getName()+".Julia"; @@ -135,14 +134,12 @@ public class TestWriteToTexture extends SimpleApplication implements AnalogListe programCache.saveToCache(cacheID, program); } program.register(); - kernel = program.createKernel("JuliaSet"); - kernel.register(); + kernel = program.createKernel("JuliaSet").register(); C = new Vector2f(0.12f, -0.2f); } private void initOpenCL2() { //bind image to OpenCL - texCL = clContext.bindImage(tex, MemoryAccess.WRITE_ONLY); - texCL.register(); + texCL = clContext.bindImage(tex, MemoryAccess.WRITE_ONLY).register(); } private void updateOpenCL(float tpf) { //aquire resource