#include "boring_parts.hpp" // TODO : only need OpenGL things, not GTK ones for now //#include "gtk_includes.hpp" #define RETURN_IF_FAIL(expr) do { \ int res=(expr); \ if ( res != 0 ) return res; \ } while(0) // TODO : print streamsdk::getOpenCLErrorCodeStr(res) #define CL_RETURN_VAL_IF_FAIL(val, expr) do { \ cl_int res=(expr); \ if ( res != CL_SUCCESS ) { \ std::cerr << "file " << __FILE__ << ": line " << __LINE__ << " (" << __PRETTY_FUNCTION__ \ << "): '" << "expr" << "' failed (return code : " << res << ")" << std::endl; \ return val; \ } \ } while(0) /* From http://stackoverflow.com/questions/4317062/opengl-how-to-check-if-the-user-supports-glgenbuffers #ifndef STRINGIFY #define STRINGIFY(x) #x #endif #ifdef WIN32 #include #define glGetProcAddress(a) wglGetProcAddress(a) #endif #ifdef X11 #define glGetProcAddress(a) glXGetProcAddress ( \ reinterpret_cast(a) \ ) #endif #ifndef GetExtension #define GetExtension(Type, ExtenName) \ ExtenName = (Type) \ glGetProcAddress(STRINGIFY(ExtenName)); \ if(!ExtenName) \ { \ std:cout << "Your Computer Does Not " \ << "Support GL Extension: " \ << STRINGIFY(ExtenName) \ << std::endl; \ exit(1); \ } \ else \ { \ std::cout << "Loaded Extension: " \ << STRINGIFY(ExtenName) \ << std::endl; \ } #endif */ #ifdef HAS_OPENCL int initOpenCL(intptr_t gl_display, intptr_t gl_context, intptr_t gl_vbo) { cl_uint id, numPlatforms; char pbuf[100]; std::string dTypeStr; cl_platform_id *platforms, platform; cl_device_id /* *devices, */device; cl_context cl_ctx; cl_command_queue cl_commandQueue; bool usableDeviceFound=false; // Get platform count CL_RETURN_VAL_IF_FAIL(1, clGetPlatformIDs(0, NULL, &numPlatforms) ); std::cout << "Detected " << numPlatforms << " platform(s)" << std::endl; if ( ! ( numPlatforms > 0 ) ) return 2; // Allocate room for all platform IDs platforms = new cl_platform_id[numPlatforms]; // Get platform IDs CL_RETURN_VAL_IF_FAIL(3, clGetPlatformIDs(numPlatforms, platforms, &numPlatforms) ); // Enumerate platforms and grab informations for(id=0;id glCtx, Glib::RefPtr glWin, int width, int height) { GLdouble aspect = (GLdouble) width/height; // *** OpenGL BEGIN *** if (!glWin->gl_begin(glCtx)) return false; glViewport(0, 0, width, height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(60.0, aspect, 0.1, 10.0); glMatrixMode(GL_MODELVIEW); glWin->gl_end(); // *** OpenGL END *** return true; }