OpenCLObject.register() now returns this.

This allows to chain the register method like kernel=program.createKernel("ScaleKernel").register(); or testBuffer=clContext.createBuffer(1024).register();
define_list_fix
shamanDevel 9 years ago
parent 46db6d95f8
commit a8d77a7cd1
  1. 3
      jme3-core/src/main/java/com/jme3/opencl/AbstractOpenCLObject.java
  2. 6
      jme3-core/src/main/java/com/jme3/opencl/Buffer.java
  3. 6
      jme3-core/src/main/java/com/jme3/opencl/CommandQueue.java
  4. 6
      jme3-core/src/main/java/com/jme3/opencl/Context.java
  5. 6
      jme3-core/src/main/java/com/jme3/opencl/Event.java
  6. 8
      jme3-core/src/main/java/com/jme3/opencl/Image.java
  7. 6
      jme3-core/src/main/java/com/jme3/opencl/Kernel.java
  8. 7
      jme3-core/src/main/java/com/jme3/opencl/OpenCLObject.java
  9. 6
      jme3-core/src/main/java/com/jme3/opencl/Program.java
  10. 3
      jme3-examples/src/main/java/jme3test/opencl/TestContextSwitching.java
  11. 11
      jme3-examples/src/main/java/jme3test/opencl/TestVertexBufferSharing.java
  12. 9
      jme3-examples/src/main/java/jme3test/opencl/TestWriteToTexture.java

