public <T> CLBuffer<T> as(Class<T> newTargetType) { long mem = getEntity(); assert mem != 0; error(CL.clRetainMemObject(mem)); PointerIO<T> newIO = PointerIO.getInstance(newTargetType); return copyGLMark(new CLBuffer<T>(context, getByteCount(), mem, owner, newIO)); }
public <T> CLBuffer<T> as(Class<T> newTargetType) { long mem = getEntity(); assert mem != 0; error(CL.clRetainMemObject(mem)); PointerIO<T> newIO = PointerIO.getInstance(newTargetType); return copyGLMark(new CLBuffer<T>(context, getByteCount(), mem, owner, newIO)); }
getPeer(pErr)); } while (failedForLackOfMemory(pErr.getInt(), previousAttempts++)); return new CLBuffer<T>(this, byteCount, mem, retainBufferReference ? data : null, io);
getPeer(pErr)); } while (failedForLackOfMemory(pErr.getInt(), previousAttempts++)); return new CLBuffer<T>(this, byteCount, mem, retainBufferReference ? data : null, io);
/** * Calls <a href="http://www.khronos.org/registry/cl/sdk/1.2/docs/man/xhtml/clCreateFromGLBuffer.html">clCreateFromGLBuffer</a>.<br> * Makes an OpenGL Vertex Buffer Object (VBO) visible to OpenCL as a buffer object.<br> * Note that memory objects shared with OpenGL must be acquired / released before / after use from OpenCL. * see {@link CLMem#acquireGLObject(com.nativelibs4java.opencl.CLQueue, com.nativelibs4java.opencl.CLEvent[]) } * see {@link CLMem#releaseGLObject(com.nativelibs4java.opencl.CLQueue, com.nativelibs4java.opencl.CLEvent[]) } * @param usage flags * @param openGLBufferObject Identifier of a VBO, as generated by glGenBuffers */ @SuppressWarnings("deprecation") public CLBuffer<Byte> createBufferFromGLBuffer(CLMem.Usage usage, int openGLBufferObject) { ReusablePointers ptrs = ReusablePointers.get(); Pointer<Integer> pErr = ptrs.pErr; long mem; int previousAttempts = 0; do { mem = CL.clCreateFromGLBuffer( getEntity(), usage.getIntFlags(), openGLBufferObject, getPeer(pErr) ); } while (failedForLackOfMemory(pErr.getInt(), previousAttempts++)); return markAsGL(new CLBuffer(this, -1, mem, null, PointerIO.getByteInstance())); }
/** * Calls <a href="http://www.khronos.org/registry/cl/sdk/1.2/docs/man/xhtml/clCreateFromGLBuffer.html">clCreateFromGLBuffer</a>.<br> * Makes an OpenGL Vertex Buffer Object (VBO) visible to OpenCL as a buffer object.<br> * Note that memory objects shared with OpenGL must be acquired / released before / after use from OpenCL. * see {@link CLMem#acquireGLObject(com.nativelibs4java.opencl.CLQueue, com.nativelibs4java.opencl.CLEvent[]) } * see {@link CLMem#releaseGLObject(com.nativelibs4java.opencl.CLQueue, com.nativelibs4java.opencl.CLEvent[]) } * @param usage flags * @param openGLBufferObject Identifier of a VBO, as generated by glGenBuffers */ @SuppressWarnings("deprecation") public CLBuffer<Byte> createBufferFromGLBuffer(CLMem.Usage usage, int openGLBufferObject) { ReusablePointers ptrs = ReusablePointers.get(); Pointer<Integer> pErr = ptrs.pErr; long mem; int previousAttempts = 0; do { mem = CL.clCreateFromGLBuffer( getEntity(), usage.getIntFlags(), openGLBufferObject, getPeer(pErr) ); } while (failedForLackOfMemory(pErr.getInt(), previousAttempts++)); return markAsGL(new CLBuffer(this, -1, mem, null, PointerIO.getByteInstance())); }
/** * Calls <a href="http://www.khronos.org/registry/cl/sdk/1.2/docs/man/xhtml/clCreateSubBuffer.html">clCreateSubBuffer</a>.<br> * Can be used to create a new buffer object (referred to as a sub-buffer object) from an existing buffer object. * @param usage is used to specify allocation and usage information about the image memory object being created and is described in table 5.3 of the OpenCL spec. * @param offset * @param length length in bytes * @since OpenCL 1.1 * @return sub-buffer that is a "window" of this buffer starting at the provided offset, with the provided length */ public CLBuffer<T> createSubBuffer(Usage usage, long offset, long length) { context.getPlatform().requireMinVersionValue("clCreateSubBuffer", 1.1); int s = getElementSize(); cl_buffer_region region = new cl_buffer_region().origin(s * offset).size(s * length); ReusablePointers ptrs = ReusablePointers.get(); Pointer<Integer> pErr = ptrs.pErr; long mem = CL.clCreateSubBuffer(getEntity(), usage.getIntFlags(), CL_BUFFER_CREATE_TYPE_REGION, getPeer(getPointer(region)), getPeer(pErr)); error(pErr.getInt()); return mem == 0 ? null : new CLBuffer<T>(context, length * s, mem, null, io); }
/** * Calls <a href="http://www.khronos.org/registry/cl/sdk/1.2/docs/man/xhtml/clCreateSubBuffer.html">clCreateSubBuffer</a>.<br> * Can be used to create a new buffer object (referred to as a sub-buffer object) from an existing buffer object. * @param usage is used to specify allocation and usage information about the image memory object being created and is described in table 5.3 of the OpenCL spec. * @param offset * @param length length in bytes * @since OpenCL 1.1 * @return sub-buffer that is a "window" of this buffer starting at the provided offset, with the provided length */ public CLBuffer<T> createSubBuffer(Usage usage, long offset, long length) { context.getPlatform().requireMinVersionValue("clCreateSubBuffer", 1.1); int s = getElementSize(); cl_buffer_region region = new cl_buffer_region().origin(s * offset).size(s * length); ReusablePointers ptrs = ReusablePointers.get(); Pointer<Integer> pErr = ptrs.pErr; long mem = CL.clCreateSubBuffer(getEntity(), usage.getIntFlags(), CL_BUFFER_CREATE_TYPE_REGION, getPeer(getPointer(region)), getPeer(pErr)); error(pErr.getInt()); return mem == 0 ? null : new CLBuffer<T>(context, length * s, mem, null, io); }