#ifndef _LIVOX_GEN1_OPENCL_SPLITTING_ENGINE_H #define _LIVOX_GEN1_OPENCL_SPLITTING_ENGINE_H #include #include #include #include namespace smo { namespace stim_buff { class PcloudStimulusBuffer; class OpenClSplittingEngine { public: explicit OpenClSplittingEngine(PcloudStimulusBuffer& parent); ~OpenClSplittingEngine(); // Non-copyable, movable OpenClSplittingEngine(const OpenClSplittingEngine&) = delete; OpenClSplittingEngine& operator=(const OpenClSplittingEngine&) = delete; OpenClSplittingEngine(OpenClSplittingEngine&&) = default; OpenClSplittingEngine& operator=(OpenClSplittingEngine&&) = default; bool setup(); void finalize(); private: PcloudStimulusBuffer& parent; // OpenCL infrastructure cl_platform_id platform; cl_device_id device; cl_context context; cl_command_queue commandQueue; cl_program program; cl_kernel kernel; bool isSetup; // OpenCL buffers cl_mem assemblyBuffer; cl_mem xyzBuffer; cl_mem intensityBuffer; }; } // namespace stim_buff } // namespace smo #endif // _LIVOX_GEN1_OPENCL_SPLITTING_ENGINE_H