Skip to content

Commit

Permalink
Bring back factor for coincident topology resolution
Browse files Browse the repository at this point in the history
  • Loading branch information
sankhesh committed Jan 19, 2022
1 parent 4f4786e commit 5e9c319
Showing 1 changed file with 21 additions and 8 deletions.
29 changes: 21 additions & 8 deletions Rendering/OpenGL2/vtkOpenGLPolyDataMapper.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -2329,16 +2329,26 @@ void vtkOpenGLPolyDataMapper::ReplaceShaderCoincidentOffset(
if (factor != 0.0 || offset != 0.0)
{
std::string FSSource = shaders[vtkShader::Fragment]->GetSource();
vtkShaderProgram::Substitute(FSSource, "//VTK::Coincident::Dec", "uniform float cOffset;");
vtkShaderProgram::Substitute(FSSource, "//VTK::Coincident::Dec",
"uniform float cOffset;\n"
"uniform float cFactor;\n");
if (this->DrawingTubesOrSpheres(*this->LastBoundBO, actor))
{
vtkShaderProgram::Substitute(
FSSource, "//VTK::Depth::Impl", "gl_FragDepth = gl_FragDepth + 1.0*cOffset/65000;\n");
vtkShaderProgram::Substitute(FSSource, "//VTK::UniformFlow::Impl",
"float cscale = length(vec2(dFdx(gl_FragDepth), dFdy(gl_FragDepth)));\n"
" //VTK::UniformFlow::Impl\n" // for other replacements
);
vtkShaderProgram::Substitute(FSSource, "//VTK::Depth::Impl",
"gl_FragDepth = gl_FragDepth + cFactor*cscale + 1.0*cOffset/65000;\n");
}
else
{
vtkShaderProgram::Substitute(
FSSource, "//VTK::Depth::Impl", "gl_FragDepth = gl_FragCoord.z + 1.0*cOffset/65000;\n");
vtkShaderProgram::Substitute(FSSource, "//VTK::UniformFlow::Impl",
"float cscale = length(vec2(dFdx(gl_FragCoord.z), dFdy(gl_FragCoord.z)));\n"
" //VTK::UniformFlow::Impl\n" // for other replacements
);
vtkShaderProgram::Substitute(FSSource, "//VTK::Depth::Impl",
"gl_FragDepth = gl_FragCoord.z + cFactor*cscale + 1.0*cOffset/65000;\n");
}
shaders[vtkShader::Fragment]->SetSource(FSSource);
}
Expand Down Expand Up @@ -2872,11 +2882,14 @@ void vtkOpenGLPolyDataMapper::SetCameraShaderParameters(
}

// handle coincident
if (cellBO.Program->IsUniformUsed("cOffset"))
float factor = 0.0;
float offset = 0.0;
this->GetCoincidentParameters(ren, actor, factor, offset);
if ((factor != 0.0 || offset != 0.0) && cellBO.Program->IsUniformUsed("cOffset") &&
cellBO.Program->IsUniformUsed("cFactor"))
{
float factor, offset;
this->GetCoincidentParameters(ren, actor, factor, offset);
cellBO.Program->SetUniformf("cOffset", offset);
cellBO.Program->SetUniformf("cFactor", factor);
}

vtkNew<vtkMatrix3x3> env;
Expand Down

0 comments on commit 5e9c319

Please sign in to comment.