diff options
author | Marius Kintel <marius@kintel.net> | 2013-03-28 03:55:51 (GMT) |
---|---|---|
committer | Marius Kintel <marius@kintel.net> | 2013-03-28 03:55:51 (GMT) |
commit | eefcd6d0b271642d470cd55bc47d1579d943938e (patch) | |
tree | 48f9e4db455879025adb9317b740bfa4b72c2d66 /src/system-gl.cc | |
parent | f70578f362c8c2c78036c9de846c20802ac7aa81 (diff) | |
parent | beff2b1f4811b7f9d2b58bfc6a469a363bc9bfd0 (diff) |
Merge branch 'master' into epec-kernel
Conflicts:
src/PolySetCGALEvaluator.cc
Diffstat (limited to 'src/system-gl.cc')
-rw-r--r-- | src/system-gl.cc | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/src/system-gl.cc b/src/system-gl.cc new file mode 100644 index 0000000..0c436e5 --- /dev/null +++ b/src/system-gl.cc @@ -0,0 +1,89 @@ + +/* OpenGL helper functions */ + +#include <algorithm> +#include <iostream> +#include <vector> +#include <sstream> +#include <string> +#include "system-gl.h" +#include <boost/algorithm/string.hpp> +#include <boost/format.hpp> + +using namespace std; +using namespace boost; + +double gl_version() +{ + string tmp((const char*)glGetString( GL_VERSION )); + vector<string> strs; + split(strs, tmp, is_any_of(".")); + stringstream out; + if ( strs.size() >= 2) + out << strs[0] << "." << strs[1]; + else + out << "0.0"; + double d; + out >> d; + return d; +} + +string glew_extensions_dump() +{ + std::string tmp; + if ( gl_version() >= 3.0 ) { + GLint numexts = 0; + glGetIntegerv(GL_NUM_EXTENSIONS, &numexts); + for ( int i=0;i<numexts;i++ ) { + tmp += (const char *) glGetStringi(GL_EXTENSIONS, i); + tmp += " "; + } + } else { + tmp = (const char *) glGetString(GL_EXTENSIONS); + } + vector<string> extensions; + split( extensions, tmp, is_any_of(" ")); + sort( extensions.begin(), extensions.end() ); + stringstream out; + out << "GL Extensions:"; + for ( int i=0;i<extensions.size();i++ ) out << extensions[i] << "\n"; + return out.str(); +} + +string glew_dump() +{ + GLint rbits, gbits, bbits, abits, dbits, sbits; + glGetIntegerv(GL_RED_BITS, &rbits); + glGetIntegerv(GL_GREEN_BITS, &gbits); + glGetIntegerv(GL_BLUE_BITS, &bbits); + glGetIntegerv(GL_ALPHA_BITS, &abits); + glGetIntegerv(GL_DEPTH_BITS, &dbits); + glGetIntegerv(GL_STENCIL_BITS, &sbits); + + stringstream out; + out << "GLEW version: " << glewGetString(GLEW_VERSION) + << "\nOpenGL Version: " << (const char *)glGetString(GL_VERSION) + << "\nGL Renderer: " << (const char *)glGetString(GL_RENDERER) + << "\nGL Vendor: " << (const char *)glGetString(GL_VENDOR) + << boost::format("\nRGBA(%d%d%d%d), depth(%d), stencil(%d)") % + rbits % gbits % bbits % abits % dbits % sbits; + out << "\nGL_ARB_framebuffer_object: " + << (glewIsSupported("GL_ARB_framebuffer_object") ? "yes" : "no") + << "\nGL_EXT_framebuffer_object: " + << (glewIsSupported("GL_EXT_framebuffer_object") ? "yes" : "no") + << "\nGL_EXT_packed_depth_stencil: " + << (glewIsSupported("GL_EXT_packed_depth_stencil") ? "yes" : "no") + << "\n"; + return out.str(); +}; + +bool report_glerror(const char * function) +{ + GLenum tGLErr = glGetError(); + if (tGLErr != GL_NO_ERROR) { + cerr << "OpenGL error 0x" << hex << tGLErr << ": " << gluErrorString(tGLErr) << " after " << function << endl; + return true; + } + return false; +} + |