fixed build with CUDA and witout OpenGL

pull/258/merge
Vladislav Vinogradov 13 years ago
parent 0d880479f0
commit c6263eb253
  1. 65
      modules/core/src/gl_core_3_1.cpp
  2. 23
      modules/core/src/opengl_interop.cpp

@ -1,14 +1,14 @@
#include "cvconfig.h"
#ifdef HAVE_OPENGL
#include <string> #include <string>
#include <sstream>
#include "cvconfig.h"
#include "opencv2/core/core.hpp"
#include "gl_core_3_1.hpp" #include "gl_core_3_1.hpp"
#if defined(__APPLE__) #ifdef HAVE_OPENGL
#if defined(__APPLE__)
#include <mach-o/dyld.h> #include <mach-o/dyld.h>
static void* AppleGLGetProcAddress (const GLubyte *name) static void* AppleGLGetProcAddress (const char* name)
{ {
static const struct mach_header* image = 0; static const struct mach_header* image = 0;
if (!image) if (!image)
@ -16,19 +16,19 @@
// prepend a '_' for the Unix C symbol mangling convention // prepend a '_' for the Unix C symbol mangling convention
std::string symbolName = "_"; std::string symbolName = "_";
symbolName += std::string((const char*)name); symbolName += std::string(name);
NSSymbol symbol = image ? NSLookupSymbolInImage(image, &symbolName[0], NSLOOKUPSYMBOLINIMAGE_OPTION_BIND | NSLOOKUPSYMBOLINIMAGE_OPTION_RETURN_ON_ERROR) : 0; NSSymbol symbol = image ? NSLookupSymbolInImage(image, &symbolName[0], NSLOOKUPSYMBOLINIMAGE_OPTION_BIND | NSLOOKUPSYMBOLINIMAGE_OPTION_RETURN_ON_ERROR) : 0;
return symbol ? NSAddressOfSymbol(symbol) : 0; return symbol ? NSAddressOfSymbol(symbol) : 0;
} }
#endif // __APPLE__ #endif // __APPLE__
#if defined(__sgi) || defined (__sun) #if defined(__sgi) || defined (__sun)
#include <dlfcn.h> #include <dlfcn.h>
#include <stdio.h> #include <stdio.h>
static void* SunGetProcAddress (const GLubyte* name) static void* SunGetProcAddress (const char* name)
{ {
typedef void* (func_t*)(const GLubyte*); typedef void* (func_t*)(const GLubyte*);
@ -43,11 +43,11 @@
gpa = (func_t) dlsym(h, "glXGetProcAddress"); gpa = (func_t) dlsym(h, "glXGetProcAddress");
} }
return gpa ? gpa(name) : dlsym(h, (const char*) name); return gpa ? gpa((const GLubyte*) name) : dlsym(h, name);
} }
#endif /* __sgi || __sun */ #endif // __sgi || __sun
#if defined(_WIN32) #if defined(_WIN32)
#ifdef _MSC_VER #ifdef _MSC_VER
#pragma warning(disable: 4055) #pragma warning(disable: 4055)
#pragma warning(disable: 4054) #pragma warning(disable: 4054)
@ -75,20 +75,37 @@
HMODULE glMod = GetModuleHandleA("OpenGL32.dll"); HMODULE glMod = GetModuleHandleA("OpenGL32.dll");
return (PROC) GetProcAddress(glMod, (LPCSTR) name); return (PROC) GetProcAddress(glMod, (LPCSTR) name);
} }
#endif // _WIN32
#define IntGetProcAddress(name) WinGetProcAddress(name) #if defined(_WIN32)
#else #define CV_GL_GET_PROC_ADDRESS(name) WinGetProcAddress(name)
#if defined(__APPLE__) #elif defined(__APPLE__)
#define IntGetProcAddress(name) AppleGLGetProcAddress(name) #define CV_GL_GET_PROC_ADDRESS(name) AppleGLGetProcAddress(name)
#else #elif defined(__sgi) || defined(__sun)
#if defined(__sgi) || defined(__sun) #define CV_GL_GET_PROC_ADDRESS(name) SunGetProcAddress(name)
#define IntGetProcAddress(name) SunGetProcAddress(name) #else // GLX
#else /* GLX */
#include <GL/glx.h> #include <GL/glx.h>
#define IntGetProcAddress(name) (*glXGetProcAddressARB)((const GLubyte*) name) #define CV_GL_GET_PROC_ADDRESS(name) (*glXGetProcAddressARB)((const GLubyte*) name)
#endif
#endif #endif
static void* IntGetProcAddress(const char* name)
{
void* func = CV_GL_GET_PROC_ADDRESS(name);
if (!func)
{
std::ostringstream msg;
msg << "Can't load OpenGL extension [" << name << "]";
CV_Error(CV_OpenGlApiCallError, msg.str());
}
return func;
}
#else
static void* IntGetProcAddress(const char*)
{
CV_Error(CV_OpenGlNotSupported, "The library is compiled without OpenGL support");
return 0;
}
#endif #endif
namespace gl namespace gl
@ -2699,5 +2716,3 @@ namespace gl
InitializeVariables g_initVariables; InitializeVariables g_initVariables;
} }
#endif

@ -44,13 +44,11 @@
#include "opencv2/core/opengl_interop.hpp" #include "opencv2/core/opengl_interop.hpp"
#include "opencv2/core/gpumat.hpp" #include "opencv2/core/gpumat.hpp"
#ifdef HAVE_OPENGL #include "gl_core_3_1.hpp"
#include "gl_core_3_1.hpp"
#ifdef HAVE_CUDA #ifdef HAVE_CUDA
#include <cuda_runtime.h> #include <cuda_runtime.h>
#include <cuda_gl_interop.h> #include <cuda_gl_interop.h>
#endif
#endif #endif
using namespace std; using namespace std;
@ -59,6 +57,12 @@ using namespace cv::gpu;
namespace namespace
{ {
#ifndef HAVE_OPENGL
void throw_nogl() { CV_Error(CV_OpenGlNotSupported, "The library is compiled without OpenGL support"); }
#else
void throw_nogl() { CV_Error(CV_OpenGlApiCallError, "OpenGL context doesn't exist"); }
#endif
#ifndef HAVE_CUDA #ifndef HAVE_CUDA
void throw_nocuda() { CV_Error(CV_GpuNotSupported, "The library is compiled without GPU support"); } void throw_nocuda() { CV_Error(CV_GpuNotSupported, "The library is compiled without GPU support"); }
#else #else
@ -76,12 +80,6 @@ namespace
cv::gpu::error(cudaGetErrorString(err), file, line, func); cv::gpu::error(cudaGetErrorString(err), file, line, func);
} }
#endif #endif
#ifndef HAVE_OPENGL
void throw_nogl() { CV_Error(CV_OpenGlNotSupported, "The library is compiled without OpenGL support"); }
#else
void throw_nogl() { CV_Error(CV_OpenGlApiCallError, "OpenGL context doesn't exist"); }
#endif
} }
bool cv::checkGlError(const char* file, const int line, const char* func) bool cv::checkGlError(const char* file, const int line, const char* func)
@ -145,12 +143,7 @@ void cv::gpu::setGlDevice(int device)
(void) device; (void) device;
throw_nocuda(); throw_nocuda();
#else #else
#ifndef HAVE_OPENGL
(void) device;
throw_nogl();
#else
cudaSafeCall( cudaGLSetGLDevice(device) ); cudaSafeCall( cudaGLSetGLDevice(device) );
#endif
#endif #endif
} }

Loading…
Cancel
Save