00001 #ifndef _MACHINE_H_NOU_ 00002 #define _MACHINE_H_NOU_ 00003 00004 #include <iostream> 00005 #include <vector> 00006 #include <CL/cl.h> 00007 #include <GL/gl.h> 00008 #include <GL/glx.h> 00009 #include "clutility.h" 00010 #include "model.h" 00011 00012 using namespace std; 00013 00014 typedef vector<cl_device_id> cl_device_v; 00015 typedef vector<cl_platform_id> cl_platform_v; 00016 00017 class Machine 00018 { 00019 private: 00020 cl_context context; 00021 cl_device_v device; 00022 vector<cl_command_queue> queues; 00023 vector<Model*> models; 00024 size_t local_work_size; 00025 void init(cl_context_properties *cl_properties, cl_device_v &devices); 00026 public: 00027 Machine(int platform_index = 0, cl_device_v devices = cl_device_v()); 00028 Machine(cl_context_properties gl_context, cl_context_properties display, int platform_index = 0, cl_device_v devices = cl_device_v()); 00029 ~Machine(); 00030 static cl_platform_v getPlatforms(); 00031 static cl_device_v getDevices(cl_platform_id platform_id, cl_device_type type = CL_DEVICE_TYPE_ALL); 00032 void run(cl_kernel kernel, size_t w, size_t h); 00033 void addChild(Model *child); 00034 void removeChild(Model *child); 00035 void finish(); 00036 void setBarrier(); 00037 cl_context getContext(); 00038 protected: 00039 }; 00040 00041 #endif