Skip to content

Commit f44e94c

Browse files
committed
[hdSt] Indexed faceVarying and element primvar native support
1 parent 9f3bd84 commit f44e94c

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

46 files changed

+1328
-250
lines changed

pxr/imaging/hd/drawingCoord.h

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,10 @@ PXR_NAMESPACE_OPEN_SCOPE
6262
/// instance level=0 ---> [ k ]
6363
/// instance level=1 ---> [k+1]
6464
/// instance level=2 ---> [k+2]
65+
/// ...
66+
/// indexed primvar=0 --> [ x ]
67+
/// indexed primvar=1 --> [x+1]
68+
/// indexed primvar=2 --> [x+2]
6569
///
6670
class HdDrawingCoord {
6771
public:
@@ -73,13 +77,16 @@ class HdDrawingCoord {
7377
// default slots:
7478
_topology(2),
7579
_instancePrimvar(Unassigned),
80+
_indexedPrimvar(Unassigned),
81+
_indexedPrimvarCount(0),
7682
_constantPrimvar(0),
7783
_vertexPrimvar(1),
7884
_elementPrimvar(3),
7985
_instanceIndex(4),
8086
_faceVaryingPrimvar(5),
8187
_topologyVisibility(6),
82-
_varyingPrimvar(7) {
88+
_varyingPrimvar(7)
89+
{
8390
}
8491

8592
int GetConstantPrimvarIndex() const { return _constantPrimvar; }
@@ -106,9 +113,31 @@ class HdDrawingCoord {
106113
return _instancePrimvar + level;
107114
}
108115

116+
// indexed primvars take up a range of slots.
117+
void SetIndexedPrimvarSlotRange(int base, int count) {
118+
_indexedPrimvar = base;
119+
_indexedPrimvarCount = count;
120+
}
121+
122+
int GetIndexedPrimvarCount() const {
123+
return _indexedPrimvarCount;
124+
}
125+
126+
int GetIndexedPrimvarIndex(int channel) const {
127+
TF_VERIFY(_indexedPrimvar != Unassigned);
128+
TF_VERIFY(channel < _indexedPrimvarCount);
129+
return _indexedPrimvar + channel;
130+
}
131+
132+
int GetTotalDrawCoordCount() const {
133+
return _indexedPrimvar + _indexedPrimvarCount;
134+
}
135+
109136
private:
110137
int16_t _topology;
111138
int16_t _instancePrimvar;
139+
int16_t _indexedPrimvar;
140+
int8_t _indexedPrimvarCount;
112141
int8_t _constantPrimvar;
113142
int8_t _vertexPrimvar;
114143
int8_t _elementPrimvar;

pxr/imaging/hd/meshUtil.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -341,6 +341,10 @@ HdMeshUtil::ComputeTriangulatedFaceVaryingPrimvar(void const* source,
341341
bool flip = (_topology->GetOrientation() != HdTokens->rightHanded);
342342

343343
switch (dataType) {
344+
case HdTypeInt32:
345+
_TriangulateFaceVarying<int32_t>(_id, faceVertexCounts, holeFaces, flip,
346+
source, numElements, triangulated);
347+
break;
344348
case HdTypeFloat:
345349
return _TriangulateFaceVarying<float>(_id, faceVertexCounts, holeFaces, flip,
346350
source, numElements, triangulated);

pxr/imaging/hd/tokens.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ PXR_NAMESPACE_OPEN_SCOPE
4444
(drawingCoord1) \
4545
(drawingCoord2) \
4646
(drawingCoordI) \
47+
(drawingCoordX) \
4748
(drivers) \
4849
(edgeIndices) \
4950
(elementCount) \

pxr/imaging/hdSt/CMakeLists.txt

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -523,6 +523,16 @@ pxr_build_test(testHdStPrimvars
523523
CPPFILES
524524
testenv/testHdStPrimvars.cpp
525525
)
526+
pxr_build_test(testHdStIndexedPrimvars
527+
LIBRARIES
528+
hdSt
529+
hd
530+
vt
531+
tf
532+
gf
533+
CPPFILES
534+
testenv/testHdStIndexedPrimvars.cpp
535+
)
526536
pxr_build_test(testHdStQuadrangulation
527537
LIBRARIES
528538
hdSt
@@ -744,6 +754,10 @@ pxr_install_test_dir(
744754
SRC testenv/testHdStPrimvars
745755
DEST testHdStPrimvars
746756
)
757+
pxr_install_test_dir(
758+
SRC testenv/testHdStIndexedPrimvars
759+
DEST testHdStIndexedPrimvars
760+
)
747761
pxr_install_test_dir(
748762
SRC testenv/testHdStSamplerObjectRegistry
749763
DEST testHdStSamplerObjectRegistry
@@ -3008,6 +3022,21 @@ pxr_register_test(testHdStPrimvars
30083022
HDST_ENABLE_MATERIAL_PRIMVAR_FILTERING=0
30093023
TF_DEBUG=HD_SAFE_MODE
30103024
)
3025+
pxr_register_test(testHdStIndexedPrimvars
3026+
COMMAND "${CMAKE_INSTALL_PREFIX}/tests/testHdStIndexedPrimvars --offscreen"
3027+
EXPECTED_RETURN_CODE 0
3028+
IMAGE_DIFF_COMPARE
3029+
testHdStIndexedPrimvars_before.png
3030+
testHdStIndexedPrimvars_replaceColor.png
3031+
testHdStIndexedPrimvars_replaceOpacity.png
3032+
testHdStIndexedPrimvars_partialDirty.png
3033+
FAIL 1
3034+
FAIL_PERCENT 1
3035+
PERCEPTUAL
3036+
TESTENV testHdStIndexedPrimvars
3037+
ENV
3038+
TF_DEBUG=HD_SAFE_MODE
3039+
)
30113040
pxr_register_test(testHdStQuadrangulation
30123041
COMMAND "${CMAKE_INSTALL_PREFIX}/tests/testHdStQuadrangulation"
30133042
EXPECTED_RETURN_CODE 0

0 commit comments

Comments
 (0)