Added workaround for dashed line presentation on Intel UHD Graphics 630.
{
if (!myActiveProgram.IsNull())
{
- myActiveProgram->SetUniform (this, "uPattern", (Standard_Integer )thePattern);
- myActiveProgram->SetUniform (this, "uFactor", theFactor);
+ const GLint aLocPattern = myActiveProgram->GetStateLocation (OpenGl_OCCT_LINE_STIPPLE_PATTERN);
+ const GLint aLocFactor = myActiveProgram->GetStateLocation (OpenGl_OCCT_LINE_STIPPLE_FACTOR);
+ const GLint aLocViewPort = myActiveProgram->GetStateLocation (OpenGl_OCCT_VIEWPORT);
+ if (aLocPattern != OpenGl_ShaderProgram::INVALID_LOCATION)
+ {
+ myActiveProgram->SetUniform (this, aLocViewPort,
+ OpenGl_Vec4 ((float )myViewport[0], (float )myViewport[1],
+ (float )myViewport[2], (float )myViewport[3]));
+ myActiveProgram->SetUniform (this, aLocPattern, (Standard_Integer )thePattern);
+ myActiveProgram->SetUniform (this, aLocFactor, theFactor);
+ }
return;
}
if (hasGlslBitOps)
{
aSrcVertExtraOut +=
- EOL"THE_SHADER_OUT vec2 ScreenSpaceCoord;";
+ EOL"THE_SHADER_OUT vec2 ScreenSpaceCoord;"
+ EOL"uniform vec4 occViewport;";
aSrcFragExtraOut +=
EOL"THE_SHADER_IN vec2 ScreenSpaceCoord;"
- EOL"uniform int uPattern;"
- EOL"uniform float uFactor;";
+ EOL"uniform int occStipplePattern;"
+ EOL"uniform float occStippleFactor;";
aSrcVertEndMain =
- EOL" ScreenSpaceCoord = gl_Position.xy / gl_Position.w;";
+ EOL" vec2 aPosition = gl_Position.xy / gl_Position.w;"
+ EOL" aPosition = aPosition * 0.5 + 0.5;"
+ EOL" ScreenSpaceCoord = aPosition.xy * occViewport.zw + occViewport.xy;";
aSrcFragMainGetColor =
- EOL" float anAngle = atan (dFdx (ScreenSpaceCoord.x), dFdy (ScreenSpaceCoord.y));"
- EOL" float aRotatePoint = gl_FragCoord.x * sin (anAngle) + gl_FragCoord.y * cos (anAngle);"
- EOL" uint aBit = uint (floor (aRotatePoint / uFactor + 0.5)) & 15U;"
- EOL" if ((uint (uPattern) & (1U << aBit)) == 0U) discard;"
+ EOL" vec2 anAxis = vec2 (0.0);"
+ EOL" if (abs (dFdx (ScreenSpaceCoord.x)) - abs (dFdy (ScreenSpaceCoord.y)) > 0.001)"
+ EOL" {"
+ EOL" anAxis = vec2 (1.0, 0.0);"
+ EOL" }"
+ EOL" else"
+ EOL" {"
+ EOL" anAxis = vec2 (0.0, 1.0);"
+ EOL" }"
+ EOL" float aRotatePoint = dot (gl_FragCoord.xy, anAxis);"
+ EOL" uint aBit = uint (floor (aRotatePoint / occStippleFactor + 0.5)) & 15U;"
+ EOL" if ((uint (occStipplePattern) & (1U << aBit)) == 0U) discard;"
EOL" vec4 aColor = getColor();"
EOL" if (aColor.a <= 0.1) discard;"
EOL" occFragColor = aColor;";
"occOitDepthFactor", // OpenGl_OCCT_OIT_DEPTH_FACTOR
"occTexTrsf2d", // OpenGl_OCCT_TEXTURE_TRSF2D
- "occPointSize" // OpenGl_OCCT_POINT_SIZE
+ "occPointSize", // OpenGl_OCCT_POINT_SIZE
+
+ "occViewport", // OpenGl_OCCT_VIEWPORT
+ "occStipplePattern", // OpenGl_OCCT_LINE_STIPPLE_PATTERN
+ "occStippleFactor" // OpenGl_OCCT_LINE_STIPPLE_FACTOR
+
};
// =======================================================================
OpenGl_OCCT_TEXTURE_TRSF2D,
OpenGl_OCCT_POINT_SIZE,
+ // Wireframe state
+ OpenGl_OCCT_VIEWPORT,
+ OpenGl_OCCT_LINE_STIPPLE_PATTERN, // occStipplePattern
+ OpenGl_OCCT_LINE_STIPPLE_FACTOR, // occStippleFactor
+
// DON'T MODIFY THIS ITEM (insert new items before it)
OpenGl_OCCT_NUMBER_OF_STATE_VARIABLES
};
--- /dev/null
+puts "============="
+puts "0030713: Visualization, TKOpenGl - stipple line artifacts on Intel UHD Graphics 630"
+puts "============="
+
+pload MODELING VISUALIZATION
+box b 1 2 3
+vclear
+vcaps -core
+vinit View1
+vglinfo
+vdisplay -dispMode 0 b
+vtop
+vfit
+vzoom 0.8
+vaspects b -lineType DASH
+vrotate 0 0 0.785
+vfit
+
+vdump ${imagedir}/${casename}.png