bool TriPatchObject::UpdatePerNodeItems(const MaxSDK::Graphics::UpdateDisplayContext& updateDisplayContext, MaxSDK::Graphics::UpdateNodeContext& nodeContext, MaxSDK::Graphics::IRenderItemContainer& targetRenderItemContainer) { Mesh& mesh = patch.GetMesh(); if(mesh.getNumVerts()>0) { using namespace MaxSDK::Graphics; GenerateMeshRenderItemsContext generateRenderItemsContext; generateRenderItemsContext.GenerateDefaultContext(updateDisplayContext); generateRenderItemsContext.RemoveInvisibleMeshElementDescriptions(nodeContext.GetRenderNode()); IMeshDisplay2* pMeshDisplay = static_cast<IMeshDisplay2*>(mesh.GetInterface(IMesh_DISPLAY2_INTERFACE_ID)); if (NULL == pMeshDisplay) { return false; } pMeshDisplay->GetRenderItems(generateRenderItemsContext,nodeContext,targetRenderItemContainer); return true ; } return false; }
bool MaterialHandle::UpdatePerNodeItems( const MaxSDK::Graphics::UpdateDisplayContext& updateDisplayContext, MaxSDK::Graphics::UpdateNodeContext& nodeContext, MaxSDK::Graphics::IRenderItemContainer& targetRenderItemContainer) { using namespace MaxSDK::Graphics; IMeshDisplay2* pMeshDisplay = static_cast<IMeshDisplay2*>(mesh.GetInterface(IMesh_DISPLAY2_INTERFACE_ID)); if (NULL == pMeshDisplay) { return false; } AutoRestoreRenderNodeMaterial(nodeContext.GetRenderNode(), mSolidColorMaterialHandle); GenerateMeshRenderItemsContext generateRenderItemsContext; generateRenderItemsContext.GenerateDefaultContext(updateDisplayContext); generateRenderItemsContext.RemoveInvisibleMeshElementDescriptions(nodeContext.GetRenderNode()); RenderItemHandleArray renderItems; pMeshDisplay->GetRenderItems(generateRenderItemsContext,nodeContext,renderItems); // set SolidColorMaterialHandle to render item for (int index = 0; index < renderItems.GetNumberOfRenderItems(); index++) { RenderItemHandleDecorator decorator; decorator.Initialize(renderItems.GetRenderItem(index)); decorator.SetCustomMaterial(mSolidColorMaterialHandle); targetRenderItemContainer.AddRenderItem(decorator); } return true; }