aboutsummaryrefslogtreecommitdiff
path: root/Gem/develop/include/Gem/Utils/GLUtil.h
diff options
context:
space:
mode:
authorTravis CI <zmoelnig@travis-ci.umlaeute.mur.at>2015-03-14 20:40:49 +0000
committerTravis CI <zmoelnig@travis-ci.umlaeute.mur.at>2015-03-14 20:40:49 +0000
commit5c694f159b012d1d94bf15bfe580dec52e4fe797 (patch)
treece400f82d72f92189c50f54afa11c568cda53562 /Gem/develop/include/Gem/Utils/GLUtil.h
Gem osx/x86_64
built '' for osx/x86_64
Diffstat (limited to 'Gem/develop/include/Gem/Utils/GLUtil.h')
-rw-r--r--Gem/develop/include/Gem/Utils/GLUtil.h100
1 files changed, 100 insertions, 0 deletions
diff --git a/Gem/develop/include/Gem/Utils/GLUtil.h b/Gem/develop/include/Gem/Utils/GLUtil.h
new file mode 100644
index 0000000..c550c07
--- /dev/null
+++ b/Gem/develop/include/Gem/Utils/GLUtil.h
@@ -0,0 +1,100 @@
+/*-----------------------------------------------------------------
+LOG
+ GEM - Graphics Environment for Multimedia
+
+ GemGLUtil.h
+ - contains functions for graphics
+ - part of GEM
+
+ Copyright (c) 1997-2000 Mark Danks. mark@danks.org
+ Copyright (c) Günther Geiger. geiger@epy.co.at
+ Copyright (c) 2001-2011 IOhannes m zmölnig. forum::für::umläute. IEM. zmoelnig@iem.at
+ For information on usage and redistribution, and for a DISCLAIMER OF ALL
+ WARRANTIES, see the file, "GEM.LICENSE.TERMS" in this distribution.
+
+-----------------------------------------------------------------*/
+
+#ifndef _INCLUDE__GEM_UTILS_GLUTIL_H_
+#define _INCLUDE__GEM_UTILS_GLUTIL_H_
+
+#include "Gem/ExportDef.h"
+
+/* for t_symbol/t_atom */
+/* LATER get rid of that (std::string) */
+struct _atom;
+struct _symbol;
+#include <string>
+
+/* for GLenum */
+#include "Gem/GemGL.h"
+#include "Gem/Exception.h"
+
+
+namespace gem {namespace utils {namespace gl {
+GEM_EXTERN extern GLenum glReportError (bool verbose=true);
+GEM_EXTERN extern int getGLdefine(const char *name);
+GEM_EXTERN extern int getGLdefine(const struct _symbol *name);
+GEM_EXTERN extern int getGLdefine(const struct _atom *name);
+GEM_EXTERN extern int getGLbitfield(int argc, struct _atom *argv);
+
+
+
+ /* mapping between GLSL-program IDs and float */
+ /* this can also return different IDs for different contexts */
+ class GEM_EXTERN GLuintMap {
+ public:
+ GLuintMap(const std::string&name);
+ virtual ~GLuintMap();
+ GLuint get(float) throw(GemException&);
+ /* map a GLuint to float; if float is 0, the new mapping is created,
+ * else we just update an existing one
+ * updating is especially useful with multiple contexts */
+ float set(GLuint, float f=0);
+
+ void del(float);
+
+
+ /* usage:
+ mapper=GLuintMap("glsl_program");
+ prog=glCreateProgram();
+ progMapped=mapper.set(prog);
+ // for multi-context, you probably want to have a single float map to multiple
+ // programIDs; you add (or update) an existing mapping with:
+ // progMapped=mapper.set(prog, progMapped));
+ outlet_float(m_out, mapper.get(progMapped));
+
+ // ... somewhere else
+ mapper=GLuintMap("glsl_program");
+ GLuint id = mapper.get(atom_getfloat(ap));
+ */
+
+ /* multi-context:
+ mapper=GLuintMap("glsl_program");
+ float progF=0;
+ switchContext(A);
+ prog=glCreateProgram();
+ progF=mapper.set(prog, progF);
+ print(prog,progF); // "3" "3.1415"
+ switchContext(B);
+ prog=glCreateProgram();
+ progF=mapper.set(prog, progF);
+ print(prog,progF); // "6" "3.1415"
+
+ // ...somewhere else
+ mapper=GLuintMap("glsl_program");
+ prog=mapper.get(progF);
+ print(prog,progF); // "3" "3.1415"
+ switchContext(B);
+ prog=mapper.get(progF);
+ print(prog,progF); // "6" "3.1415"
+ */
+ private:
+ struct PIMPL;
+ PIMPL*m_pimpl;
+ GLuintMap();
+ GLuintMap&operator=(const GLuintMap&);
+ };
+};};}; /* namespace */
+
+#endif // for header file
+