3 #if defined(HAVE_OPENCL) && (!defined(__APPLE__) || defined(IOS))
5 #include "opencv2/ocl/cl_runtime/cl_runtime.hpp"
10 static void* AppleCLGetProcAddress(const char* name)
12 static void * image = NULL;
15 image = dlopen("/System/Library/Frameworks/OpenCL.framework/Versions/Current/OpenCL", RTLD_LAZY | RTLD_GLOBAL);
20 return dlsym(image, name);
22 #define CV_CL_GET_PROC_ADDRESS(name) AppleCLGetProcAddress(name)
26 static void* WinGetProcAddress(const char* name)
28 static HMODULE opencl_module = NULL;
31 opencl_module = GetModuleHandleA("OpenCL.dll");
34 const char* name = "OpenCL.dll";
35 const char* envOpenCLBinary = getenv("OPENCV_OPENCL_BINARY");
37 name = envOpenCLBinary;
38 opencl_module = LoadLibraryA(name);
43 return (void*)GetProcAddress(opencl_module, name);
45 #define CV_CL_GET_PROC_ADDRESS(name) WinGetProcAddress(name)
52 static void* GetProcAddress (const char* name)
54 static void* h = NULL;
57 const char* name = "libOpenCL.so";
58 const char* envOpenCLBinary = getenv("OPENCV_OPENCL_BINARY");
60 name = envOpenCLBinary;
61 h = dlopen(name, RTLD_LAZY | RTLD_GLOBAL);
66 return dlsym(h, name);
68 #define CV_CL_GET_PROC_ADDRESS(name) GetProcAddress(name)
71 #ifndef CV_CL_GET_PROC_ADDRESS
72 #define CV_CL_GET_PROC_ADDRESS(name) NULL
75 static void* opencl_check_fn(int ID)
77 extern const char* opencl_fn_names[];
78 void* func = CV_CL_GET_PROC_ADDRESS(opencl_fn_names[ID]);
81 std::ostringstream msg;
82 msg << "OpenCL function is not available: [" << opencl_fn_names[ID] << "]";
83 CV_Error(CV_StsBadFunc, msg.str());
85 extern void* opencl_fn_ptrs[];
86 *(void**)(opencl_fn_ptrs[ID]) = func;
90 #if defined(HAVE_OPENCL12)
91 #include "cl_runtime_opencl12_impl.hpp"
92 #elif defined(HAVE_OPENCL11)
93 #include "cl_runtime_opencl11_impl.hpp"
95 #error Invalid OpenCL configuration