From 65d5ec8513ee59252fbe89136dde124a7b3d9ca0 Mon Sep 17 00:00:00 2001
From: Gabriel Studer <gabriel.studer@unibas.ch>
Date: Wed, 4 Nov 2020 22:16:42 +0100
Subject: [PATCH] set fog parameters while rendering overall scene

This caused trouble when switching OpenGL context for offscreen
rendering (DNG image export)
---
 modules/gfx/src/scene.cc | 21 +++++----------------
 modules/gfx/src/scene.hh |  1 -
 2 files changed, 5 insertions(+), 17 deletions(-)

diff --git a/modules/gfx/src/scene.cc b/modules/gfx/src/scene.cc
index a79bee3a3..a6fbd0d68 100644
--- a/modules/gfx/src/scene.cc
+++ b/modules/gfx/src/scene.cc
@@ -1428,7 +1428,6 @@ void Scene::PopView()
     zfar_=scene_view_stack_.top().zfar;
     scene_view_stack_.pop();
     ResetProjection();
-    update_fog();
     RequestRedraw();
   }
 }
@@ -1484,7 +1483,6 @@ float Scene::GetFOV() const
 void Scene::SetFogNearOffset(float o)
 {
   fnear_=o;
-  update_fog();
   RequestRedraw();
 }
 
@@ -1496,7 +1494,6 @@ float Scene::GetFogNearOffset() const
 void Scene::SetFogFarOffset(float o)
 {
   ffar_=o;
-  update_fog();
   RequestRedraw();
 }
 
@@ -1509,7 +1506,6 @@ void Scene::SetFogOffsets(float no, float fo)
 {
   fnear_=no;
   ffar_=fo;
-  update_fog();
   RequestRedraw();
 }
 
@@ -1798,7 +1794,7 @@ void Scene::set_near(float n)
   if(znear_>zfar_-0.1) {
     znear_=zfar_-0.1;
   }
-  update_fog();
+  RequestRedraw();
 }
 
 void Scene::set_far(float f)
@@ -1807,19 +1803,9 @@ void Scene::set_far(float f)
   if(znear_>zfar_-0.1) {
     zfar_=znear_+0.1;
   }
-  update_fog();
-}
-
-void Scene::update_fog()
-{
-  if(gl_init_) {
-    this->ActivateGLContext();
-    glFogf(GL_FOG_START,znear_+fnear_);
-    glFogf(GL_FOG_END,zfar_+ffar_);
-  }
+  RequestRedraw();
 }
 
-
 namespace {
 class DirtyAll: public GfxNodeVisitor
 {
@@ -2113,6 +2099,9 @@ void Scene::render_scene()
 
   render_bg();
 
+  glFogf(GL_FOG_START,znear_+fnear_);
+  glFogf(GL_FOG_END,zfar_+ffar_);
+
   glMultMatrix(transform_.GetTransposedMatrix().Data());
 
 #if OST_SHADER_SUPPORT_ENABLED
diff --git a/modules/gfx/src/scene.hh b/modules/gfx/src/scene.hh
index 714e60a63..6ae5033f8 100644
--- a/modules/gfx/src/scene.hh
+++ b/modules/gfx/src/scene.hh
@@ -601,7 +601,6 @@ private:
 
   void set_near(float n);
   void set_far(float f);
-  void update_fog();
   void flag_all_dirty();
   void prep_glyphs();
   void prep_blur();
-- 
GitLab