aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMichael Bien <[email protected]>2010-02-27 00:44:33 +0100
committerMichael Bien <[email protected]>2010-02-27 00:44:33 +0100
commit34bb39283a30919212b682c34bb54d8cd3626cbd (patch)
tree5f70f3473cdfffa8562a558cebcec6aa30af8fc7 /src
parent75d392f3fff6d47fdccae9a8915fea61cdbef990 (diff)
refactored CLGLBuffer into seperate OpenGL buffer and image types.
Diffstat (limited to 'src')
-rw-r--r--src/com/mbien/opencl/CLGLBuffer.java75
-rw-r--r--src/com/mbien/opencl/CLGLContext.java62
-rw-r--r--src/com/mbien/opencl/CLGLImage2d.java60
-rw-r--r--src/com/mbien/opencl/CLGLObject.java24
-rw-r--r--src/com/mbien/opencl/CLGLTexture.java23
-rw-r--r--src/com/mbien/opencl/CLGLTexture2d.java62
-rw-r--r--src/com/mbien/opencl/CLGLTexture3d.java69
-rw-r--r--src/com/mbien/opencl/CLImage.java19
-rw-r--r--src/com/mbien/opencl/CLImage2d.java12
-rw-r--r--src/com/mbien/opencl/CLImage3d.java13
-rw-r--r--src/com/mbien/opencl/CLImageFormat.java3
-rw-r--r--src/com/mbien/opencl/CLMemory.java51
12 files changed, 407 insertions, 66 deletions
diff --git a/src/com/mbien/opencl/CLGLBuffer.java b/src/com/mbien/opencl/CLGLBuffer.java
index 40298ad7..8b4e5f56 100644
--- a/src/com/mbien/opencl/CLGLBuffer.java
+++ b/src/com/mbien/opencl/CLGLBuffer.java
@@ -1,15 +1,15 @@
package com.mbien.opencl;
+import com.mbien.opencl.CLMemory.GLObjectType;
import java.nio.Buffer;
-import static com.mbien.opencl.CLGLI.*;
-
/**
* Shared buffer between OpenGL and OpenCL contexts.
* @author Michael Bien
*/
-public final class CLGLBuffer<B extends Buffer> extends CLBuffer<B> {
+public final class CLGLBuffer<B extends Buffer> extends CLBuffer<B> implements CLGLObject {
+
/**
* The OpenGL object handle.
@@ -23,13 +23,7 @@ public final class CLGLBuffer<B extends Buffer> extends CLBuffer<B> {
static <B extends Buffer> CLGLBuffer<B> create(CLContext context, B directBuffer, int flags, int glObject) {
- if(directBuffer != null && !directBuffer.isDirect())
- throw new IllegalArgumentException("buffer is not a direct buffer");
-
- if(isHostPointerFlag(flags)) {
- throw new IllegalArgumentException(
- "CL_MEM_COPY_HOST_PTR or CL_MEM_USE_HOST_PTR can not be used with OpenGL Buffers.");
- }
+ checkBuffer(directBuffer, flags);
CL cl = context.cl;
int[] result = new int[1];
@@ -40,60 +34,31 @@ public final class CLGLBuffer<B extends Buffer> extends CLBuffer<B> {
return new CLGLBuffer<B>(context, directBuffer, id, glObject);
}
- @Override
- public <T extends Buffer> CLGLBuffer<T> cloneWith(T directBuffer) {
- return new CLGLBuffer<T>(context, directBuffer, ID, GLID);
+ static <B extends Buffer> void checkBuffer(B directBuffer, int flags) throws IllegalArgumentException {
+ if (directBuffer != null && !directBuffer.isDirect()) {
+ throw new IllegalArgumentException("buffer is not a direct buffer");
+ }
+ if (isHostPointerFlag(flags)) {
+ throw new IllegalArgumentException("CL_MEM_COPY_HOST_PTR or CL_MEM_USE_HOST_PTR can not be used with OpenGL Buffers.");
+ }
}
- /**
- * Returns the OpenGL buffer type of this shared buffer.
- */
- public GLObjectType getGLObjectType() {
- int[] array = new int[1];
- int ret = ((CLGLI)cl).clGetGLObjectInfo(ID, array, 0, null, 0);
- CLException.checkForError(ret, "error while asking for gl object info");
- return GLObjectType.valueOf(array[0]);
+ public int getGLObjectID() {
+ return GLID;
}
- /**
- * Returns the OpenGL object id of this shared buffer.
- */
- public int getGLObjectID() {
- int[] array = new int[1];
- int ret = ((CLGLI)cl).clGetGLObjectInfo(ID, null, 0, array, 0);
- CLException.checkForError(ret, "error while asking for gl object info");
- return array[0];
+ public GLObjectType getGLObjectType() {
+ return GLObjectType.GL_OBJECT_BUFFER;
}
@Override
- public String toString() {
- return "CLMemory [id: " + ID+" glID: "+GLID+"]";
+ public <T extends Buffer> CLGLBuffer<T> cloneWith(T directBuffer) {
+ return new CLGLBuffer<T>(context, directBuffer, ID, GLID);
}
- public enum GLObjectType {
-
- GL_OBJECT_BUFFER(CL_GL_OBJECT_BUFFER),
- GL_OBJECT_TEXTURE2D(CL_GL_OBJECT_TEXTURE2D),
- GL_OBJECT_TEXTURE3D(CL_GL_OBJECT_TEXTURE3D),
- GL_OBJECT_RENDERBUFFER(CL_GL_OBJECT_RENDERBUFFER);
-
- public final int TYPE;
-
- private GLObjectType(int type) {
- this.TYPE = type;
- }
-
- public static GLObjectType valueOf(int type) {
- if(type == CL_GL_OBJECT_BUFFER)
- return GL_OBJECT_BUFFER;
- else if(type == CL_GL_OBJECT_TEXTURE2D)
- return GL_OBJECT_TEXTURE2D;
- else if(type == CL_GL_OBJECT_TEXTURE3D)
- return GL_OBJECT_TEXTURE3D;
- else if(type == CL_GL_OBJECT_RENDERBUFFER)
- return GL_OBJECT_RENDERBUFFER;
- return null;
- }
+ @Override
+ public String toString() {
+ return "CLGLBuffer [id: " + ID+" glID: "+GLID+"]";
}
}
diff --git a/src/com/mbien/opencl/CLGLContext.java b/src/com/mbien/opencl/CLGLContext.java
index 49fa7fac..5c7226c9 100644
--- a/src/com/mbien/opencl/CLGLContext.java
+++ b/src/com/mbien/opencl/CLGLContext.java
@@ -13,7 +13,7 @@ import javax.media.opengl.GLContext;
import static com.mbien.opencl.CLGLI.*;
/**
- * OpenCL Context supporting interoperablity between JOGL and JOCL.
+ * OpenCL Context supporting JOGL-JOCL interoperablity.
* @author Michael Bien
*/
public final class CLGLContext extends CLContext {
@@ -146,7 +146,7 @@ public final class CLGLContext extends CLContext {
return properties.put(0).rewind(); // 0 terminated array
}
-
+ // Buffers
public final CLGLBuffer<?> createFromGLBuffer(int glBuffer, Mem... flags) {
return createFromGLBuffer(null, glBuffer, Mem.flagsToInt(flags));
}
@@ -165,4 +165,62 @@ public final class CLGLContext extends CLContext {
return buffer;
}
+ // Renderbuffers
+ public final CLGLImage2d<?> createFromGLRenderbuffer(int glBuffer, Mem... flags) {
+ return createFromGLRenderbuffer(null, glBuffer, Mem.flagsToInt(flags));
+ }
+
+ public final CLGLImage2d<?> createFromGLRenderbuffer(int glBuffer, int flags) {
+ return createFromGLRenderbuffer(null, glBuffer, flags);
+ }
+
+ public final <B extends Buffer> CLGLImage2d<B> createFromGLRenderbuffer(B directBuffer, int glBuffer, Mem... flags) {
+ return createFromGLRenderbuffer(directBuffer, glBuffer, Mem.flagsToInt(flags));
+ }
+
+ public final <B extends Buffer> CLGLImage2d<B> createFromGLRenderbuffer(B directBuffer, int glBuffer, int flags) {
+ CLGLImage2d<B> buffer = CLGLImage2d.createFromGLRenderbuffer(this, directBuffer, flags, glBuffer);
+ memoryObjects.add(buffer);
+ return buffer;
+ }
+
+ //2d Textures
+ public final CLGLTexture2d<?> createFromGLTexture2d(int target, int texture, int mipmap, Mem... flags) {
+ return createFromGLTexture2d(null, target, texture, mipmap, Mem.flagsToInt(flags));
+ }
+
+ public final CLGLTexture2d<?> createFromGLTexture2d(int target, int texture, int mipmap, int flags) {
+ return createFromGLTexture2d(null, target, texture, mipmap, flags);
+ }
+
+ public final <B extends Buffer> CLGLTexture2d<B> createFromGLTexture2d(B directBuffer, int target, int texture, int mipmap, Mem... flags) {
+ return createFromGLTexture2d(directBuffer, target, texture, mipmap, Mem.flagsToInt(flags));
+ }
+
+ public final <B extends Buffer> CLGLTexture2d<B> createFromGLTexture2d(B directBuffer, int target, int texture, int mipmap, int flags) {
+ CLGLTexture2d<B> buffer = CLGLTexture2d.createFromGLTexture2d(this, directBuffer, target, texture, mipmap, flags);
+ memoryObjects.add(buffer);
+ return buffer;
+ }
+
+ //3d Textures
+ public final CLGLTexture3d<?> createFromGLTexture3d(int target, int texture, int mipmap, Mem... flags) {
+ return createFromGLTexture3d(null, target, texture, mipmap, Mem.flagsToInt(flags));
+ }
+
+ public final CLGLTexture3d<?> createFromGLTexture3d(int target, int texture, int mipmap, int flags) {
+ return createFromGLTexture3d(null, target, texture, mipmap, flags);
+ }
+
+ public final <B extends Buffer> CLGLTexture3d<B> createFromGLTexture3d(B directBuffer, int target, int texture, int mipmap, Mem... flags) {
+ return createFromGLTexture3d(directBuffer, target, texture, mipmap, Mem.flagsToInt(flags));
+ }
+
+ public final <B extends Buffer> CLGLTexture3d<B> createFromGLTexture3d(B directBuffer, int target, int texture, int mipmap, int flags) {
+ CLGLTexture3d<B> buffer = CLGLTexture3d.createFromGLTexture3d(this, directBuffer, target, texture, mipmap, flags);
+ memoryObjects.add(buffer);
+ return buffer;
+ }
+
+
}
diff --git a/src/com/mbien/opencl/CLGLImage2d.java b/src/com/mbien/opencl/CLGLImage2d.java
new file mode 100644
index 00000000..dc64fc55
--- /dev/null
+++ b/src/com/mbien/opencl/CLGLImage2d.java
@@ -0,0 +1,60 @@
+package com.mbien.opencl;
+
+import com.mbien.opencl.CLMemory.GLObjectType;
+import com.mbien.opencl.impl.CLImageFormatImpl;
+import java.nio.Buffer;
+
+import static com.mbien.opencl.CL.*;
+
+/**
+ * 2D OpenCL image representing an OpenGL renderbuffer.
+ * @author Michael Bien
+ */
+public class CLGLImage2d<B extends Buffer> extends CLImage2d<B> implements CLGLObject {
+
+ /**
+ * The OpenGL object handle.
+ */
+ public final int GLID;
+
+ protected CLGLImage2d(CLContext context, B directBuffer, CLImageFormat format, CLImageInfoAccessor accessor, int width, int height, long id, int glid) {
+ super(context, directBuffer, format, accessor, width, height, id);
+ this.GLID = glid;
+ }
+
+ static <B extends Buffer> CLGLImage2d<B> createFromGLRenderbuffer(CLContext context, B directBuffer, int flags, int glObject) {
+
+ CLGLBuffer.checkBuffer(directBuffer, flags);
+
+ CL cl = context.cl;
+ int[] result = new int[1];
+ CLGLI clgli = (CLGLI)cl;
+
+ long id = clgli.clCreateFromGLRenderbuffer(context.ID, flags, glObject, result, 0);
+
+ return createImage(context, id, directBuffer, glObject);
+ }
+
+ static <B extends Buffer> CLGLImage2d<B> createImage(CLContext context, long id, B directBuffer, int glObject) {
+ CLImageInfoAccessor accessor = new CLImageInfoAccessor(context.cl, id);
+
+ CLImageFormat format = new CLImageFormat();
+ accessor.getInfo(CL_IMAGE_FORMAT, CLImageFormatImpl.size(), format.getFormatImpl().getBuffer(), null);
+
+ int width = (int)accessor.getLong(CL_IMAGE_WIDTH);
+ int height = (int)accessor.getLong(CL_IMAGE_HEIGHT);
+
+ return new CLGLImage2d<B>(context, directBuffer, format, accessor, width, height, id, glObject);
+ }
+
+ @Override
+ public GLObjectType getGLObjectType() {
+ return GLObjectType.GL_OBJECT_RENDERBUFFER;
+ }
+
+ @Override
+ public int getGLObjectID() {
+ return GLID;
+ }
+
+}
diff --git a/src/com/mbien/opencl/CLGLObject.java b/src/com/mbien/opencl/CLGLObject.java
new file mode 100644
index 00000000..044f2274
--- /dev/null
+++ b/src/com/mbien/opencl/CLGLObject.java
@@ -0,0 +1,24 @@
+/*
+ * Created on Friday, February 26 2010
+ */
+package com.mbien.opencl;
+
+import com.mbien.opencl.CLMemory.GLObjectType;
+
+/**
+ *
+ * @author Michael Bien
+ */
+interface CLGLObject {
+
+ /**
+ * Returns the OpenGL object id of this shared object.
+ */
+ public int getGLObjectID();
+
+ /**
+ * Returns the OpenGL buffer type of this shared object.
+ */
+ public GLObjectType getGLObjectType();
+
+}
diff --git a/src/com/mbien/opencl/CLGLTexture.java b/src/com/mbien/opencl/CLGLTexture.java
new file mode 100644
index 00000000..9290dc63
--- /dev/null
+++ b/src/com/mbien/opencl/CLGLTexture.java
@@ -0,0 +1,23 @@
+/*
+ * Created on Friday, February 26 2010
+ */
+
+package com.mbien.opencl;
+
+/**
+ *
+ * @author Michael Bien
+ */
+interface CLGLTexture {
+
+ /**
+ * Returns the OpenGL texture target of this texture.
+ */
+ public int getTextureTarget();
+
+ /**
+ * Returns the OpenGL mipmap level of this texture.
+ */
+ public int getMipMapLevel();
+
+}
diff --git a/src/com/mbien/opencl/CLGLTexture2d.java b/src/com/mbien/opencl/CLGLTexture2d.java
new file mode 100644
index 00000000..d23d7e3e
--- /dev/null
+++ b/src/com/mbien/opencl/CLGLTexture2d.java
@@ -0,0 +1,62 @@
+package com.mbien.opencl;
+
+import com.mbien.opencl.CLImage.CLImageInfoAccessor;
+import com.mbien.opencl.CLMemory.GLObjectType;
+import com.mbien.opencl.impl.CLImageFormatImpl;
+import java.nio.Buffer;
+
+import static com.mbien.opencl.CL.*;
+
+/**
+ * 2D OpenCL image representing an 2D OpenGL texture.
+ * @author Michael Bien
+ */
+public class CLGLTexture2d<B extends Buffer> extends CLGLImage2d<B> implements CLGLTexture {
+
+ public final int target;
+
+ public final int mipMapLevel;
+
+ public CLGLTexture2d(CLContext context, B directBuffer, CLImageFormat format, CLImageInfoAccessor accessor, int target, int mipLevel, int width, int height, long id, int glid) {
+ super(context, directBuffer, format, accessor, width, height, id, glid);
+ this.target = target;
+ this.mipMapLevel = mipLevel;
+ }
+
+ static <B extends Buffer> CLGLTexture2d<B> createFromGLTexture2d(CLContext context, B directBuffer, int target, int texture, int mipLevel, int flags) {
+
+ CLGLBuffer.checkBuffer(directBuffer, flags);
+
+ CL cl = context.cl;
+ int[] result = new int[1];
+ CLGLI clgli = (CLGLI)cl;
+
+ long id = clgli.clCreateFromGLTexture2D(context.ID, flags, target, mipLevel, texture, result, 0);
+
+ CLImageInfoAccessor accessor = new CLImageInfoAccessor(cl, id);
+
+ CLImageFormat format = new CLImageFormat();
+ accessor.getInfo(CL_IMAGE_FORMAT, CLImageFormatImpl.size(), format.getFormatImpl().getBuffer(), null);
+
+ int width = (int)accessor.getLong(CL_IMAGE_WIDTH);
+ int height = (int)accessor.getLong(CL_IMAGE_HEIGHT);
+
+ return new CLGLTexture2d<B>(context, directBuffer, format, accessor, target, mipLevel, width, height, id, width);
+
+ }
+
+ public int getTextureTarget() {
+ return target;
+ }
+
+ public int getMipMapLevel() {
+ return mipMapLevel;
+ }
+
+ @Override
+ public GLObjectType getGLObjectType() {
+ return GLObjectType.GL_OBJECT_TEXTURE2D;
+ }
+
+
+}
diff --git a/src/com/mbien/opencl/CLGLTexture3d.java b/src/com/mbien/opencl/CLGLTexture3d.java
new file mode 100644
index 00000000..7bc08053
--- /dev/null
+++ b/src/com/mbien/opencl/CLGLTexture3d.java
@@ -0,0 +1,69 @@
+package com.mbien.opencl;
+
+import com.mbien.opencl.CLMemory.GLObjectType;
+import com.mbien.opencl.impl.CLImageFormatImpl;
+import java.nio.Buffer;
+
+import static com.mbien.opencl.CL.*;
+
+/**
+ * 3D OpenCL image representing an 3D OpenGL texture.
+ * @author Michael Bien
+ */
+public class CLGLTexture3d<B extends Buffer> extends CLImage3d<B> implements CLGLObject, CLGLTexture {
+
+ /**
+ * The OpenGL object handle.
+ */
+ public final int GLID;
+
+ public final int target;
+
+ public final int mipMapLevel;
+
+ private CLGLTexture3d(CLContext context, B directBuffer, CLImageFormat format, CLImageInfoAccessor accessor, int target, int mipLevel, int width, int height, int depth, long id, int glid) {
+ super(context, directBuffer, format, accessor, width, height, depth, id);
+ this.GLID = glid;
+ this.target = target;
+ this.mipMapLevel = mipLevel;
+ }
+
+ static <B extends Buffer> CLGLTexture3d<B> createFromGLTexture3d(CLContext context, B directBuffer, int flags, int target, int mipLevel, int texture) {
+
+ CLGLBuffer.checkBuffer(directBuffer, flags);
+
+ CL cl = context.cl;
+ int[] result = new int[1];
+ CLGLI clgli = (CLGLI)cl;
+
+ long id = clgli.clCreateFromGLTexture3D(context.ID, flags, target, mipLevel, texture, result, 0);
+
+ CLImageInfoAccessor accessor = new CLImageInfoAccessor(cl, id);
+
+ CLImageFormat format = new CLImageFormat();
+ accessor.getInfo(CL_IMAGE_FORMAT, CLImageFormatImpl.size(), format.getFormatImpl().getBuffer(), null);
+
+ int width = (int)accessor.getLong(CL_IMAGE_WIDTH);
+ int height = (int)accessor.getLong(CL_IMAGE_HEIGHT);
+ int depth = (int)accessor.getLong(CL_IMAGE_DEPTH);
+
+ return new CLGLTexture3d<B>(context, directBuffer, format, accessor, target, mipLevel, width, height, depth, id, texture);
+ }
+
+ public int getGLObjectID() {
+ return GLID;
+ }
+
+ public int getTextureTarget() {
+ return target;
+ }
+
+ public int getMipMapLevel() {
+ return mipMapLevel;
+ }
+
+ public GLObjectType getGLObjectType() {
+ return GLObjectType.GL_OBJECT_TEXTURE3D;
+ }
+
+}
diff --git a/src/com/mbien/opencl/CLImage.java b/src/com/mbien/opencl/CLImage.java
index a5e44fc0..1da1cc65 100644
--- a/src/com/mbien/opencl/CLImage.java
+++ b/src/com/mbien/opencl/CLImage.java
@@ -11,7 +11,7 @@ import static com.mbien.opencl.CL.*;
*/
public abstract class CLImage<B extends Buffer> extends CLMemory<B> {
- protected final CLImageFormat format;
+ protected CLImageFormat format;
final CLInfoAccessor imageInfo;
@@ -19,8 +19,12 @@ public abstract class CLImage<B extends Buffer> extends CLMemory<B> {
public final int height;
protected CLImage(CLContext context, B directBuffer, CLImageFormat format, int width, int height, long id) {
+ this(context, directBuffer, format, new CLImageInfoAccessor(context.cl, id), width, height, id);
+ }
+
+ protected CLImage(CLContext context, B directBuffer, CLImageFormat format, CLImageInfoAccessor accessor, int width, int height, long id) {
super(context, directBuffer, id);
- this.imageInfo = new CLImageInfoAccessor();
+ this.imageInfo = accessor;
this.format = format;
this.width = width;
this.height = height;
@@ -63,11 +67,18 @@ public abstract class CLImage<B extends Buffer> extends CLMemory<B> {
}
+ protected final static class CLImageInfoAccessor extends CLInfoAccessor {
- private final class CLImageInfoAccessor extends CLInfoAccessor {
+ private final long id;
+ private final CL cl;
+
+ public CLImageInfoAccessor(CL cl, long id) {
+ this.cl = cl;
+ this.id = id;
+ }
@Override
protected int getInfo(int name, long valueSize, Buffer value, PointerBuffer valueSizeRet) {
- return cl.clGetImageInfo(ID, name, valueSize, value, valueSizeRet);
+ return cl.clGetImageInfo(id, name, valueSize, value, valueSizeRet);
}
}
diff --git a/src/com/mbien/opencl/CLImage2d.java b/src/com/mbien/opencl/CLImage2d.java
index 882cedc4..a04756b9 100644
--- a/src/com/mbien/opencl/CLImage2d.java
+++ b/src/com/mbien/opencl/CLImage2d.java
@@ -10,11 +10,15 @@ import static com.mbien.opencl.CLException.*;
*
* @author Michael Bien
*/
-public final class CLImage2d<B extends Buffer> extends CLImage<B> {
+public class CLImage2d<B extends Buffer> extends CLImage<B> {
private CLImage2d(CLContext context, B directBuffer, CLImageFormat format, int width, int height, long id) {
super(context, directBuffer, format, width, height, id);
}
+
+ protected CLImage2d(CLContext context, B directBuffer, CLImageFormat format, CLImageInfoAccessor accessor, int width, int height, long id) {
+ super(context, directBuffer, format, accessor, width, height, id);
+ }
static <B extends Buffer> CLImage2d<B> createImage(CLContext context, B directBuffer,
int width, int height, int rowPitch, CLImageFormat format, int flags) {
@@ -33,4 +37,10 @@ public final class CLImage2d<B extends Buffer> extends CLImage<B> {
return new CLImage2d<T>(context, directBuffer, format, width, height, ID);
}
+
+ @Override
+ public String toString() {
+ return "CLImage2d [id: " + ID+" width: "+width+" height: "+height+"]";
+ }
+
}
diff --git a/src/com/mbien/opencl/CLImage3d.java b/src/com/mbien/opencl/CLImage3d.java
index 2549ff21..681f4fbe 100644
--- a/src/com/mbien/opencl/CLImage3d.java
+++ b/src/com/mbien/opencl/CLImage3d.java
@@ -11,7 +11,7 @@ import static com.mbien.opencl.CLException.*;
*
* @author Michael Bien
*/
-public final class CLImage3d<B extends Buffer> extends CLImage<B> {
+public class CLImage3d<B extends Buffer> extends CLImage<B> {
public final int depth;
@@ -20,6 +20,12 @@ public final class CLImage3d<B extends Buffer> extends CLImage<B> {
this.depth = depth;
}
+ protected CLImage3d(CLContext context, B directBuffer, CLImageFormat format, CLImageInfoAccessor accessor, int width, int height, int depth, long id) {
+ super(context, directBuffer, format, accessor, width, height, id);
+ this.depth = depth;
+ }
+
+
static <B extends Buffer> CLImage3d<B> createImage(CLContext context, B directBuffer,
int width, int height, int depth, int rowPitch, int slicePitch, CLImageFormat format, int flags) {
@@ -50,4 +56,9 @@ public final class CLImage3d<B extends Buffer> extends CLImage<B> {
public int getDepth() {
return depth;
}
+
+ @Override
+ public String toString() {
+ return "CLImage3d [id: " + ID+" width: "+width+" height: "+height+" depth: "+depth+"]";
+ }
}
diff --git a/src/com/mbien/opencl/CLImageFormat.java b/src/com/mbien/opencl/CLImageFormat.java
index d2625f7f..d2e452b8 100644
--- a/src/com/mbien/opencl/CLImageFormat.java
+++ b/src/com/mbien/opencl/CLImageFormat.java
@@ -12,6 +12,9 @@ public final class CLImageFormat {
private final CLImageFormatImpl format = CLImageFormatImpl.create();
+ CLImageFormat() {
+ }
+
public CLImageFormat(ChannelOrder order, ChannelType type) {
setImageChannelOrder(order);
setImageChannelDataType(type);
diff --git a/src/com/mbien/opencl/CLMemory.java b/src/com/mbien/opencl/CLMemory.java
index aa65e806..0be1b530 100644
--- a/src/com/mbien/opencl/CLMemory.java
+++ b/src/com/mbien/opencl/CLMemory.java
@@ -10,10 +10,10 @@ import java.nio.IntBuffer;
import java.nio.ShortBuffer;
import static com.mbien.opencl.CLException.*;
-import static com.mbien.opencl.CL.*;
+import static com.mbien.opencl.CLGLI.*;
/**
- *
+ * Common superclass for all OpenCL memory types.
* @author Michael Bien
*/
public abstract class CLMemory <B extends Buffer> extends CLObject implements CLResource {
@@ -101,6 +101,27 @@ public abstract class CLMemory <B extends Buffer> extends CLObject implements CL
checkForError(ret, "can not release mem object");
}
+ // kept only for debugging purposes
+ /**
+ * Returns the OpenGL buffer type of this shared buffer.
+ */
+ /*public*/ GLObjectType getGLObjectType() {
+ int[] array = new int[1];
+ int ret = ((CLGLI)cl).clGetGLObjectInfo(ID, array, 0, null, 0);
+ CLException.checkForError(ret, "error while asking for gl object info");
+ return GLObjectType.valueOf(array[0]);
+ }
+
+ /**
+ * Returns the OpenGL object id of this shared buffer.
+ */
+ /*public*/ int getGLObjectID() {
+ int[] array = new int[1];
+ int ret = ((CLGLI)cl).clGetGLObjectInfo(ID, null, 0, array, 0);
+ CLException.checkForError(ret, "error while asking for gl object info");
+ return array[0];
+ }
+
@Override
public boolean equals(Object obj) {
if (obj == null) {
@@ -276,6 +297,30 @@ public abstract class CLMemory <B extends Buffer> extends CLObject implements CL
}
-
+ public enum GLObjectType {
+
+ GL_OBJECT_BUFFER(CL_GL_OBJECT_BUFFER),
+ GL_OBJECT_TEXTURE2D(CL_GL_OBJECT_TEXTURE2D),
+ GL_OBJECT_TEXTURE3D(CL_GL_OBJECT_TEXTURE3D),
+ GL_OBJECT_RENDERBUFFER(CL_GL_OBJECT_RENDERBUFFER);
+
+ public final int TYPE;
+
+ private GLObjectType(int type) {
+ this.TYPE = type;
+ }
+
+ public static GLObjectType valueOf(int type) {
+ if(type == CL_GL_OBJECT_BUFFER)
+ return GL_OBJECT_BUFFER;
+ else if(type == CL_GL_OBJECT_TEXTURE2D)
+ return GL_OBJECT_TEXTURE2D;
+ else if(type == CL_GL_OBJECT_TEXTURE3D)
+ return GL_OBJECT_TEXTURE3D;
+ else if(type == CL_GL_OBJECT_RENDERBUFFER)
+ return GL_OBJECT_RENDERBUFFER;
+ return null;
+ }
+ }
}