Skip to content

Commit 8b1451e

Browse files
committed
- In GetPrim(), we check for a prim data source before creating a
HdPrman_UpdateObjectSettings_DataSource. This avoids the need to do the same check in the new data source. - In _UpdatePrimvars(), we don't need to check the result of primvars.GetPrimvar(), which removes one level of nesting. (Internal change: 2347503)
1 parent 29a46f7 commit 8b1451e

File tree

1 file changed

+74
-81
lines changed

1 file changed

+74
-81
lines changed

third_party/renderman-26/plugin/hdPrman/updateObjectSettingsSceneIndex.cpp

Lines changed: 74 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -57,74 +57,71 @@ _UpdatePrimvars(HdPrimvarsSchema primvars)
5757

5858
// boolean attributes that migrated from string to int
5959
// XXX array loop
60-
if (HdPrimvarSchema primvar =
61-
primvars.GetPrimvar(_tokens->riAttributesDiceRasterOrient)) {
62-
if (HdStringDataSourceHandle strDs =
63-
HdStringDataSource::Cast(primvar.GetPrimvarValue())) {
64-
std::string strVal = strDs->GetTypedValue(0.0f);
65-
bool boolVal = (strVal == "Yes");
66-
// Overlay boolean value
67-
primvarsEditor.Overlay(
68-
HdDataSourceLocator(
69-
_tokens->riAttributesDiceRasterOrient),
70-
HdPrimvarSchema::Builder()
71-
.SetPrimvarValue(
72-
HdRetainedTypedSampledDataSource<bool>::New(boolVal))
73-
.Build());
74-
}
60+
HdPrimvarSchema primvar =
61+
primvars.GetPrimvar(_tokens->riAttributesDiceRasterOrient);
62+
if (HdStringDataSourceHandle strDs =
63+
HdStringDataSource::Cast(primvar.GetPrimvarValue())) {
64+
std::string strVal = strDs->GetTypedValue(0.0f);
65+
bool boolVal = (strVal == "Yes");
66+
// Overlay boolean value
67+
primvarsEditor.Overlay(
68+
HdDataSourceLocator(
69+
_tokens->riAttributesDiceRasterOrient),
70+
HdPrimvarSchema::Builder()
71+
.SetPrimvarValue(
72+
HdRetainedTypedSampledDataSource<bool>::New(boolVal))
73+
.Build());
7574
}
7675

7776
// shade:shadingrate -> dice:micropolygonlength
78-
if (HdPrimvarSchema shadingRate =
79-
primvars.GetPrimvar(_tokens->riAttributesShadeShadingRate)) {
80-
if (primvars.GetPrimvar(_tokens->riAttributesDiceMicropolyonLength)) {
81-
// If micropolygonlength is already set, leave as-is.
82-
} else {
83-
// Convert shadingrate to micropolygonlength
84-
if (HdFloatArrayDataSourceHandle rateDs =
85-
HdFloatArrayDataSource::Cast(shadingRate.GetPrimvarValue())) {
86-
VtArray<float> rateVal = rateDs->GetTypedValue(0.0f);
87-
if (rateVal.size() == 2) {
88-
// Use 1st component only
89-
float shadingRate_0 = rateVal[0];
90-
// micropolygonlength = sqrt(shadingRate[0])
91-
float micropolygonLength = sqrt(shadingRate_0);
92-
primvarsEditor.Overlay(
93-
HdDataSourceLocator(
94-
_tokens->riAttributesDiceMicropolyonLength),
95-
HdPrimvarSchema::Builder()
96-
.SetPrimvarValue(
97-
HdRetainedTypedSampledDataSource<float>::New(
98-
micropolygonLength))
99-
.SetInterpolation(
100-
HdPrimvarSchema::BuildInterpolationDataSource(
101-
HdPrimvarSchemaTokens->constant))
102-
.Build());
103-
}
77+
HdPrimvarSchema shadingRate =
78+
primvars.GetPrimvar(_tokens->riAttributesShadeShadingRate);
79+
if (primvars.GetPrimvar(_tokens->riAttributesDiceMicropolyonLength)) {
80+
// If micropolygonlength is already set, leave as-is.
81+
} else {
82+
// Convert shadingrate to micropolygonlength
83+
if (HdFloatArrayDataSourceHandle rateDs =
84+
HdFloatArrayDataSource::Cast(shadingRate.GetPrimvarValue())) {
85+
VtArray<float> rateVal = rateDs->GetTypedValue(0.0f);
86+
if (rateVal.size() == 2) {
87+
// Use 1st component only
88+
float shadingRate_0 = rateVal[0];
89+
// micropolygonlength = sqrt(shadingRate[0])
90+
float micropolygonLength = sqrt(shadingRate_0);
91+
primvarsEditor.Overlay(
92+
HdDataSourceLocator(
93+
_tokens->riAttributesDiceMicropolyonLength),
94+
HdPrimvarSchema::Builder()
95+
.SetPrimvarValue(
96+
HdRetainedTypedSampledDataSource<float>::New(
97+
micropolygonLength))
98+
.SetInterpolation(
99+
HdPrimvarSchema::BuildInterpolationDataSource(
100+
HdPrimvarSchemaTokens->constant))
101+
.Build());
104102
}
105103
}
106104
// Erase shadingrate
107105
primvarsEditor.Set(
108106
HdDataSourceLocator(_tokens->riAttributesShadeShadingRate),
109107
HdBlockDataSource::New());
110108
}
111-
109+
112110
// trace:displacements:
113111
// Values above 1 are deprecated, and are now equivalent to 1.
114-
if (HdPrimvarSchema traceDisplacements =
115-
primvars.GetPrimvar(_tokens->riAttributesTraceDisplacements)) {
116-
if (HdIntDataSourceHandle intDs =
117-
HdIntDataSource::Cast(traceDisplacements.GetPrimvarValue())) {
118-
if (intDs->GetTypedValue(0) > 1) {
119-
// Overlay a new value of 1
120-
primvarsEditor.Overlay(
121-
HdDataSourceLocator(
122-
_tokens->riAttributesTraceDisplacements),
123-
HdPrimvarSchema::Builder()
124-
.SetPrimvarValue(
125-
HdRetainedTypedSampledDataSource<int>::New(1))
126-
.Build());
127-
}
112+
HdPrimvarSchema traceDisplacements =
113+
primvars.GetPrimvar(_tokens->riAttributesTraceDisplacements);
114+
if (HdIntDataSourceHandle intDs =
115+
HdIntDataSource::Cast(traceDisplacements.GetPrimvarValue())) {
116+
if (intDs->GetTypedValue(0) > 1) {
117+
// Overlay a new value of 1
118+
primvarsEditor.Overlay(
119+
HdDataSourceLocator(
120+
_tokens->riAttributesTraceDisplacements),
121+
HdPrimvarSchema::Builder()
122+
.SetPrimvarValue(
123+
HdRetainedTypedSampledDataSource<int>::New(1))
124+
.Build());
128125
}
129126
}
130127

@@ -141,11 +138,7 @@ class HdPrman_UpdateObjectSettings_DataSource
141138
TfTokenVector
142139
GetNames() override
143140
{
144-
TfTokenVector result;
145-
if (_inputPrimDs) {
146-
result = _inputPrimDs->GetNames();
147-
}
148-
return result;
141+
return _inputPrimDs->GetNames();
149142
}
150143

151144
HdDataSourceBaseHandle
@@ -157,11 +150,7 @@ class HdPrman_UpdateObjectSettings_DataSource
157150
return _UpdatePrimvars(primvars);
158151
}
159152
}
160-
if (_inputPrimDs) {
161-
return _inputPrimDs->Get(name);
162-
}
163-
164-
return nullptr;
153+
return _inputPrimDs->Get(name);
165154
}
166155

167156
protected:
@@ -187,55 +176,59 @@ HdPrman_UpdateObjectSettingsSceneIndex::New(
187176
}
188177

189178
HdPrman_UpdateObjectSettingsSceneIndex::HdPrman_UpdateObjectSettingsSceneIndex(
190-
const HdSceneIndexBaseRefPtr &inputSceneIndex)
179+
const HdSceneIndexBaseRefPtr &inputSceneIndex)
191180
: HdSingleInputFilteringSceneIndexBase(inputSceneIndex)
192181
{ }
193182

194183
HdSceneIndexPrim
195184
HdPrman_UpdateObjectSettingsSceneIndex::GetPrim(
196-
const SdfPath &primPath) const
185+
const SdfPath &primPath) const
197186
{
198187
const HdSceneIndexPrim prim = _GetInputSceneIndex()->GetPrim(primPath);
199-
return {
200-
prim.primType,
201-
HdPrman_UpdateObjectSettings_DataSource::New(prim.dataSource)
202-
};
188+
189+
if (prim.dataSource) {
190+
return {
191+
prim.primType,
192+
HdPrman_UpdateObjectSettings_DataSource::New(prim.dataSource)
193+
};
194+
}
195+
return prim;
203196
}
204197

205198
SdfPathVector
206199
HdPrman_UpdateObjectSettingsSceneIndex::GetChildPrimPaths(
207-
const SdfPath &primPath) const
200+
const SdfPath &primPath) const
208201
{
209202
return _GetInputSceneIndex()->GetChildPrimPaths(primPath);
210203
}
211204

