PYOPENCL_USE_RESULT static gl_texture* create_from_gl_texture(const context *ctx, cl_mem_flags flags, GLenum texture_target, GLint miplevel, GLuint texture, unsigned dims) { if (dims == 2) { cl_mem mem = pyopencl_call_guarded(clCreateFromGLTexture2D, ctx, flags, texture_target, miplevel, texture); return pyopencl_convert_obj(gl_texture, clReleaseMemObject, mem); } else if (dims == 3) { cl_mem mem = pyopencl_call_guarded(clCreateFromGLTexture3D, ctx, flags, texture_target, miplevel, texture); return pyopencl_convert_obj(gl_texture, clReleaseMemObject, mem); } else { throw clerror("Image", CL_INVALID_VALUE, "invalid dimension"); } }
error* create_from_gl_buffer(clobj_t *ptr, clobj_t _ctx, cl_mem_flags flags, GLuint bufobj) { auto ctx = static_cast<context*>(_ctx); return c_handle_error([&] { cl_mem mem = pyopencl_call_guarded(clCreateFromGLBuffer, ctx, flags, bufobj); *ptr = pyopencl_convert_obj(gl_buffer, clReleaseMemObject, mem); }); }
error* create_from_gl_texture(clobj_t *ptr, clobj_t _ctx, cl_mem_flags flags, GLenum texture_target, GLint miplevel, GLuint texture) { #if PYOPENCL_CL_VERSION >= 0x1020 auto ctx = static_cast<context*>(_ctx); return c_handle_error([&] { cl_mem mem = pyopencl_call_guarded(clCreateFromGLTexture, ctx, flags, texture_target, miplevel, texture); *ptr = pyopencl_convert_obj(gl_texture, clReleaseMemObject, mem); }); #else PYOPENCL_UNSUPPORTED(clCreateFromGLTexture, "CL 1.1") #endif }
PYOPENCL_USE_RESULT static PYOPENCL_INLINE program* new_program(cl_program prog, program_kind_type progkind=KND_UNKNOWN) { return pyopencl_convert_obj(program, clReleaseProgram, prog, progkind); }
PYOPENCL_USE_RESULT static PYOPENCL_INLINE image* new_image(cl_mem mem, const cl_image_format *fmt) { return pyopencl_convert_obj(image, clReleaseMemObject, mem, fmt); }
PYOPENCL_USE_RESULT static PYOPENCL_INLINE buffer* new_buffer(cl_mem mem) { return pyopencl_convert_obj(buffer, clReleaseMemObject, mem); }