SEXP createBufferIntegerVector(SEXP sContext, SEXP sMemFlag, SEXP sGlobalWorkSize){ Rcpp::XPtr<cl_context> context(sContext); int globalWorkSize = Rcpp::as<int>(sGlobalWorkSize); cl_mem_flags flags = getMemFlags(sMemFlag); cl_mem *memBuffer = new cl_mem; cl_int ciErr1 = CL_SUCCESS; *memBuffer = clCreateBuffer(*context, flags, sizeof(int) * globalWorkSize, NULL, &ciErr1); printOnError(ciErr1,"ROpenCL::createBufferIntegerVector()"); Rcpp::XPtr<cl_mem> tempXPtr(memBuffer); return tempXPtr; }
BufferId CLContextWrapper::shareGLTexture(const GLTextureId textureId, BufferType type) { auto flags = getMemFlags(type); cl_int err = 0; cl_mem mem = clCreateFromGLTexture(_this->context, flags, GL_TEXTURE_2D, 0, textureId, &err); if(err || !mem) { logError("Error: Failed to share texture with Opengl.", getError(err)); return 0; } _this->buffers.insert(mem); return mem; }
BufferId CLContextWrapper::createBuffer(size_t bytesSize, void * hostData, BufferType type) { cl_int err; cl_mem_flags flags = getMemFlags(type); if(hostData) { flags |= CL_MEM_COPY_HOST_PTR; } cl_mem buffer = clCreateBuffer(_this->context, flags, bytesSize, hostData, &err); if(!buffer) { std::cout << "Error: Failed to allocate buffer" << std::endl; std::cout << getError(err) << std::endl; return 0; } _this->buffers.insert(buffer); return buffer; }