Преглед изворни кода

OpenCLObject.register() now returns this.

This allows to chain the register method like kernel=program.createKernel("ScaleKernel").register(); or testBuffer=clContext.createBuffer(1024).register();
shamanDevel пре 9 година
родитељ
комит
a8d77a7cd1

+ 2 - 1
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() {

+ 6 - 0
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.

+ 6 - 0
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

+ 6 - 0
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}.

+ 6 - 0
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).

+ 7 - 1
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
      */

+ 6 - 0
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
      */

+ 6 - 1
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.
+	 * <br>
+	 * Returns {@code this} to allow calls like
+	 * {@code Buffer buffer = clContext.createBuffer(1024).register();}.
+	 * @return {@code this}
      */
-    void register();
+    OpenCLObject register();
 }

+ 6 - 0
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

+ 1 - 2
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);

+ 4 - 7
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) {

+ 3 - 6
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