From 2058e022e22d69d42626990d74b63019c334c4e0 Mon Sep 17 00:00:00 2001 From: Ansgar Philippsen <ansgar.philippsen@gmail.com> Date: Fri, 28 Dec 2012 14:11:57 -0500 Subject: [PATCH] workaround for glPushAttrib / multisample bug --- modules/gfx/src/scene.cc | 39 ++++++++++++++++++++++++++------------- modules/gfx/src/scene.hh | 3 +++ 2 files changed, 29 insertions(+), 13 deletions(-) diff --git a/modules/gfx/src/scene.cc b/modules/gfx/src/scene.cc index aaff9c1e9..5840c68a1 100644 --- a/modules/gfx/src/scene.cc +++ b/modules/gfx/src/scene.cc @@ -141,6 +141,7 @@ Scene::Scene(): bg_grad_(), bg_bm_(), bg_tex_(), + ms_flag_(false), export_aspect_(1.0), show_export_aspect_(false) { @@ -477,7 +478,9 @@ void Scene::InitGL(bool full) glDisable(GL_POINT_SMOOTH); glDisable(GL_POLYGON_SMOOTH); glEnable(GL_MULTISAMPLE); + ms_flag_=true; } else { + ms_flag_=false; glEnable(GL_LINE_SMOOTH); glDisable(GL_POINT_SMOOTH); glDisable(GL_POLYGON_SMOOTH); @@ -2067,21 +2070,26 @@ namespace { glTexCoord2f(1.0,1.0); glVertex2i(vp_width_,vp_height_); glTexCoord2f(1.0,0.0); glVertex2i(vp_width_,0); glEnd(); - } - - ~ViewportRenderer() { - glBindTexture(GL_TEXTURE_2D, 0); - glDisable(GL_TEXTURE_2D); - glMatrixMode(GL_PROJECTION); - glPopMatrix(); - glMatrixMode(GL_MODELVIEW); - glPopMatrix(); - glPopClientAttrib(); - glPopAttrib(); + } + + ~ViewportRenderer() { + glBindTexture(GL_TEXTURE_2D, 0); + glDisable(GL_TEXTURE_2D); + glMatrixMode(GL_PROJECTION); + glPopMatrix(); + glMatrixMode(GL_MODELVIEW); + glPopMatrix(); + glPopClientAttrib(); + glPopAttrib(); +#if defined(OST_GL_VERSION_2_0) + if(Scene::Instance().HasMultisample()) { + glEnable(GL_MULTISAMPLE); + } +#endif #if OST_SHADER_SUPPORT_ENABLED - Shader::Instance().PopProgram(); + Shader::Instance().PopProgram(); #endif - } + } }; } @@ -2480,6 +2488,11 @@ void Scene::render_stereo() glPopMatrix(); glPopClientAttrib(); glPopAttrib(); +#if defined(OST_GL_VERSION_2_0) + if(HasMultisample()) { + glEnable(GL_MULTISAMPLE); + } +#endif #if OST_SHADER_SUPPORT_ENABLED Shader::Instance().PopProgram(); #endif diff --git a/modules/gfx/src/scene.hh b/modules/gfx/src/scene.hh index 972d2587c..4b9483666 100644 --- a/modules/gfx/src/scene.hh +++ b/modules/gfx/src/scene.hh @@ -513,6 +513,7 @@ class DLLEXPORT_OST_GFX Scene { void SetShowExportAspect(bool f); bool GetShowExportAspect() const {return show_export_aspect_;} + bool HasMultisample() const {return ms_flag_;} protected: friend class GfxObj; friend class GfxNode; @@ -603,6 +604,8 @@ private: Bitmap bg_bm_; unsigned int bg_tex_; + bool ms_flag_; // multisample flag + float export_aspect_; bool show_export_aspect_; -- GitLab