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

0027682: Visualization - provide method Prs3d_Drawer::SetShaderProgram() for setting program

AIS_ColoredDrawer has been moved to dedicated file.
AIS_ColoredShape::CustomAspectsMap() - added public method for accessing aspects map.

AIS_InteractiveObject::SynchronizeAspects() - added method for synchronizing
all primitive aspects at low-level (TKOpenGl) after their modification.
This commit is contained in:
kgv
2016-07-17 16:53:43 +03:00
committed by bugmaster
parent c65f82013b
commit fb66bb2892
10 changed files with 382 additions and 61 deletions

View File

@@ -554,11 +554,24 @@ static Standard_Integer VShaderProg (Draw_Interpretor& /*theDI*/,
anIter.More(); anIter.Next())
{
anIO = Handle(AIS_InteractiveObject)::DownCast (anIter.Key1());
if (!anIO.IsNull())
if (anIO.IsNull())
{
anIO->Attributes()->ShadingAspect()->Aspect()->SetShaderProgram (aProgram);
continue;
}
if (!anIO->Attributes()->HasOwnShadingAspect())
{
Handle(Prs3d_ShadingAspect) aNewAspect = new Prs3d_ShadingAspect();
*aNewAspect->Aspect() = *anIO->Attributes()->ShadingAspect()->Aspect();
aNewAspect->Aspect()->SetShaderProgram (aProgram);
anIO->Attributes()->SetShadingAspect (aNewAspect);
aCtx->Redisplay (anIO, Standard_False);
}
else
{
anIO->Attributes()->SetShaderProgram (aProgram, Graphic3d_ASPECT_FILL_AREA);
anIO->SynchronizeAspects();
}
}
aCtx->UpdateCurrentViewer();
return 0;
@@ -578,8 +591,20 @@ static Standard_Integer VShaderProg (Draw_Interpretor& /*theDI*/,
std::cerr << "Warning: " << aName.ToCString() << " is not an AIS object\n";
continue;
}
anIO->Attributes()->ShadingAspect()->Aspect()->SetShaderProgram (aProgram);
aCtx->Redisplay (anIO, Standard_False);
if (!anIO->Attributes()->HasOwnShadingAspect())
{
Handle(Prs3d_ShadingAspect) aNewAspect = new Prs3d_ShadingAspect();
*aNewAspect->Aspect() = *anIO->Attributes()->ShadingAspect()->Aspect();
aNewAspect->Aspect()->SetShaderProgram (aProgram);
anIO->Attributes()->SetShadingAspect (aNewAspect);
aCtx->Redisplay (anIO, Standard_False);
}
else
{
anIO->Attributes()->SetShaderProgram (aProgram, Graphic3d_ASPECT_FILL_AREA);
anIO->SynchronizeAspects();
}
}
aCtx->UpdateCurrentViewer();