212205
void
213206
HdPrman_UpdateObjectSettingsSceneIndex::_PrimsAdded(
214-
const HdSceneIndexBase &sender,
215-
const HdSceneIndexObserver::AddedPrimEntries &entries)
207+
const HdSceneIndexBase &sender,
208+
const HdSceneIndexObserver::AddedPrimEntries &entries)
216209
{
217210
_SendPrimsAdded(entries);
218211
}
219212

220213
void
221214
HdPrman_UpdateObjectSettingsSceneIndex::_PrimsRemoved(
222-
const HdSceneIndexBase &sender,
223-
const HdSceneIndexObserver::RemovedPrimEntries &entries)
215+
const HdSceneIndexBase &sender,
216+
const HdSceneIndexObserver::RemovedPrimEntries &entries)
224217
{
225218
_SendPrimsRemoved(entries);
226219
}
227220

228221
void
229222
HdPrman_UpdateObjectSettingsSceneIndex::_PrimsDirtied(
230-
const HdSceneIndexBase &sender,
231-
const HdSceneIndexObserver::DirtiedPrimEntries &entries)
223+
const HdSceneIndexBase &sender,
224+
const HdSceneIndexObserver::DirtiedPrimEntries &entries)
232225
{
233226
// XXX transfer primvar dirtiness
234227
_SendPrimsDirtied(entries);
235228
}
236229

237-
HdPrman_UpdateObjectSettingsSceneIndex::~HdPrman_UpdateObjectSettingsSceneIndex()
238-
= default;
230+
HdPrman_UpdateObjectSettingsSceneIndex::
231+
~HdPrman_UpdateObjectSettingsSceneIndex() = default;
239232

240233
PXR_NAMESPACE_CLOSE_SCOPE
241234

0 commit comments

Comments
 (0)