From 1d5f298e28b018909ee070ca6df9cdd017d9a705 Mon Sep 17 00:00:00 2001 From: tobias <tobias@5a81b35b-ba03-0410-adc8-b2c5c5119f08> Date: Wed, 14 Apr 2010 12:45:09 +0000 Subject: [PATCH] allow inversion of stereo in quad-buffered mode git-svn-id: https://dng.biozentrum.unibas.ch/svn/openstructure/trunk@1997 5a81b35b-ba03-0410-adc8-b2c5c5119f08 --- examples/dokk/glwin.py | 1 + modules/gfx/pymod/export_scene.cc | 2 +- modules/gfx/src/scene.cc | 19 +++++++++++++++++-- modules/gfx/src/scene.hh | 7 ++++++- 4 files changed, 25 insertions(+), 4 deletions(-) diff --git a/examples/dokk/glwin.py b/examples/dokk/glwin.py index 032099420..62d05abfb 100644 --- a/examples/dokk/glwin.py +++ b/examples/dokk/glwin.py @@ -169,6 +169,7 @@ class DokkGLWin(gfx.GLWinBase): self.canvas.show() def SetStereo(self, mode): + gfx.Scene().SetStereoInverted(True) gfx.Scene().Stereo(mode) def SetLockInput(self, lock): diff --git a/modules/gfx/pymod/export_scene.cc b/modules/gfx/pymod/export_scene.cc index 5bd9c75e0..9cae54473 100644 --- a/modules/gfx/pymod/export_scene.cc +++ b/modules/gfx/pymod/export_scene.cc @@ -72,7 +72,6 @@ void export_Scene() void (Scene::*center_on1)(const String&) = &Scene::CenterOn; void (Scene::*center_on2)(const GfxObjP&) = &Scene::CenterOn; - class_<Scene, boost::noncopyable>("SceneSingleton",no_init) .def("Add", &Scene::Add, scene_add_overloads()) @@ -106,6 +105,7 @@ void export_Scene() .def("GetFOV",&Scene::GetFOV) .def("SetFogOffsets",&Scene::SetFogOffsets) .def("Stereo",&Scene::Stereo) + .def("SetStereoInverted",&Scene::SetStereoInverted) .def("Apply", apply) .def("SetStereoEye",&Scene::SetStereoEye) .def("SetLightDir",&Scene::SetLightDir) diff --git a/modules/gfx/src/scene.cc b/modules/gfx/src/scene.cc index 0b62cbeb4..c85abc13d 100644 --- a/modules/gfx/src/scene.cc +++ b/modules/gfx/src/scene.cc @@ -124,6 +124,7 @@ Scene::Scene(): blur_count_(0), blur_buffer_(), stereo_(0), + stereo_inverted_(false), stereo_eye_(0), stereo_eye_dist_(150.0), stereo_eye_offset_(10.0) @@ -1061,6 +1062,11 @@ void Scene::Stereo(unsigned int m) RequestRedraw(); } +void Scene::SetStereoInverted(bool f) +{ + stereo_inverted_=f; +} + void Scene::SetStereoEye(unsigned int m) { stereo_eye_= (m>2) ? 0: m; @@ -1737,12 +1743,21 @@ void Scene::render_quad_buffered_stereo() glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glDrawBuffer(GL_BACK_LEFT); glClear(GL_DEPTH_BUFFER_BIT); - stereo_projection(stereo_==1 ? 1: 2); + if (stereo_inverted_) { + stereo_projection(stereo_==1 ? 2 : 1); + } else { + stereo_projection(stereo_==1 ? 1 : 2); + } this->render_scene_with_glow(); glDrawBuffer(GL_BACK_RIGHT); glClear(GL_DEPTH_BUFFER_BIT); - stereo_projection(stereo_==1 ? 2 : 1); + if (stereo_inverted_) { + stereo_projection(stereo_==1 ? 1 : 2); + } else { + stereo_projection(stereo_==1 ? 2 : 1); + } this->render_scene_with_glow(); + glDrawBuffer(GL_BACK); } }} // ns diff --git a/modules/gfx/src/scene.hh b/modules/gfx/src/scene.hh index c373f3e81..d86e46a6a 100644 --- a/modules/gfx/src/scene.hh +++ b/modules/gfx/src/scene.hh @@ -155,11 +155,15 @@ class DLLEXPORT_OST_GFX Scene { /// \brief switch stereo mode /* 0=off - 1=quad-buffered (unsupported) + 1=quad-buffered 2=interlaced variant #1 3=interlaced variant #2 */ void Stereo(unsigned int); + + /// \brief invert stereo eyes for stereo mode=0 + void SetStereoInverted(bool f); + /// \brief eye mode, 0=center, 1=left, 2=right void SetStereoEye(unsigned int); @@ -393,6 +397,7 @@ private: std::vector<boost::shared_array<unsigned char> > blur_buffer_; GLuint glow_tex_; unsigned int stereo_; + bool stereo_inverted_; unsigned int stereo_eye_; float stereo_eye_dist_,stereo_eye_offset_; -- GitLab