@ -43,8 +43,9 @@ public abstract class AbstractOpenCLObject implements OpenCLObject {
this.releaser = releaser; this.releaser = releaser;
} }
@Override @Override
public void register() { public AbstractOpenCLObject register() {
OpenCLObjectManager.getInstance().registerObject(this); OpenCLObjectManager.getInstance().registerObject(this);
return this;
} }
@Override @Override
public void release() { public void release() {

@ -52,6 +52,12 @@ public abstract class Buffer extends AbstractOpenCLObject {
protected Buffer(ObjectReleaser releaser) { protected Buffer(ObjectReleaser releaser) {
super(releaser); super(releaser);
} }
@Override
public Buffer register() {
super.register();
return this;
}
/** /**
* @return the size of the buffer in bytes. * @return the size of the buffer in bytes.

@ -51,6 +51,12 @@ public abstract class CommandQueue extends AbstractOpenCLObject {
this.device = device; this.device = device;
} }
@Override
public CommandQueue register() {
super.register();
return this;
}
/** /**
* Returns the device associated with this command queue. * Returns the device associated with this command queue.
* It can be used to query properties of the device that is used to execute * It can be used to query properties of the device that is used to execute

@ -72,6 +72,12 @@ public abstract class Context extends AbstractOpenCLObject {
super(releaser); super(releaser);
} }
@Override
public Context register() {
super.register();
return this;
}
/** /**
* Returns all available devices for this context. * Returns all available devices for this context.
* These devices all belong to the same {@link Platform}. * These devices all belong to the same {@link Platform}.

@ -43,6 +43,12 @@ public abstract class Event extends AbstractOpenCLObject {
protected Event(ObjectReleaser releaser) { protected Event(ObjectReleaser releaser) {
super(releaser); super(releaser);
} }
@Override
public Event register() {
super.register();
return this;
}
/** /**
* Waits until the action has finished (blocking). * Waits until the action has finished (blocking).

@ -249,7 +249,13 @@ memory layout in which channels are stored in the image.
protected Image(ObjectReleaser releaser) { protected Image(ObjectReleaser releaser) {
super(releaser); super(releaser);
} }
@Override
public Image register() {
super.register();
return this;
}
/** /**
* @return the width of the image * @return the width of the image
*/ */

@ -97,6 +97,12 @@ public abstract class Kernel extends AbstractOpenCLObject {
this.workGroupSize = new WorkSize(0); 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 * @return the name of the kernel as defined in the program source code
*/ */

@ -61,6 +61,7 @@ public interface OpenCLObject {
ObjectReleaser getReleaser(); ObjectReleaser getReleaser();
/** /**
* Releases this native object. * Releases this native object.
*
* Should delegate to {@code getReleaser().release()}. * Should delegate to {@code getReleaser().release()}.
*/ */
void release(); void release();
@ -70,6 +71,10 @@ public interface OpenCLObject {
* {@link OpenCLObjectManager}, you have to release it manually * {@link OpenCLObjectManager}, you have to release it manually
* by calling {@link #release() }. * by calling {@link #release() }.
* Without registering or releasing, a memory leak might occur. * 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();
} }

@ -49,6 +49,12 @@ public abstract class Program extends AbstractOpenCLObject {
protected Program(ObjectReleaser releaser) { protected Program(ObjectReleaser releaser) {
super(releaser); super(releaser);
} }
@Override
public Program register() {
super.register();
return this;
}
/** /**
* Builds this program with the specified argument string on the specified * Builds this program with the specified argument string on the specified

@ -131,8 +131,7 @@ public class TestContextSwitching extends SimpleApplication implements ScreenCon
if (testBuffer == null && clContext != null && !bufferCreated) { if (testBuffer == null && clContext != null && !bufferCreated) {
try { try {
testBuffer = clContext.createBuffer(1024); testBuffer = clContext.createBuffer(1024).register();
testBuffer.register();
LOG.info("Test buffer created"); LOG.info("Test buffer created");
} catch (OpenCLException ex) { } catch (OpenCLException ex) {
LOG.log(Level.SEVERE, "Unable to create buffer", ex); LOG.log(Level.SEVERE, "Unable to create buffer", ex);

@ -115,8 +115,7 @@ public class TestVertexBufferSharing extends SimpleApplication {
private void initOpenCL1() { private void initOpenCL1() {
clContext = context.getOpenCLContext(); clContext = context.getOpenCLContext();
Device device = clContext.getDevices().get(0); Device device = clContext.getDevices().get(0);
clQueue = clContext.createQueue(device); clQueue = clContext.createQueue(device).register();
clQueue.register();
//create kernel //create kernel
Program program = null; Program program = null;
File tmpFolder = JmeSystem.getStorageFolder(); File tmpFolder = JmeSystem.getStorageFolder();
@ -156,15 +155,13 @@ public class TestVertexBufferSharing extends SimpleApplication {
} }
LOG.info("create new program from sources"); LOG.info("create new program from sources");
} }
program.register(); program.register();
kernel = program.createKernel("ScaleKernel"); kernel = program.createKernel("ScaleKernel").register();
kernel.register();
} }
private void initOpenCL2() { private void initOpenCL2() {
//bind vertex buffer to OpenCL //bind vertex buffer to OpenCL
VertexBuffer vb = geom.getMesh().getBuffer(VertexBuffer.Type.Position); VertexBuffer vb = geom.getMesh().getBuffer(VertexBuffer.Type.Position);
buffer = clContext.bindVertexBuffer(vb, MemoryAccess.READ_WRITE); buffer = clContext.bindVertexBuffer(vb, MemoryAccess.READ_WRITE).register();
buffer.register();
ws = new com.jme3.opencl.Kernel.WorkSize(geom.getMesh().getVertexCount()); ws = new com.jme3.opencl.Kernel.WorkSize(geom.getMesh().getVertexCount());
} }
private void updateOpenCL(float tpf) { private void updateOpenCL(float tpf) {

@ -122,8 +122,7 @@ public class TestWriteToTexture extends SimpleApplication implements AnalogListe
private void initOpenCL1() { private void initOpenCL1() {
clContext = context.getOpenCLContext(); clContext = context.getOpenCLContext();
clQueue = clContext.createQueue(); clQueue = clContext.createQueue().register();
clQueue.register();
programCache = new ProgramCache(clContext); programCache = new ProgramCache(clContext);
//create kernel //create kernel
String cacheID = getClass().getName()+".Julia"; String cacheID = getClass().getName()+".Julia";
@ -135,14 +134,12 @@ public class TestWriteToTexture extends SimpleApplication implements AnalogListe
programCache.saveToCache(cacheID, program); programCache.saveToCache(cacheID, program);
} }
program.register(); program.register();
kernel = program.createKernel("JuliaSet"); kernel = program.createKernel("JuliaSet").register();
kernel.register();
C = new Vector2f(0.12f, -0.2f); C = new Vector2f(0.12f, -0.2f);
} }
private void initOpenCL2() { private void initOpenCL2() {
//bind image to OpenCL //bind image to OpenCL
texCL = clContext.bindImage(tex, MemoryAccess.WRITE_ONLY); texCL = clContext.bindImage(tex, MemoryAccess.WRITE_ONLY).register();
texCL.register();
} }
private void updateOpenCL(float tpf) { private void updateOpenCL(float tpf) {
//aquire resource //aquire resource

Loading…
Cancel
Save