Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

MAYA-123181 - As a user, I'd like my prims to be in untextured mode when in a Display Layer #2599

Merged
merged 10 commits into from
Sep 19, 2022
55 changes: 33 additions & 22 deletions lib/mayaUsd/render/vp2RenderDelegate/basisCurves.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -450,8 +450,10 @@ void HdVP2BasisCurves::Sync(
const HdVP2Material* material = static_cast<const HdVP2Material*>(
renderIndex.GetSprim(HdPrimTypeTokens->material, GetMaterialId()));

const TfTokenVector& requiredPrimvars = (material && material->GetSurfaceShader())
? material->GetRequiredPrimvars()
TfToken materialNetworkToken = _GetMaterialNetworkToken(reprToken);
const TfTokenVector& requiredPrimvars
= (material && material->GetSurfaceShader(materialNetworkToken))
? material->GetRequiredPrimvars(materialNetworkToken)
: sFallbackShaderPrimvars;

_UpdatePrimvarSources(delegate, *dirtyBits, requiredPrimvars);
Expand Down Expand Up @@ -525,6 +527,7 @@ void HdVP2BasisCurves::Sync(
void HdVP2BasisCurves::_UpdateDrawItem(
HdSceneDelegate* sceneDelegate,
HdVP2DrawItem* drawItem,
const TfToken& reprToken,
HdBasisCurvesReprDesc const& desc)
{
MHWRender::MRenderItem* renderItem = drawItem->GetRenderItem();
Expand Down Expand Up @@ -686,12 +689,9 @@ void HdVP2BasisCurves::_UpdateDrawItem(

unsigned int numWidths = widths.size();
if (widthsBuffer && numWidths > 0) {
void* bufferData = widthsBuffer->acquire(numWidths, true);
stateToCommit._primvarBufferDataMap[HdTokens->widths] = bufferData;

if (bufferData != nullptr) {
memcpy(bufferData, widths.cdata(), numWidths * sizeof(float));
}
auto& bufferData = stateToCommit._primvarBufferDataMap[HdTokens->widths];
bufferData.resize(numWidths * sizeof(float));
memcpy(&bufferData[0], widths.cdata(), numWidths * sizeof(float));
}
}

Expand All @@ -701,7 +701,8 @@ void HdVP2BasisCurves::_UpdateDrawItem(
renderIndex.GetSprim(HdPrimTypeTokens->material, GetMaterialId()));

if (material) {
MHWRender::MShaderInstance* shader = material->GetSurfaceShader();
MHWRender::MShaderInstance* shader
= material->GetSurfaceShader(_GetMaterialNetworkToken(reprToken));
drawItemData._shaderIsFallback = (shader == nullptr);
if (shader != nullptr && shader != drawItemData._shader) {
drawItemData._shader = shader;
Expand Down Expand Up @@ -1112,14 +1113,15 @@ void HdVP2BasisCurves::_UpdateDrawItem(

// If available, something changed
for (const auto& entry : stateToCommit._primvarBufferDataMap) {
const TfToken& primvarName = entry.first;
void* primvarBufferData = entry.second;
if (primvarBufferData) {
const auto it = primvarBuffers->find(primvarName);
auto& primvarBufferData = entry.second;
if (!primvarBufferData.empty()) {
const auto it = primvarBuffers->find(entry.first);
if (it != primvarBuffers->end()) {
MHWRender::MVertexBuffer* primvarBuffer = it->second.get();
if (primvarBuffer) {
primvarBuffer->commit(primvarBufferData);
if (auto primvarBuffer = it->second.get()) {
const auto& desc = primvarBuffer->descriptor();
unsigned int numElems
= primvarBufferData.size() / (desc.dataTypeSize() * desc.dimension());
primvarBuffer->update(&primvarBufferData[0], 0, numElems, true);
}
}
}
Expand Down Expand Up @@ -1311,7 +1313,7 @@ void HdVP2BasisCurves::_InitRepr(TfToken const& reprToken, HdDirtyBits* dirtyBit

switch (desc.geomStyle) {
case HdBasisCurvesGeomStylePatch:
renderItem = _CreatePatchRenderItem(renderItemName);
renderItem = _CreatePatchRenderItem(renderItemName, reprToken);
drawItem->AddUsage(HdVP2DrawItem::kSelectionHighlight);
#ifdef HAS_DEFAULT_MATERIAL_SUPPORT_API
renderItem->setDefaultMaterialHandling(MRenderItem::SkipWhenDefaultMaterialActive);
Expand Down Expand Up @@ -1349,7 +1351,8 @@ void HdVP2BasisCurves::_InitRepr(TfToken const& reprToken, HdDirtyBits* dirtyBit
kOpaqueGray,
MSelectionMask::kSelectNurbsCurves,
MHWRender::MFrameContext::kExcludeNurbsCurves);
renderItem->setDrawMode(MHWRender::MGeometry::kAll);
renderItem->setDrawMode(static_cast<MHWRender::MGeometry::DrawMode>(
MHWRender::MGeometry::kShaded | MHWRender::MGeometry::kTextured));
drawItem->AddUsage(HdVP2DrawItem::kSelectionHighlight);
renderItem->setDefaultMaterialHandling(
MRenderItem::DrawOnlyWhenDefaultMaterialActive);
Expand Down Expand Up @@ -1400,7 +1403,7 @@ void HdVP2BasisCurves::_UpdateRepr(HdSceneDelegate* sceneDelegate, TfToken const
HdVP2DrawItem* drawItem
= static_cast<HdVP2DrawItem*>(repr->GetDrawItem(drawItemIndex++));
if (drawItem) {
_UpdateDrawItem(sceneDelegate, drawItem, desc);
_UpdateDrawItem(sceneDelegate, drawItem, reprToken, desc);
}
}
}
Expand Down Expand Up @@ -1451,13 +1454,21 @@ void HdVP2BasisCurves::_UpdatePrimvarSources(

/*! \brief Create render item for smoothHull repr.
*/
MHWRender::MRenderItem* HdVP2BasisCurves::_CreatePatchRenderItem(const MString& name) const
MHWRender::MRenderItem*
HdVP2BasisCurves::_CreatePatchRenderItem(const MString& name, const TfToken& reprToken) const
{
MHWRender::MRenderItem* const renderItem = MHWRender::MRenderItem::Create(
name, MHWRender::MRenderItem::MaterialSceneItem, MHWRender::MGeometry::kLines);

renderItem->setDrawMode(static_cast<MHWRender::MGeometry::DrawMode>(
MHWRender::MGeometry::kShaded | MHWRender::MGeometry::kTextured));
MHWRender::MGeometry::DrawMode drawMode = static_cast<MHWRender::MGeometry::DrawMode>(
MHWRender::MGeometry::kShaded | MHWRender::MGeometry::kTextured);
if (reprToken == HdReprTokens->smoothHull) {
drawMode = MHWRender::MGeometry::kTextured;
} else if (reprToken == HdVP2ReprTokens->smoothHullUntextured) {
drawMode = MHWRender::MGeometry::kShaded;
}

renderItem->setDrawMode(drawMode);
renderItem->castsShadows(false);
renderItem->receivesShadows(false);
renderItem->setShader(_delegate->Get3dSolidShader(kOpaqueGray));
Expand Down
4 changes: 3 additions & 1 deletion lib/mayaUsd/render/vp2RenderDelegate/basisCurves.h
Original file line number Diff line number Diff line change
Expand Up @@ -139,14 +139,16 @@ class HdVP2BasisCurves final
void _UpdateDrawItem(
HdSceneDelegate* sceneDelegate,
HdVP2DrawItem* drawItem,
const TfToken& reprToken,
HdBasisCurvesReprDesc const& desc);

void _UpdatePrimvarSources(
HdSceneDelegate* sceneDelegate,
HdDirtyBits dirtyBits,
TfTokenVector const& requiredPrimvars);

MHWRender::MRenderItem* _CreatePatchRenderItem(const MString& name) const;
MHWRender::MRenderItem*
_CreatePatchRenderItem(const MString& name, const TfToken& reprToken) const;

enum DirtyBits : HdDirtyBits
{
Expand Down
Loading