1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-08-09 13:22:24 +03:00

0029519: Visualization, TKOpenGl - fallback to Graphic3d_TOSM_FACET from Gouraud/Phong when nodal normals are undefined

This commit is contained in:
kgv
2018-02-20 08:00:01 +03:00
committed by bugmaster
parent dc89236fee
commit db5d29de1c
3 changed files with 55 additions and 14 deletions

View File

@@ -316,9 +316,10 @@ public:
return myContext == theCtx;
}
//! Choose Shading Model.
Graphic3d_TypeOfShadingModel ChooseShadingModel (Graphic3d_TypeOfShadingModel theCustomModel,
bool theHasNodalNormals) const
//! Choose Shading Model for filled primitives.
//! Fallbacks to FACET model if there are no normal attributes.
Graphic3d_TypeOfShadingModel ChooseFaceShadingModel (Graphic3d_TypeOfShadingModel theCustomModel,
bool theHasNodalNormals) const
{
if (!myContext->ColorMask())
{
@@ -330,13 +331,42 @@ public:
case Graphic3d_TOSM_DEFAULT:
case Graphic3d_TOSM_UNLIT:
case Graphic3d_TOSM_FACET:
break;
return aModel;
case Graphic3d_TOSM_VERTEX:
case Graphic3d_TOSM_FRAGMENT:
aModel = theHasNodalNormals ? aModel : Graphic3d_TOSM_UNLIT;
break;
return theHasNodalNormals ? aModel : Graphic3d_TOSM_FACET;
}
return aModel;
return Graphic3d_TOSM_UNLIT;
}
//! Choose Shading Model for line primitives.
//! Fallbacks to UNLIT model if there are no normal attributes.
Graphic3d_TypeOfShadingModel ChooseLineShadingModel (Graphic3d_TypeOfShadingModel theCustomModel,
bool theHasNodalNormals) const
{
if (!myContext->ColorMask())
{
return Graphic3d_TOSM_UNLIT;
}
Graphic3d_TypeOfShadingModel aModel = theCustomModel != Graphic3d_TOSM_DEFAULT ? theCustomModel : myShadingModel;
switch (aModel)
{
case Graphic3d_TOSM_DEFAULT:
case Graphic3d_TOSM_UNLIT:
case Graphic3d_TOSM_FACET:
return Graphic3d_TOSM_UNLIT;
case Graphic3d_TOSM_VERTEX:
case Graphic3d_TOSM_FRAGMENT:
return theHasNodalNormals ? aModel : Graphic3d_TOSM_UNLIT;
}
return Graphic3d_TOSM_UNLIT;
}
//! Choose Shading Model for Marker primitives.
Graphic3d_TypeOfShadingModel ChooseMarkerShadingModel (Graphic3d_TypeOfShadingModel theCustomModel,
bool theHasNodalNormals) const
{
return ChooseLineShadingModel (theCustomModel, theHasNodalNormals);
}
//! Returns default Shading Model.