0030931: Visualization, TKOpenGl - do not render into GL_FRONT within "GDI Generic...
authorkgv <kgv@opencascade.com>
Sun, 1 Sep 2019 10:19:40 +0000 (13:19 +0300)
committerapn <apn@opencascade.com>
Mon, 2 Sep 2019 16:18:36 +0000 (19:18 +0300)
OpenGl_Workspace now disables at initialization time
OpenGl_View::SetImmediateModeDrawToFront() property in case of "GDI Generic" OpenGL implementation.

OpenGl_View::redrawImmediate() - fixed no buffer swap in case of
myTransientDrawToFront without offscreen FBO.

src/OpenGl/OpenGl_View_Redraw.cxx
src/OpenGl/OpenGl_Workspace.cxx

index 5f83913..fd0acf5 100644 (file)
@@ -817,7 +817,7 @@ bool OpenGl_View::redrawImmediate (const Graphic3d_Camera::Projection theProject
                                    OpenGl_FrameBuffer*                theOitAccumFbo,
                                    const Standard_Boolean             theIsPartialUpdate)
 {
-  Handle(OpenGl_Context) aCtx = myWorkspace->GetGlContext();
+  const Handle(OpenGl_Context)& aCtx = myWorkspace->GetGlContext();
   GLboolean toCopyBackToFront = GL_FALSE;
   if (theDrawFbo == theReadFbo
    && theDrawFbo != NULL)
@@ -855,6 +855,7 @@ bool OpenGl_View::redrawImmediate (const Graphic3d_Camera::Projection theProject
     }
     else
     {
+      toCopyBackToFront    = GL_FALSE;
       myBackBufferRestored = Standard_False;
     }
   }
index adfc490..c13bcb3 100644 (file)
@@ -146,6 +146,12 @@ OpenGl_Workspace::OpenGl_Workspace (OpenGl_View* theView, const Handle(OpenGl_Wi
 
     glHint (GL_LINE_SMOOTH_HINT,    GL_FASTEST);
     glHint (GL_POLYGON_SMOOTH_HINT, GL_FASTEST);
+    if (myGlContext->Vendor() == "microsoft corporation"
+    && !myGlContext->IsGlGreaterEqual (1, 2))
+    {
+      // this software implementation causes too slow rendering into GL_FRONT on modern Windows
+      theView->SetImmediateModeDrawToFront (false);
+    }
   #endif
   }