MCPcopy Create free account
hub / github.com/DiligentGraphics/DiligentFX / Sync

Method Sync

Hydrogent/src/HnMaterial.cpp:102–151  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

100}
101
102void HnMaterial::Sync(pxr::HdSceneDelegate* SceneDelegate,
103 pxr::HdRenderParam* RenderParam,
104 pxr::HdDirtyBits* DirtyBits)
105{
106 if (*DirtyBits == pxr::HdMaterial::Clean)
107 return;
108
109 HnRenderDelegate* RenderDelegate = static_cast<HnRenderDelegate*>(SceneDelegate->GetRenderIndex().GetRenderDelegate());
110 HnTextureRegistry& TexRegistry = RenderDelegate->GetTextureRegistry();
111 const USD_Renderer& UsdRenderer = *RenderDelegate->GetUSDRenderer();
112
113 // A mapping from the texture name to the texture coordinate set index (e.g. "diffuseColor" -> 0)
114 TexNameToCoordSetMapType TexNameToCoordSetMap;
115
116 pxr::VtValue vtMat = SceneDelegate->GetMaterialResource(GetId());
117 if (vtMat.IsHolding<pxr::HdMaterialNetworkMap>())
118 {
119 const pxr::HdMaterialNetworkMap& hdNetworkMap = vtMat.UncheckedGet<pxr::HdMaterialNetworkMap>();
120 if (!hdNetworkMap.terminals.empty() && !hdNetworkMap.map.empty())
121 {
122 try
123 {
124 m_Network = HnMaterialNetwork{GetId(), hdNetworkMap}; // May throw
125
126 TexNameToCoordSetMap = AllocateTextures(TexRegistry);
127 ProcessMaterialNetwork();
128 }
129 catch (const std::runtime_error& err)
130 {
131 LOG_ERROR_MESSAGE("Failed to create material network for material ", GetId(), ": ", err.what());
132 m_Network = {};
133 }
134 catch (...)
135 {
136 LOG_ERROR_MESSAGE("Failed to create material network for material ", GetId(), ": unknown error");
137 m_Network = {};
138 }
139 }
140 }
141
142 // It is important to initialize texture attributes with default values even if there is no material network.
143 InitTextureAttribs(TexRegistry, UsdRenderer, TexNameToCoordSetMap);
144
145 if (RenderParam)
146 {
147 static_cast<HnRenderParam*>(RenderParam)->MakeAttribDirty(HnRenderParam::GlobalAttrib::Material);
148 }
149
150 *DirtyBits = HdMaterial::Clean;
151}
152
153static bool ReadFallbackValue(const HnMaterialNetwork& Network, const pxr::TfToken& Name, float3& Value)
154{

Callers

nothing calls this directly

Calls 2

GetUSDRendererMethod · 0.80
MakeAttribDirtyMethod · 0.80

Tested by

no test coverage detected