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:
@@ -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();
|
||||
|
Reference in New Issue
Block a user