{"id":22427250,"url":"https://github.com/node-3d/opencl-raub","last_synced_at":"2025-03-27T06:26:51.243Z","repository":{"id":42917841,"uuid":"242407144","full_name":"node-3d/opencl-raub","owner":"node-3d","description":"OpenCL for Node.js","archived":false,"fork":false,"pushed_at":"2022-03-26T08:21:47.000Z","size":37996,"stargazers_count":0,"open_issues_count":5,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-02-01T11:41:40.590Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/node-3d.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-02-22T20:28:24.000Z","updated_at":"2020-05-10T10:57:36.000Z","dependencies_parsed_at":"2022-08-28T05:31:22.446Z","dependency_job_id":null,"html_url":"https://github.com/node-3d/opencl-raub","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/node-3d%2Fopencl-raub","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/node-3d%2Fopencl-raub/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/node-3d%2Fopencl-raub/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/node-3d%2Fopencl-raub/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/node-3d","download_url":"https://codeload.github.com/node-3d/opencl-raub/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245794499,"owners_count":20673212,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-12-05T20:11:17.591Z","updated_at":"2025-03-27T06:26:51.211Z","avatar_url":"https://github.com/node-3d.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# OpenCL for Node.js\n\nThis is a part of [Node3D](https://github.com/node-3d) project.\n\n[![NPM](https://nodei.co/npm/opencl-raub.png?compact=true)](https://www.npmjs.com/package/opencl-raub)\n\n[![Build Status](https://api.travis-ci.com/node-3d/opencl-raub.svg?branch=master)](https://travis-ci.com/node-3d/opencl-raub)\n[![CodeFactor](https://www.codefactor.io/repository/github/node-3d/opencl-raub/badge)](https://www.codefactor.io/repository/github/node-3d/opencl-raub)\n\n\u003e npm i opencl-raub\n\n\n## Synopsis\n\n**Node.js** addon with **OpenCL** bindings.\n\n\u003e Note: this **addon uses N-API**, and therefore is ABI-compatible across different\nNode.js versions. Addon binaries are precompiled and **there is no compilation**\nstep during the `npm i` command.\n\n* Exposes low-level **OpenCL** interface, native-like functions.\n\nThe API is very close to the low-level one, although there are minor changes\nwhen it comes to lengths and, of course, pointers.\n\n\n## Usage\n\nThis is a rather low level interface, where most of the stuff is directly reflecting\nOpenCL interfaces.\n\n1. Import the module:\n\t```\n\tconst cl = require('opencl-raub');\n\t```\n2. Fetch the CL control objects:\n\t```\n\tconst platform = cl.getPlatformIDs()[0];\n\tconst devices = cl.getDeviceIDs(platform, cl.DEVICE_TYPE_ALL);\n\tconst context = cl.createContext([cl.CONTEXT_PLATFORM, platform], devices);\n\tconst device = cl.getContextInfo(context, cl.CONTEXT_DEVICES)[0];\n\tconst queue = cl.createCommandQueue(context, device, null);\n\t```\n3. Prepare the data input/output buffers:\n\t```\n\tconst BUFFER_SIZE = 10;\n\tconst BYTE_SIZE = BUFFER_SIZE * Uint32Array.BYTES_PER_ELEMENT;\n\t\n\tconst arrayA = new Uint32Array(BUFFER_SIZE);\n\tconst arrayB = new Uint32Array(BUFFER_SIZE);\n\tconst arrayC = new Uint32Array(BUFFER_SIZE);\n\t\n\tfor (let i = 0; i \u003c BUFFER_SIZE; i++) {\n\t\tarrayA[i] = i;\n\t\tarrayB[i] = i * 2;\n\t}\n\t\n\t// Create buffer for arrayA and arrayB and copy host contents\n\tconst bufferA = cl.createBuffer(context, cl.MEM_READ_ONLY, BYTE_SIZE);\n\tconst bufferB = cl.createBuffer(context, cl.MEM_READ_ONLY, BYTE_SIZE);\n\t\n\t// Create buffer for arrayC to read results\n\tconst bufferC = cl.createBuffer(context, cl.MEM_WRITE_ONLY, BYTE_SIZE);\n\t```\n4. Create a valid CL program, e.g. from source:\n\t```\n\tconst program = cl.createProgramWithSource(context, `\n\t\t__kernel void vadd(__global int *a, __global int *b, __global int *c, uint num) {\n\t\t\tsize_t i = get_global_id(0);\n\t\t\tif(i \u003e= num) return;\n\t\t\tc[i] = a[i] + b[i];\n\t\t}\n\t`);\n\tcl.buildProgram(program);\n\t```\n5. Fetch and setup a kernel from within the program:\n\t```\n\t// Create a kernel object\n\tlet kernel = cl.createKernel(program, 'vadd');\n\t\n\t// Set kernel args\n\tcl.setKernelArg(kernel, 0, 'uint*', bufferA);\n\tcl.setKernelArg(kernel, 1, 'uint*', bufferB);\n\tcl.setKernelArg(kernel, 2, 'uint*', bufferC);\n\tcl.setKernelArg(kernel, 3, 'uint', BUFFER_SIZE);\n\t```\n6. Launch the kernel and then read the results:\n\t```\n\t// Do the work\n\tcl.enqueueWriteBuffer(queue, bufferA, true, 0, BYTE_SIZE, arrayA);\n\tcl.enqueueWriteBuffer(queue, bufferB, true, 0, BYTE_SIZE, arrayB);\n\tcl.enqueueNDRangeKernel(queue, kernel, 1, null, [BUFFER_SIZE], null);\n\tcl.enqueueReadBuffer(queue, bufferC, true, 0, BYTE_SIZE, arrayC);\n\t```\n7. See if it worked:\n\t```\n\tconsole.log(`A = [${arrayA.join(', ')}]`);\n\tconsole.log(`B = [${arrayB.join(', ')}]`);\n\tconsole.log(`C = [${arrayC.join(', ')}]`);\n\t```\n8. Release the CL objects:\n\t```\n\tcl.releaseCommandQueue(queue);\n\tcl.releaseKernel(kernel);\n\tcl.releaseProgram(program);\n\tcl.releaseMemObject(bufferA);\n\tcl.releaseMemObject(bufferB);\n\tcl.releaseMemObject(bufferC);\n\tcl.releaseContext(context);\n\t```\n\n\nSee `examples` for more details. The full code of the above example is available\n[here](examples/simple.js).\n\n\n## API Notes\n\nThe methods, returning `cl_int` values of CL error codes, would return a `number` to JS.\nThat `number` may be checked against `cl.SUCCESS` and other error codes.\n\nThe returned object types (`Platform`, `Context`, `Event`, etc.) are wrappers around CL\nresource ids, that can be passed to further CL method calls.\n\nMost of the method arguments comply to the original C-style spec, some parameters are omitted\ndue to JS specifics. For example, passing an array, you don't need to specify the length.\nThe specific set of parameters for each method is documented below, so it can be compared\nto the original spec, when in doubt.\n\nFor `enqueueXXX()` methods, you can pass `hasEvent = true` (the last argument).\nIn this case an `Event` is returned, it can be used to coordinate calls, profiling etc.\n\n\n## Exported Methods\n\n* `cl.getPlatformIDs(): [Platform]` -\n\t[clGetPlatformIDs](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clGetPlatformIDs.html).\n* `cl.getPlatformInfo(platform: Platform, param_name: string): string` -\n\t[clGetPlatformInfo](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clGetPlatformInfo.html).\n\n* `cl.createContext(properties: [number | Platform], devices: [Device]): Context` -\n\t[clCreateContext](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clCreateContext.html).\n* `cl.createContextFromType(properties: [number | Platform], device_type: number): Context` -\n\t[clCreateContext](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clCreateContextFromType.html).\n* `cl.retainContext(context: Context): number` -\n\t[clRetainContext](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clRetainContext.html).\n* `cl.releaseContext(context: Context): number` -\n\t[clReleaseContext](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clReleaseContext.html).\n* `cl.getContextInfo(context: Context, param_name: string): [Device] | number | [number | Platform]` -\n\t[clGetContextInfo](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clGetContextInfo.html).\n\n* `cl.getDeviceIDs(platform: Platform, device_type: number): [Device]` -\n\t[clGetDeviceIDs](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clGetDeviceIDs.html).\n* `cl.getDeviceInfo(device: Device, param_name: number): string | number | boolean | Platform | [number] | null` -\n\t[clGetDeviceInfo](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clGetDeviceInfo.html).\n* `cl.createSubDevices(device: Device, properties: [number | Platform]): [Device]` - .\n* `cl.retainDevice(device: Device): number` -\n\t[clRetainDevice](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clRetainDevice.html).\n* `cl.releaseDevice(device: Device): number` -\n\t[clReleaseDevice](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clReleaseDevice.html).\n\n* `cl.createCommandQueue(context: Context, device: Device, properties: number): Queue` -\n\t[clCreateCommandQueue](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clCreateCommandQueue.html).\n* `cl.retainCommandQueue(queue: Queue): number` -\n\t[clRetainCommandQueue](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clRetainCommandQueue.html).\n* `cl.releaseCommandQueue(queue: Queue): number` -\n\t[clReleaseCommandQueue](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clReleaseCommandQueue.html).\n* `cl.getCommandQueueInfo(queue: Queue, param_name: number): number` -\n\t[clGetCommandQueueInfo](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clGetCommandQueueInfo.html).\n* `cl.flush(queue: Queue): number` -\n\t[clFlush](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clFlush.html).\n* `cl.finish(queue: Queue): number` -\n\t[clFinish](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clFinish.html).\n\n* `cl.enqueueReadBuffer(queue: Queue, buffer: Memory, blocking_read: boolean, offset: number, size: number, buffer: Buffer | TypedArray, event_wait_list: [Event], hasEvent: boolean): number | Event` -\n\t[clEnqueueReadBuffer](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clEnqueueReadBuffer.html).\n* `cl.enqueueReadBufferRect(queue: Queue, buffer: Memory, blocking_read: boolean, buffer_offset: [number], host_offset: [number], region: [number], buffer_row_pitch: number, buffer_slice_pitch: number, host_row_pitch: number, host_slice_pitch: number, buffer: Buffer | TypedArray, event_wait_list: [Event], hasEvent: boolean): number | Event` -\n\t[clEnqueueReadBufferRect](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clEnqueueReadBufferRect.html).\n* `cl.enqueueWriteBuffer(): number | Event` -\n\t[clEnqueueWriteBuffer](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clEnqueueWriteBuffer.html).\n* `cl.enqueueWriteBufferRect(): number | Event` -\n\t[clEnqueueWriteBufferRect](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clEnqueueWriteBufferRect.html).\n* `cl.enqueueCopyBuffer(): number | Event` -\n\t[clEnqueueCopyBuffer](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clEnqueueCopyBuffer.html).\n* `cl.enqueueCopyBufferRect(): number | Event` -\n\t[clEnqueueCopyBufferRect](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clEnqueueCopyBufferRect.html).\n* `cl.enqueueReadImage(): number | Event` -\n\t[clEnqueueReadImage](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clEnqueueReadImage.html).\n* `cl.enqueueWriteImage(): number | Event` -\n\t[clEnqueueWriteImage](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clEnqueueWriteImage.html).\n* `cl.enqueueCopyImage(): number | Event` -\n\t[clEnqueueCopyImage](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clEnqueueCopyImage.html).\n* `cl.enqueueCopyImageToBuffer(): number | Event` -\n\t[clEnqueueCopyImageToBuffer](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clEnqueueCopyImageToBuffer.html).\n* `cl.enqueueCopyBufferToImage(): number | Event` -\n\t[clEnqueueCopyBufferToImage](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clEnqueueCopyBufferToImage.html).\n* `cl.enqueueMapBuffer(): number | Event` -\n\t[clEnqueueMapBuffer](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clEnqueueMapBuffer.html).\n* `cl.enqueueMapImage(): number | Event` -\n\t[clEnqueueMapImage](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clEnqueueMapImage.html).\n* `cl.enqueueUnmapMemObject(): number | Event` -\n\t[clEnqueueUnmapMemObject](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clEnqueueUnmapMemObject.html).\n* `cl.enqueueNDRangeKernel(): number | Event` -\n\t[clEnqueueNDRangeKernel](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clEnqueueNDRangeKernel.html).\n* `cl.enqueueTask(): number | Event` -\n\t[clEnqueueTask](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clEnqueueTask.html).\n* `cl.enqueueNativeKernel(): number | Event` -\n\t[clEnqueueNativeKernel](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clEnqueueNativeKernel.html).\n* `cl.enqueueMarkerWithWaitList(): number | Event` -\n\t[clEnqueueMarkerWithWaitList](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clEnqueueMarkerWithWaitList.html).\n* `cl.enqueueBarrierWithWaitList(): number | Event` -\n\t[clEnqueueBarrierWithWaitList](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clEnqueueBarrierWithWaitList.html).\n* `cl.enqueueFillBuffer(): number | Event` -\n\t[clEnqueueFillBuffer](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clEnqueueFillBuffer.html).\n* `cl.enqueueFillImage(): number | Event` -\n\t[clEnqueueFillImage](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clEnqueueFillImage.html).\n* `cl.enqueueMigrateMemObjects(): number | Event` -\n\t[clEnqueueMigrateMemObjects](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clEnqueueMigrateMemObjects.html).\n* `cl.enqueueAcquireGLObjects(): number | Event` -\n\t[clEnqueueAcquireGLObjects](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clEnqueueAcquireGLObjects.html).\n* `cl.enqueueReleaseGLObjects(): number | Event` -\n\t[clEnqueueReleaseGLObjects](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clEnqueueReleaseGLObjects.html).\n\n* `cl.createKernel(): Kernel` -\n\t[clCreateKernel](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clCreateKernel.html).\n* `cl.createKernelsInProgram(): number` -\n\t[clCreateKernelsInProgram](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clCreateKernelsInProgram.html).\n* `cl.retainKernel(): number` -\n\t[clRetainKernel](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clRetainKernel.html).\n* `cl.releaseKernel(): number` -\n\t[clReleaseKernel](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clReleaseKernel.html).\n* `cl.setKernelArg(): number` -\n\t[clSetKernelArg](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clSetKernelArg.html).\n* `cl.getKernelInfo(): number` -\n\t[clGetKernelInfo](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clGetKernelInfo.html).\n* `cl.getKernelArgInfo(): number` -\n\t[clGetKernelArgInfo](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clGetKernelArgInfo.html).\n* `cl.getKernelWorkGroupInfo(): number` -\n\t[clGetKernelWorkGroupInfo](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clGetKernelWorkGroupInfo.html).\n\n* `cl.createBuffer(): number` -\n\t[clCreateBuffer](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clCreateBuffer.html).\n* `cl.createSubBuffer(): number` -\n\t[clCreateSubBuffer](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clCreateSubBuffer.html).\n* `cl.createImage(): number` -\n\t[clCreateImage](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clCreateImage.html).\n* `cl.retainMemObject(): number` -\n\t[clRetainMemObject](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clRetainMemObject.html).\n* `cl.releaseMemObject(): number` -\n\t[clReleaseMemObject](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clReleaseMemObject.html).\n* `cl.getSupportedImageFormats(): number` -\n\t[clGetSupportedImageFormats](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clGetSupportedImageFormats.html).\n* `cl.getMemObjectInfo(): number` -\n\t[clGetMemObjectInfo](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clGetMemObjectInfo.html).\n* `cl.getImageInfo(): number` -\n\t[clGetImageInfo](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clGetImageInfo.html).\n* `cl.createFromGLBuffer(): number` -\n\t[clCreateFromGLBuffer](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clCreateFromGLBuffer.html).\n\n* `cl.createProgramWithSource(): number` -\n\t[clCreateProgramWithSource](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clCreateProgramWithSource.html).\n* `cl.createProgramWithBinary(): number` -\n\t[clCreateProgramWithBinary](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clCreateProgramWithBinary.html).\n* `cl.createProgramWithBuiltInKernels(): number` -\n\t[clCreateProgramWithBuiltInKernels](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clCreateProgramWithBuiltInKernels.html).\n* `cl.retainProgram(): number` -\n\t[clRetainProgram](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clRetainProgram.html).\n* `cl.releaseProgram(): number` -\n\t[clReleaseProgram](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clReleaseProgram.html).\n* `cl.buildProgram(): number` -\n\t[clBuildProgram](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clBuildProgram.html).\n* `cl.compileProgram(): number` -\n\t[clCompileProgram](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clCompileProgram.html).\n* `cl.linkProgram(): number` -\n\t[clLinkProgram](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clLinkProgram.html).\n* `cl.unloadPlatformCompiler(): number` -\n\t[clUnloadPlatformCompiler](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clUnloadPlatformCompiler.html).\n* `cl.getProgramInfo(): number` -\n\t[clGetProgramInfo](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clGetProgramInfo.html).\n* `cl.getProgramBuildInfo(): number` -\n\t[clGetProgramBuildInfo](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clGetProgramBuildInfo.html).\n\n* `cl.retainSampler(): number` -\n\t[clRetainSampler](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clRetainSampler.html).\n* `cl.releaseSampler(): number` -\n\t[clReleaseSampler](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clReleaseSampler.html).\n* `cl.getSamplerInfo(): number` -\n\t[clGetSamplerInfo](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clGetSamplerInfo.html).\n* `cl.createSampler(): number` -\n\t[clCreateSampler](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clCreateSampler.html).\n\n* `cl.waitForEvents(): number` -\n\t[clWaitForEvents](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clWaitForEvents.html).\n* `cl.getEventInfo(): number` -\n\t[clGetEventInfo](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clGetEventInfo.html).\n* `cl.createUserEvent(): number` -\n\t[clCreateUserEvent](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clCreateUserEvent.html).\n* `cl.retainEvent(): number` -\n\t[clRetainEvent](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clRetainEvent.html).\n* `cl.releaseEvent(): number` -\n\t[clReleaseEvent](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clReleaseEvent.html).\n* `cl.setUserEventStatus(): number` -\n\t[clSetUserEventStatus](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clSetUserEventStatus.html).\n* `cl.setEventCallback(): number` -\n\t[clSetEventCallback](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clSetEventCallback.html).\n* `cl.getEventProfilingInfo(): number` -\n\t[clGetEventProfilingInfo](https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clGetEventProfilingInfo.html).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnode-3d%2Fopencl-raub","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnode-3d%2Fopencl-raub","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnode-3d%2Fopencl-raub/lists"}