]> OCCT Git - occt-copy.git/commitdiff
0024437: Efficient HLR visualization based on OpenGL and GLSL
authorasl <asl@opencascade.com>
Tue, 19 Jun 2018 08:55:17 +0000 (11:55 +0300)
committerasl <asl@opencascade.com>
Tue, 19 Jun 2018 09:57:47 +0000 (12:57 +0300)
correction of HLR in perspective mode

src/OpenGl/OpenGl_Context.cxx
src/OpenGl/OpenGl_ShaderManager.cxx

index c9516eae3c02c44675a73c52684ac58ed496017e..00f395befcaa696fdee80822417daa2dad672b74 100644 (file)
@@ -3456,7 +3456,10 @@ void OpenGl_Context::PushOrthoScale (const Handle(OpenGl_Workspace)& theWorkspac
 {
   if (!myActiveProgram.IsNull() && !theWorkspace.IsNull())
   {
-    Standard_ShortReal aScale = (Standard_ShortReal)theWorkspace->View()->Camera()->Scale();
+    Handle(Graphic3d_Camera) aCamera = theWorkspace->View()->Camera();
+    Standard_ShortReal aScale = 0.0;
+    if( aCamera->IsOrthographic() )
+      aScale = (Standard_ShortReal)aCamera->Scale();
     myActiveProgram->SetUniform(this, myActiveProgram->GetStateLocation(OpenGl_OCCT_ORTHO_SCALE), aScale);
   }
 }
index 5be378ae362d774c3ba3d4420a478dff04b6eddf..23da1a0344b74c35fad6fc44dbeb1b869bafecb3 100644 (file)
@@ -1635,16 +1635,17 @@ Standard_Boolean OpenGl_ShaderManager::prepareStdProgramUnlit (Handle(OpenGl_Sha
       EOL"  {"
       EOL"    if (occIsSilhouettePass > 0.1)"
       EOL"    {"
-      EOL"      vec4 pos = occProjectionMatrix * occWorldViewMatrix * occModelWorldMatrix * vertex;"
-      EOL"      delta = occNormal.xyz * aShift * pos.w;"
+      EOL"      vec4 proj_vertex = occProjectionMatrix * occWorldViewMatrix * occModelWorldMatrix * vertex;"
+      EOL"      delta = occNormal.xyz * aShift/2 * proj_vertex.w;"
       EOL"    }"
       EOL"  }"
       EOL"  "
       EOL"  vertex += vec4(delta, 0.0);"
+      EOL"  vertex[3] = 1.0;"
       ;
 
     aSrcVertEndMain +=
-      EOL"gl_Position += vec4(pdelta.xy, 0.0, 0.0);"
+      EOL"gl_Position += vec4(2*pdelta.xy, 0.0, 0.0);"
       ;
 
     aSrcFragExtraOut +=