summaryrefslogtreecommitdiff
path: root/debug_tools/WatchYourStep/ptxjitplus/inc/helper_gl.h
diff options
context:
space:
mode:
Diffstat (limited to 'debug_tools/WatchYourStep/ptxjitplus/inc/helper_gl.h')
-rw-r--r--debug_tools/WatchYourStep/ptxjitplus/inc/helper_gl.h191
1 files changed, 191 insertions, 0 deletions
diff --git a/debug_tools/WatchYourStep/ptxjitplus/inc/helper_gl.h b/debug_tools/WatchYourStep/ptxjitplus/inc/helper_gl.h
new file mode 100644
index 0000000..ff03a49
--- /dev/null
+++ b/debug_tools/WatchYourStep/ptxjitplus/inc/helper_gl.h
@@ -0,0 +1,191 @@
+/**
+ * Copyright 2014 NVIDIA Corporation. All rights reserved.
+ *
+ * Please refer to the NVIDIA end user license agreement (EULA) associated
+ * with this source code for terms and conditions that govern your use of
+ * this software. Any use, reproduction, disclosure, or distribution of
+ * this software and related documentation outside the terms of the EULA
+ * is strictly prohibited.
+ *
+ */
+
+// These are helper functions for the SDK samples (OpenGL)
+#ifndef HELPER_GL_H
+#define HELPER_GL_H
+
+#if defined(WIN32) || defined(_WIN32) || defined(WIN64) || defined(_WIN64)
+ #include <GL/glew.h>
+#endif
+
+#if defined(__APPLE__) || defined(MACOSX)
+ #include <OpenGL/gl.h>
+#else
+ #include <GL/gl.h>
+ #ifdef __linux__
+ #include <GL/glx.h>
+ #endif /* __linux__ */
+#endif
+
+#include <iostream>
+#include <string>
+#include <sstream>
+#include <algorithm>
+#include <iterator>
+#include <vector>
+#include <assert.h>
+
+
+/* Prototypes */
+namespace __HelperGL {
+ static int isGLVersionSupported(unsigned reqMajor, unsigned reqMinor);
+ static int areGLExtensionsSupported(const std::string &);
+#ifdef __linux__
+
+ #ifndef HELPERGL_EXTERN_GL_FUNC_IMPLEMENTATION
+ #define USE_GL_FUNC(name, proto) proto name = (proto) glXGetProcAddress ((const GLubyte *)#name)
+ #else
+ #define USE_GL_FUNC(name, proto) extern proto name
+ #endif
+
+ USE_GL_FUNC(glBindBuffer, PFNGLBINDBUFFERPROC);
+ USE_GL_FUNC(glDeleteBuffers, PFNGLDELETEBUFFERSPROC);
+ USE_GL_FUNC(glBufferData, PFNGLBUFFERDATAPROC);
+ USE_GL_FUNC(glBufferSubData, PFNGLBUFFERSUBDATAPROC);
+ USE_GL_FUNC(glGenBuffers, PFNGLGENBUFFERSPROC);
+ USE_GL_FUNC(glCreateProgram, PFNGLCREATEPROGRAMPROC);
+ USE_GL_FUNC(glBindProgramARB, PFNGLBINDPROGRAMARBPROC);
+ USE_GL_FUNC(glGenProgramsARB, PFNGLGENPROGRAMSARBPROC);
+ USE_GL_FUNC(glDeleteProgramsARB, PFNGLDELETEPROGRAMSARBPROC);
+ USE_GL_FUNC(glDeleteProgram, PFNGLDELETEPROGRAMPROC);
+ USE_GL_FUNC(glGetProgramInfoLog, PFNGLGETPROGRAMINFOLOGPROC);
+ USE_GL_FUNC(glGetProgramiv, PFNGLGETPROGRAMIVPROC);
+ USE_GL_FUNC(glProgramParameteriEXT, PFNGLPROGRAMPARAMETERIEXTPROC);
+ USE_GL_FUNC(glProgramStringARB, PFNGLPROGRAMSTRINGARBPROC);
+ USE_GL_FUNC(glUnmapBuffer, PFNGLUNMAPBUFFERPROC);
+ USE_GL_FUNC(glMapBuffer, PFNGLMAPBUFFERPROC);
+ USE_GL_FUNC(glGetBufferParameteriv, PFNGLGETBUFFERPARAMETERIVPROC);
+ USE_GL_FUNC(glLinkProgram, PFNGLLINKPROGRAMPROC);
+ USE_GL_FUNC(glUseProgram, PFNGLUSEPROGRAMPROC);
+ USE_GL_FUNC(glAttachShader, PFNGLATTACHSHADERPROC);
+ USE_GL_FUNC(glCreateShader, PFNGLCREATESHADERPROC);
+ USE_GL_FUNC(glShaderSource, PFNGLSHADERSOURCEPROC);
+ USE_GL_FUNC(glCompileShader, PFNGLCOMPILESHADERPROC);
+ USE_GL_FUNC(glDeleteShader, PFNGLDELETESHADERPROC);
+ USE_GL_FUNC(glGetShaderInfoLog, PFNGLGETSHADERINFOLOGPROC);
+ USE_GL_FUNC(glGetShaderiv, PFNGLGETSHADERIVPROC);
+ USE_GL_FUNC(glUniform1i, PFNGLUNIFORM1IPROC);
+ USE_GL_FUNC(glUniform1f, PFNGLUNIFORM1FPROC);
+ USE_GL_FUNC(glUniform2f, PFNGLUNIFORM2FPROC);
+ USE_GL_FUNC(glUniform3f, PFNGLUNIFORM3FPROC);
+ USE_GL_FUNC(glUniform4f, PFNGLUNIFORM4FPROC);
+ USE_GL_FUNC(glUniform1fv, PFNGLUNIFORM1FVPROC);
+ USE_GL_FUNC(glUniform2fv, PFNGLUNIFORM2FVPROC);
+ USE_GL_FUNC(glUniform3fv, PFNGLUNIFORM3FVPROC);
+ USE_GL_FUNC(glUniform4fv, PFNGLUNIFORM4FVPROC);
+ USE_GL_FUNC(glUniformMatrix4fv, PFNGLUNIFORMMATRIX4FVPROC);
+ USE_GL_FUNC(glSecondaryColor3fv, PFNGLSECONDARYCOLOR3FVPROC);
+ USE_GL_FUNC(glGetUniformLocation, PFNGLGETUNIFORMLOCATIONPROC);
+ USE_GL_FUNC(glGenFramebuffersEXT, PFNGLGENFRAMEBUFFERSEXTPROC);
+ USE_GL_FUNC(glBindFramebufferEXT, PFNGLBINDFRAMEBUFFEREXTPROC);
+ USE_GL_FUNC(glDeleteFramebuffersEXT, PFNGLDELETEFRAMEBUFFERSEXTPROC);
+ USE_GL_FUNC(glCheckFramebufferStatusEXT, PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC);
+ USE_GL_FUNC(glGetFramebufferAttachmentParameterivEXT, PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC);
+ USE_GL_FUNC(glFramebufferTexture1DEXT, PFNGLFRAMEBUFFERTEXTURE1DEXTPROC);
+ USE_GL_FUNC(glFramebufferTexture2DEXT, PFNGLFRAMEBUFFERTEXTURE2DEXTPROC);
+ USE_GL_FUNC(glFramebufferTexture3DEXT, PFNGLFRAMEBUFFERTEXTURE3DEXTPROC);
+ USE_GL_FUNC(glGenerateMipmapEXT, PFNGLGENERATEMIPMAPEXTPROC);
+ USE_GL_FUNC(glGenRenderbuffersEXT, PFNGLGENRENDERBUFFERSEXTPROC);
+ USE_GL_FUNC(glDeleteRenderbuffersEXT, PFNGLDELETERENDERBUFFERSEXTPROC);
+ USE_GL_FUNC(glBindRenderbufferEXT, PFNGLBINDRENDERBUFFEREXTPROC);
+ USE_GL_FUNC(glRenderbufferStorageEXT, PFNGLRENDERBUFFERSTORAGEEXTPROC);
+ USE_GL_FUNC(glFramebufferRenderbufferEXT, PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC);
+ USE_GL_FUNC(glClampColorARB, PFNGLCLAMPCOLORARBPROC);
+ USE_GL_FUNC(glBindFragDataLocationEXT, PFNGLBINDFRAGDATALOCATIONEXTPROC);
+
+#ifndef GLX_EXTENSION_NAME
+ USE_GL_FUNC(glActiveTexture, PFNGLACTIVETEXTUREPROC);
+ USE_GL_FUNC(glClientActiveTexture, PFNGLACTIVETEXTUREPROC);
+#endif
+
+ #undef USE_GL_FUNC
+#endif /*__linux__ */
+}
+
+
+namespace __HelperGL {
+ namespace __Int {
+ static std::vector<std::string> split(const std::string &str)
+ {
+ std::istringstream ss(str);
+ std::istream_iterator<std::string> it(ss);
+ return std::vector<std::string> (it, std::istream_iterator<std::string>());
+ }
+
+ /* Sort the vector passed by reference */
+ template<typename T> static inline void sort(std::vector<T> &a)
+ {
+ std::sort(a.begin(), a.end());
+ }
+
+ /* Compare two vectors */
+ template<typename T> static int equals(std::vector<T> a, std::vector<T> b)
+ {
+ if (a.size() != b.size()) return 0;
+ sort(a);
+ sort(b);
+
+ return std::equal(a.begin(), a.end(), b.begin());
+ }
+
+ template<typename T> static std::vector<T> getIntersection(std::vector<T> a, std::vector<T> b)
+ {
+ sort(a);
+ sort(b);
+
+ std::vector<T> rc;
+ std::set_intersection(a.begin(), a.end(), b.begin(), b.end(),
+ std::back_inserter<std::vector<std::string> >(rc));
+ return rc;
+ }
+
+ static std::vector<std::string> getGLExtensions()
+ {
+ std::string extensionsStr( (const char *)glGetString(GL_EXTENSIONS));
+ return split (extensionsStr);
+ }
+ }
+
+ static int areGLExtensionsSupported(const std::string &extensions)
+ {
+ std::vector<std::string> all = __Int::getGLExtensions();
+
+ std::vector<std::string> requested = __Int::split(extensions);
+ std::vector<std::string> matched = __Int::getIntersection(all, requested);
+
+ return __Int::equals(matched, requested);
+ }
+
+ static int isGLVersionSupported(unsigned reqMajor, unsigned reqMinor)
+ {
+#if defined(WIN32) || defined(_WIN32) || defined(WIN64) || defined(_WIN64)
+ if (glewInit() != GLEW_OK)
+ {
+ std::cerr << "glewInit() failed!" << std::endl;
+ return 0;
+ }
+#endif
+ std::string version ((const char *) glGetString (GL_VERSION));
+ std::stringstream stream (version);
+ unsigned major, minor;
+ char dot;
+
+ stream >> major >> dot >> minor;
+
+ assert (dot == '.');
+ return major > reqMajor || (major == reqMajor && minor >= reqMinor);
+ }
+} /* of namespace __HelperGL*/
+
+using namespace __HelperGL;
+
+#endif /*HELPER_GL_H*/