From 06f80802e68fa0148c1674ddffb460b4402a0eb2 Mon Sep 17 00:00:00 2001
From: Marco Biasini <marco.biasini@unibas.ch>
Date: Sun, 4 Jul 2010 12:52:06 +0200
Subject: [PATCH] fix compilation on MacOS X with shaders enabled

MacOS X doesn't require the use of glew as all of the OpenGL extensions
are already defined in the GL.h header file. I introduced a macro that
is set to GLEW_VERSION_2_0 for all non-apple systems and defaults to
true on MacOS X. This is safe, since all systems we support have at
least OpenGL 2.0.
---
 modules/gfx/src/glext_include.hh |  7 +++++++
 modules/gfx/src/impl/scene_fx.cc |  8 ++++----
 modules/gfx/src/scene.cc         | 12 ++++++------
 modules/gfx/src/shader.cc        | 14 +++++++-------
 4 files changed, 24 insertions(+), 17 deletions(-)

diff --git a/modules/gfx/src/glext_include.hh b/modules/gfx/src/glext_include.hh
index b297153e2..3eda5fb9a 100644
--- a/modules/gfx/src/glext_include.hh
+++ b/modules/gfx/src/glext_include.hh
@@ -42,4 +42,11 @@
 
 #include <ost/gfx/gl_include.hh>
 
+#if defined(__APPLE__)
+// On all MacOS X version we support, OpenGL 2.0 is available, so it's safe to 
+// hardcode the value here...
+#define OST_GL_VERSION_2_0 1
+#else
+#define OST_GL_VERSION_2_0 GLEW_VERSION_2_0
+#endif
 #endif
