0029286: Visualization, TKOpenGl - do not update FFP state when OpenGl_Caps::ffpEnabl...
authorkgv <kgv@opencascade.com>
Thu, 2 Nov 2017 07:28:01 +0000 (10:28 +0300)
committerbugmaster <bugmaster@opencascade.com>
Wed, 8 Nov 2017 13:41:59 +0000 (16:41 +0300)
src/OpenGl/OpenGl_PrimitiveArray.cxx
src/OpenGl/OpenGl_Text.cxx
src/OpenGl/OpenGl_View_Redraw.cxx
src/OpenGl/OpenGl_Workspace.cxx

index 4fcbd4d..c2ca7b9 100644 (file)
@@ -448,13 +448,6 @@ void OpenGl_PrimitiveArray::drawEdges (const OpenGl_Vec4&              theEdgeCo
     return;
   }
 
-#if !defined(GL_ES_VERSION_2_0)
-  if (aGlContext->core11 != NULL)
-  {
-    glDisable (GL_LIGHTING);
-  }
-#endif
-
   const OpenGl_AspectLine* anAspectLineOld = theWorkspace->SetAspectLine (theWorkspace->AspectFace()->AspectEdge());
   const OpenGl_AspectLine* anAspect = theWorkspace->ApplyAspectLine();
 
@@ -474,6 +467,13 @@ void OpenGl_PrimitiveArray::drawEdges (const OpenGl_Vec4&              theEdgeCo
                          && aGlContext->ActiveProgram()->HasTessellationStage()
                          ? GL_PATCHES
                          : myDrawMode;
+#if !defined(GL_ES_VERSION_2_0)
+  if (aGlContext->ActiveProgram().IsNull()
+   && aGlContext->core11 != NULL)
+  {
+    glDisable (GL_LIGHTING);
+  }
+#endif
 
   /// OCC22236 NOTE: draw edges for all situations:
   /// 1) draw elements with GL_LINE style as edges from myPArray->bufferVBO[VBOEdges] indices array
index a7ee8eb..fd9757f 100644 (file)
@@ -849,7 +849,8 @@ void OpenGl_Text::render (const Handle(OpenGl_Context)& theCtx,
   myExportHeight = aPointSize / myExportHeight;
 
 #if !defined(GL_ES_VERSION_2_0)
-  if (theCtx->core11 != NULL)
+  if (theCtx->core11 != NULL
+   && theCtx->caps->ffpEnable)
   {
     glDisable (GL_LIGHTING);
   }
index 1bdacad..93f5640 100644 (file)
@@ -97,7 +97,8 @@ void OpenGl_View::drawBackground (const Handle(OpenGl_Workspace)& theWorkspace)
   {
   #if !defined(GL_ES_VERSION_2_0)
     GLint aShadingModelOld = GL_SMOOTH;
-    if (aCtx->core11 != NULL)
+    if (aCtx->core11 != NULL
+     && aCtx->caps->ffpEnable)
     {
       aCtx->core11fwd->glDisable (GL_LIGHTING);
       aCtx->core11fwd->glGetIntegerv (GL_SHADE_MODEL, &aShadingModelOld);
@@ -108,7 +109,8 @@ void OpenGl_View::drawBackground (const Handle(OpenGl_Workspace)& theWorkspace)
     myBgGradientArray->Render (theWorkspace);
 
   #if !defined(GL_ES_VERSION_2_0)
-    if (aCtx->core11 != NULL)
+    if (aCtx->core11 != NULL
+     && aCtx->caps->ffpEnable)
     {
       aCtx->core11->glShadeModel (aShadingModelOld);
     }
@@ -541,7 +543,10 @@ void OpenGl_View::Redraw()
 
   // reset state for safety
   aCtx->BindProgram (Handle(OpenGl_ShaderProgram)());
-  aCtx->ShaderManager()->PushState (Handle(OpenGl_ShaderProgram)());
+  if (aCtx->caps->ffpEnable)
+  {
+    aCtx->ShaderManager()->PushState (Handle(OpenGl_ShaderProgram)());
+  }
 
   // Swap the buffers
   if (toSwap)
@@ -711,7 +716,10 @@ void OpenGl_View::RedrawImmediate()
 
   // reset state for safety
   aCtx->BindProgram (Handle(OpenGl_ShaderProgram)());
-  aCtx->ShaderManager()->PushState (Handle(OpenGl_ShaderProgram)());
+  if (aCtx->caps->ffpEnable)
+  {
+    aCtx->ShaderManager()->PushState (Handle(OpenGl_ShaderProgram)());
+  }
 
   if (toSwap && !aCtx->caps->buffersNoSwap)
   {
@@ -910,7 +918,8 @@ void OpenGl_View::render (Graphic3d_Camera::Projection theProjection,
 
 #if !defined(GL_ES_VERSION_2_0)
   // Switch off lighting by default
-  if (aContext->core11 != NULL)
+  if (aContext->core11 != NULL
+   && aContext->caps->ffpEnable)
   {
     glDisable(GL_LIGHTING);
   }
@@ -1006,7 +1015,10 @@ void OpenGl_View::render (Graphic3d_Camera::Projection theProjection,
 
   // reset FFP state for safety
   aContext->BindProgram (Handle(OpenGl_ShaderProgram)());
-  aContext->ShaderManager()->PushState (Handle(OpenGl_ShaderProgram)());
+  if (aContext->caps->ffpEnable)
+  {
+    aContext->ShaderManager()->PushState (Handle(OpenGl_ShaderProgram)());
+  }
 
   // ==============================================================
   //      Step 6: Keep shader manager informed about last View
index e6b2419..6f20f3c 100644 (file)
@@ -153,13 +153,13 @@ OpenGl_Workspace::OpenGl_Workspace (OpenGl_View* theView, const Handle(OpenGl_Wi
   #if !defined(GL_ES_VERSION_2_0)
     if (myGlContext->core11 != NULL)
     {
-      // Eviter d'avoir les faces mal orientees en noir.
-      // Pourrait etre utiliser pour detecter les problemes d'orientation
+      // enable two-side lighting by default
       glLightModeli ((GLenum )GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE);
-
-      // Optimisation pour le Fog et l'antialiasing
-      glHint (GL_FOG_HINT,            GL_FASTEST);
-      glHint (GL_POINT_SMOOTH_HINT,   GL_FASTEST);
+      glHint (GL_POINT_SMOOTH_HINT, GL_FASTEST);
+      if (myGlContext->caps->ffpEnable)
+      {
+        glHint (GL_FOG_HINT, GL_FASTEST);
+      }
     }
 
     glHint (GL_LINE_SMOOTH_HINT,    GL_FASTEST);
@@ -197,7 +197,10 @@ Standard_Boolean OpenGl_Workspace::Activate()
   {
     myGlContext->core20fwd->glUseProgram (OpenGl_ShaderProgram::NO_PROGRAM);
   }
-  myGlContext->ShaderManager()->PushState (Handle(OpenGl_ShaderProgram)());
+  if (myGlContext->caps->ffpEnable)
+  {
+    myGlContext->ShaderManager()->PushState (Handle(OpenGl_ShaderProgram)());
+  }
   return Standard_True;
 }