diff --git a/modules/gfx/src/impl/scene_fx.cc b/modules/gfx/src/impl/scene_fx.cc
index bb3012e88..16d6c426f 100644
--- a/modules/gfx/src/impl/scene_fx.cc
+++ b/modules/gfx/src/impl/scene_fx.cc
@@ -61,7 +61,7 @@ SceneFX::~SceneFX()
 
 void SceneFX::Setup()
 {
-  if(!GLEW_VERSION_2_0) return;
+  if(!OST_GL_VERSION_2_0) return;
   LOGN_DEBUG("SceneFX: setup");
 
   glGenTextures(1,&scene_tex_id_);
@@ -213,7 +213,7 @@ void SceneFX::Resize(unsigned int w, unsigned int h)
 
 void SceneFX::Preprocess() 
 {
-  if(!GLEW_VERSION_2_0) return;
+  if(!OST_GL_VERSION_2_0) return;
   if(use_fb_) {
 #if GL_VERSION_3_0
     glBindFramebuffer(GL_FRAMEBUFFER, scene_fb_);
@@ -225,7 +225,7 @@ void SceneFX::Preprocess()
 
 void SceneFX::Postprocess()
 {
-  if(!GLEW_VERSION_2_0) return;
+  if(!OST_GL_VERSION_2_0) return;
   if(use_fb_) {
 #if GL_VERSION_3_0
     glBindFramebuffer(GL_FRAMEBUFFER, 0);
@@ -354,7 +354,7 @@ void SceneFX::Postprocess()
 
 void SceneFX::DrawTex(unsigned int w, unsigned int h, GLuint texid)
 {
-  if(!GLEW_VERSION_2_0) return;
+  if(!OST_GL_VERSION_2_0) return;
   Shader::Instance().PushProgram();
   Shader::Instance().Activate("");
   glActiveTexture(GL_TEXTURE0);
diff --git a/modules/gfx/src/scene.cc b/modules/gfx/src/scene.cc
index 886da10c8..a85d58503 100644
--- a/modules/gfx/src/scene.cc
+++ b/modules/gfx/src/scene.cc
@@ -373,7 +373,7 @@ void Scene::InitGL(bool full)
 
 #if OST_SHADER_SUPPORT_ENABLED
   GLint mbufs=0,msamples=0;
-  if(GLEW_VERSION_2_0) {
+  if(OST_GL_VERSION_2_0) {
     glGetIntegerv(GL_SAMPLE_BUFFERS, &mbufs);
     glGetIntegerv(GL_SAMPLES, &msamples);
   }
@@ -427,7 +427,7 @@ void Scene::InitGL(bool full)
 
   glEnable(GL_TEXTURE_2D);
 #if OST_SHADER_SUPPORT_ENABLED
-  if(GLEW_VERSION_2_0) {
+  if(OST_GL_VERSION_2_0) {
     glActiveTexture(GL_TEXTURE0);
   }
 #endif
@@ -1831,7 +1831,7 @@ void Scene::render_stereo()
 
   glEnable(GL_TEXTURE_2D);
 #if OST_SHADER_SUPPORT_ENABLED
-  if(GLEW_VERSION_2_0) {
+  if(OST_GL_VERSION_2_0) {
     glActiveTexture(GL_TEXTURE0);
   }
 #endif
@@ -1843,7 +1843,7 @@ void Scene::render_stereo()
   render_scene();
   glEnable(GL_TEXTURE_2D);
 #if OST_SHADER_SUPPORT_ENABLED
-  if(GLEW_VERSION_2_0) {
+  if(OST_GL_VERSION_2_0) {
     glActiveTexture(GL_TEXTURE0);
   }
 #endif
@@ -1905,7 +1905,7 @@ void Scene::render_stereo()
     glStencilFunc(GL_EQUAL,0x0,0x1);
   }
 #if OST_SHADER_SUPPORT_ENABLED
-  if(GLEW_VERSION_2_0) {
+  if(OST_GL_VERSION_2_0) {
     glActiveTexture(GL_TEXTURE0);
   }
 #endif
@@ -1927,7 +1927,7 @@ void Scene::render_stereo()
     glStencilFunc(GL_EQUAL,0x1,0x1);
   }
 #if OST_SHADER_SUPPORT_ENABLED
-  if(GLEW_VERSION_2_0) {
+  if(OST_GL_VERSION_2_0) {
     glActiveTexture(GL_TEXTURE0);
   }
 #endif
diff --git a/modules/gfx/src/shader.cc b/modules/gfx/src/shader.cc
index db8e0558a..01674489b 100644
--- a/modules/gfx/src/shader.cc
+++ b/modules/gfx/src/shader.cc
@@ -50,7 +50,7 @@ Shader::Shader():
   shader_code_map_(),
   shader_program_map_()
 {
-  if(!GLEW_VERSION_2_0) {
+  if(!OST_GL_VERSION_2_0) {
     LOGN_VERBOSE("OpenGL version smaller 2.0, deactivating shader functionality");
   }
 }
@@ -124,7 +124,7 @@ bool link_shader(const std::vector<GLuint>& code_list, String pr_name, GLuint& s
 
 void Shader::Setup() 
 {
-  if(!GLEW_VERSION_2_0) return;
+  if(!OST_GL_VERSION_2_0) return;
 
   String ost_root = GetSharedDataPath();
   bf::path ost_root_dir(ost_root);
@@ -303,7 +303,7 @@ void Shader::Setup()
 
 void Shader::Activate(const String& name)
 {
-  if(!GLEW_VERSION_2_0) return;
+  if(!OST_GL_VERSION_2_0) return;
 
   if(!name.empty()) {
     std::map<String, GLuint>::iterator it = shader_program_map_.find(name);
@@ -339,7 +339,7 @@ String Shader::GetCurrentName() const
 
 bool Shader::IsValid() const
 {
-  if(!GLEW_VERSION_2_0) return false;
+  if(!OST_GL_VERSION_2_0) return false;
   return valid_;
 }
 
@@ -350,13 +350,13 @@ bool Shader::IsActive() const
 
 void Shader::PushProgram()
 {
-  if(!GLEW_VERSION_2_0) return;
+  if(!OST_GL_VERSION_2_0) return;
   program_stack_.push(current_name_);
 }
 
 void Shader::PopProgram()
 {
-  if(!GLEW_VERSION_2_0) return;
+  if(!OST_GL_VERSION_2_0) return;
   if(!program_stack_.empty()) {
     current_name_ = program_stack_.top();
     program_stack_.pop();
@@ -366,7 +366,7 @@ void Shader::PopProgram()
 
 void Shader::UpdateState()
 {
-  if(!GLEW_VERSION_2_0) return;
+  if(!OST_GL_VERSION_2_0) return;
   if(current_program_!=0) {
     // update all settings
     GLint result;
-- 
GitLab