Skip to content

Commit

Permalink
Cleanup
Browse files Browse the repository at this point in the history
  • Loading branch information
lilleyse committed Nov 9, 2023
1 parent 7f27f33 commit 1c49da5
Show file tree
Hide file tree
Showing 9 changed files with 87 additions and 123 deletions.
6 changes: 3 additions & 3 deletions src/core/include/cesium/omniverse/FabricMaterial.h
Original file line number Diff line number Diff line change
Expand Up @@ -41,9 +41,9 @@ class FabricMaterial {
const glm::dvec3& displayColor,
double displayOpacity,
const std::unordered_map<uint64_t, uint64_t>& texcoordIndexMapping,
const std::vector<uint64_t>& featureIdIndexIndexMapping,
const std::vector<uint64_t>& featureIdAttributeIndexMapping,
const std::vector<uint64_t>& featureIdTextureIndexMapping);
const std::vector<uint64_t>& featureIdIndexSetIndexMapping,
const std::vector<uint64_t>& featureIdAttributeSetIndexMapping,
const std::vector<uint64_t>& featureIdTextureSetIndexMapping);

void setImageryLayer(
const std::shared_ptr<FabricTexture>& texture,
Expand Down
3 changes: 0 additions & 3 deletions src/core/include/cesium/omniverse/FabricMaterialDefinition.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,6 @@ class FabricMaterialDefinition {
[[nodiscard]] bool hasVertexColors() const;
[[nodiscard]] bool hasBaseColorTexture() const;
[[nodiscard]] const std::vector<FeatureIdType>& getFeatureIdTypes() const;
[[nodiscard]] uint64_t getFeatureIdIndexCount() const;
[[nodiscard]] uint64_t getFeatureIdAttributeCount() const;
[[nodiscard]] uint64_t getFeatureIdTextureCount() const;
[[nodiscard]] uint64_t getImageryLayerCount() const;
[[nodiscard]] bool hasTilesetMaterial() const;
[[nodiscard]] const pxr::SdfPath& getTilesetMaterialPath() const;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,9 @@ struct FabricMesh {
FeaturesInfo featuresInfo;
std::unordered_map<uint64_t, uint64_t> texcoordIndexMapping;
std::unordered_map<uint64_t, uint64_t> imageryTexcoordIndexMapping;
std::vector<uint64_t> featureIdIndexIndexMapping;
std::vector<uint64_t> featureIdAttributeIndexMapping;
std::vector<uint64_t> featureIdTextureIndexMapping;
std::vector<uint64_t> featureIdIndexSetIndexMapping;
std::vector<uint64_t> featureIdAttributeSetIndexMapping;
std::vector<uint64_t> featureIdTextureSetIndexMapping;
};

struct TileRenderResources {
Expand Down
5 changes: 5 additions & 0 deletions src/core/include/cesium/omniverse/GltfUtil.h
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,11 @@ struct FeaturesInfo {
std::vector<FeatureId> featureIds;
};

FeatureIdType getFeatureIdType(const FeatureId& featureId);
std::vector<FeatureIdType> getFeatureIdTypes(const FeaturesInfo& featuresInfo);
std::vector<uint64_t> getSetIndexMapping(const FeaturesInfo& featuresInfo, FeatureIdType type);
bool hasFeatureIdType(const FeaturesInfo& featuresInfo, FeatureIdType type);

struct VertexAttributeInfo {
VertexAttributeType type;
omni::fabric::Token fabricAttributeName;
Expand Down
14 changes: 1 addition & 13 deletions src/core/src/FabricGeometryDefinition.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,26 +11,14 @@

namespace cesium::omniverse {

bool hasVertexIds(const FeaturesInfo& featuresInfo) {
const auto& featureIds = featuresInfo.featureIds;

for (const auto& featureId : featureIds) {
if (std::holds_alternative<std::monostate>(featureId.featureIdStorage)) {
return true;
}
}

return false;
}

FabricGeometryDefinition::FabricGeometryDefinition(
const CesiumGltf::Model& model,
const CesiumGltf::MeshPrimitive& primitive,
const FeaturesInfo& featuresInfo,
bool smoothNormals)
: _hasNormals(GltfUtil::hasNormals(model, primitive, smoothNormals))
, _hasVertexColors(GltfUtil::hasVertexColors(model, primitive, 0))
, _hasVertexIds(::cesium::omniverse::hasVertexIds(featuresInfo))
, _hasVertexIds(hasFeatureIdType(featuresInfo, FeatureIdType::INDEX))
, _texcoordSetCount(
GltfUtil::getTexcoordSetIndexes(model, primitive).size() +
GltfUtil::getImageryTexcoordSetIndexes(model, primitive).size())
Expand Down
12 changes: 6 additions & 6 deletions src/core/src/FabricMaterial.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -584,9 +584,9 @@ void FabricMaterial::setMaterial(
const glm::dvec3& displayColor,
double displayOpacity,
const std::unordered_map<uint64_t, uint64_t>& texcoordIndexMapping,
const std::vector<uint64_t>& featureIdIndexIndexMapping,
const std::vector<uint64_t>& featureIdAttributeIndexMapping,
const std::vector<uint64_t>& featureIdTextureIndexMapping) {
const std::vector<uint64_t>& featureIdIndexSetIndexMapping,
const std::vector<uint64_t>& featureIdAttributeSetIndexMapping,
const std::vector<uint64_t>& featureIdTextureSetIndexMapping) {

if (stageDestroyed()) {
return;
Expand Down Expand Up @@ -618,7 +618,7 @@ void FabricMaterial::setMaterial(
const auto featureIdCounts = getFeatureIdCounts(_materialDefinition);

for (uint64_t i = 0; i < featureIdCounts.indexCount; i++) {
const auto featureIdSetIndex = featureIdIndexIndexMapping[i];
const auto featureIdSetIndex = featureIdIndexSetIndexMapping[i];
const auto featureId = featuresInfo.featureIds[featureIdSetIndex];
assert(std::holds_alternative<std::monostate>(featureId.featureIdStorage));
const auto& featureIdPath = _featureIdPaths[featureIdSetIndex];
Expand All @@ -628,7 +628,7 @@ void FabricMaterial::setMaterial(
}

for (uint64_t i = 0; i < featureIdCounts.attributeCount; i++) {
const auto featureIdSetIndex = featureIdAttributeIndexMapping[i];
const auto featureIdSetIndex = featureIdAttributeSetIndexMapping[i];
const auto featureId = featuresInfo.featureIds[featureIdSetIndex];
assert(std::holds_alternative<uint64_t>(featureId.featureIdStorage));
const auto attributeSetIndex = std::get<uint64_t>(featureId.featureIdStorage);
Expand All @@ -640,7 +640,7 @@ void FabricMaterial::setMaterial(
}

for (uint64_t i = 0; i < featureIdCounts.textureCount; i++) {
const auto featureIdSetIndex = featureIdTextureIndexMapping[i];
const auto featureIdSetIndex = featureIdTextureSetIndexMapping[i];
const auto& featureId = featuresInfo.featureIds[featureIdSetIndex];
assert(std::holds_alternative<TextureInfo>(featureId.featureIdStorage));
const auto& textureInfo = std::get<TextureInfo>(featureId.featureIdStorage);
Expand Down
36 changes: 6 additions & 30 deletions src/core/src/FabricMaterialDefinition.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,28 +12,16 @@
namespace cesium::omniverse {

namespace {
std::vector<FeatureIdType> filterFeatureIdTypes(const FeaturesInfo& featuresInfo, bool disableTextures) {
auto featureIdTypes = getFeatureIdTypes(featuresInfo);

std::vector<FeatureIdType> getFeatureIdTypes(const FeaturesInfo& featuresInfo, bool disableTextures) {
const auto& featureIds = featuresInfo.featureIds;

std::vector<FeatureIdType> featureIdTypes;
featureIdTypes.reserve(featureIds.size());

for (const auto& featureId : featureIds) {
if (std::holds_alternative<std::monostate>(featureId.featureIdStorage)) {
featureIdTypes.push_back(FeatureIdType::INDEX);
} else if (std::holds_alternative<uint64_t>(featureId.featureIdStorage)) {
featureIdTypes.push_back(FeatureIdType::ATTRIBUTE);
} else if (std::holds_alternative<TextureInfo>(featureId.featureIdStorage)) {
if (!disableTextures) {
featureIdTypes.push_back(FeatureIdType::TEXTURE);
}
}
if (disableTextures) {
featureIdTypes.erase(
std::remove(featureIdTypes.begin(), featureIdTypes.end(), FeatureIdType::TEXTURE), featureIdTypes.end());
}

return featureIdTypes;
}

} // namespace

FabricMaterialDefinition::FabricMaterialDefinition(
Expand All @@ -44,7 +32,7 @@ FabricMaterialDefinition::FabricMaterialDefinition(
const pxr::SdfPath& tilesetMaterialPath)
: _hasVertexColors(materialInfo.hasVertexColors)
, _hasBaseColorTexture(disableTextures ? false : materialInfo.baseColorTexture.has_value())
, _featureIdTypes(::cesium::omniverse::getFeatureIdTypes(featuresInfo, disableTextures))
, _featureIdTypes(filterFeatureIdTypes(featuresInfo, disableTextures))
, _imageryLayerCount(disableTextures ? 0 : imageryLayerCount)
, _tilesetMaterialPath(tilesetMaterialPath) {}

Expand All @@ -60,18 +48,6 @@ const std::vector<FeatureIdType>& FabricMaterialDefinition::getFeatureIdTypes()
return _featureIdTypes;
}

uint64_t FabricMaterialDefinition::getFeatureIdIndexCount() const {
return static_cast<uint64_t>(std::count(_featureIdTypes.begin(), _featureIdTypes.end(), FeatureIdType::INDEX));
}

uint64_t FabricMaterialDefinition::getFeatureIdAttributeCount() const {
return static_cast<uint64_t>(std::count(_featureIdTypes.begin(), _featureIdTypes.end(), FeatureIdType::ATTRIBUTE));
}

uint64_t FabricMaterialDefinition::getFeatureIdTextureCount() const {
return static_cast<uint64_t>(std::count(_featureIdTypes.begin(), _featureIdTypes.end(), FeatureIdType::TEXTURE));
}

uint64_t FabricMaterialDefinition::getImageryLayerCount() const {
return _imageryLayerCount;
}
Expand Down
75 changes: 10 additions & 65 deletions src/core/src/FabricPrepareRenderResources.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -64,23 +64,8 @@ uint64_t getFeatureIdTextureCount(const FabricMesh& fabricMesh) {
return 0;
}

return fabricMesh.material->getMaterialDefinition().getFeatureIdTextureCount();
}

uint64_t getFeatureIdAttributeCount(const FabricMesh& fabricMesh) {
if (fabricMesh.material == nullptr) {
return 0;
}

return fabricMesh.material->getMaterialDefinition().getFeatureIdAttributeCount();
}

uint64_t getFeatureIdIndexCount(const FabricMesh& fabricMesh) {
if (fabricMesh.material == nullptr) {
return 0;
}

return fabricMesh.material->getMaterialDefinition().getFeatureIdIndexCount();
const auto& featureIdTypes = fabricMesh.material->getMaterialDefinition().getFeatureIdTypes();
return static_cast<uint64_t>(std::count(featureIdTypes.begin(), featureIdTypes.end(), FeatureIdType::TEXTURE));
}

std::vector<MeshInfo>
Expand Down Expand Up @@ -183,50 +168,10 @@ std::vector<FabricMesh> acquireFabricMeshes(
fabricMesh.imageryTexcoordIndexMapping[gltfSetIndex] = primvarStIndex++;
}

// Map feature id texture index to set index
const auto featureIdTextureCount = getFeatureIdTextureCount(fabricMesh);
fabricMesh.featureIdTextureIndexMapping.reserve(featureIdTextureCount);
for (uint64_t i = 0; i < featureIdTextureCount; i++) {
uint64_t seenTextures = 0;
for (uint64_t setIndex = 0; setIndex < featuresInfo.featureIds.size(); setIndex++) {
if (std::holds_alternative<TextureInfo>(featuresInfo.featureIds[setIndex].featureIdStorage)) {
if (seenTextures++ == i) {
fabricMesh.featureIdTextureIndexMapping.push_back(setIndex);
}
}
}
}
assert(fabricMesh.featureIdTextureIndexMapping.size() == featureIdTextureCount);

// Map feature id attribute index to set index
const auto featureIdAttributeCount = getFeatureIdAttributeCount(fabricMesh);
fabricMesh.featureIdAttributeIndexMapping.reserve(featureIdAttributeCount);
for (uint64_t i = 0; i < featureIdAttributeCount; i++) {
uint64_t seenAttributes = 0;
for (uint64_t setIndex = 0; setIndex < featuresInfo.featureIds.size(); setIndex++) {
if (std::holds_alternative<uint64_t>(featuresInfo.featureIds[setIndex].featureIdStorage)) {
if (seenAttributes++ == i) {
fabricMesh.featureIdAttributeIndexMapping.push_back(setIndex);
}
}
}
}
assert(fabricMesh.featureIdAttributeIndexMapping.size() == featureIdAttributeCount);

// Map feature id index index to set index
const auto featureIdIndexCount = getFeatureIdIndexCount(fabricMesh);
fabricMesh.featureIdIndexIndexMapping.reserve(featureIdIndexCount);
for (uint64_t i = 0; i < featureIdIndexCount; i++) {
uint64_t seenIndexes = 0;
for (uint64_t setIndex = 0; setIndex < featuresInfo.featureIds.size(); setIndex++) {
if (std::holds_alternative<uint64_t>(featuresInfo.featureIds[setIndex].featureIdStorage)) {
if (seenIndexes++ == i) {
fabricMesh.featureIdIndexIndexMapping.push_back(setIndex);
}
}
}
}
assert(fabricMesh.featureIdIndexIndexMapping.size() == featureIdIndexCount);
// Map feature id types to set indexes
fabricMesh.featureIdIndexSetIndexMapping = getSetIndexMapping(featuresInfo, FeatureIdType::INDEX);
fabricMesh.featureIdAttributeSetIndexMapping = getSetIndexMapping(featuresInfo, FeatureIdType::ATTRIBUTE);
fabricMesh.featureIdTextureSetIndexMapping = getSetIndexMapping(featuresInfo, FeatureIdType::TEXTURE);
}

return fabricMeshes;
Expand All @@ -251,7 +196,7 @@ void setFabricTextures(

const auto featureIdTextureCount = getFeatureIdTextureCount(mesh);
for (uint64_t j = 0; j < featureIdTextureCount; j++) {
const auto featureIdSetIndex = mesh.featureIdTextureIndexMapping[j];
const auto featureIdSetIndex = mesh.featureIdTextureSetIndexMapping[j];
const auto featureIdTextureImage = GltfUtil::getFeatureIdTextureImage(model, primitive, featureIdSetIndex);
assert(featureIdTextureImage);
mesh.featureIdTextures[j]->setImage(*featureIdTextureImage, TransferFunction::LINEAR);
Expand Down Expand Up @@ -300,9 +245,9 @@ void setFabricMeshes(
displayColor,
displayOpacity,
mesh.texcoordIndexMapping,
mesh.featureIdIndexIndexMapping,
mesh.featureIdAttributeIndexMapping,
mesh.featureIdTextureIndexMapping);
mesh.featureIdIndexSetIndexMapping,
mesh.featureIdAttributeSetIndexMapping,
mesh.featureIdTextureSetIndexMapping);

geometry->setMaterial(material->getPath());
} else if (!tilesetMaterialPath.IsEmpty()) {
Expand Down
53 changes: 53 additions & 0 deletions src/core/src/GltfUtil.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -807,6 +807,59 @@ bool hasMaterial(const CesiumGltf::MeshPrimitive& primitive) {

namespace cesium::omniverse {

FeatureIdType getFeatureIdType(const FeatureId& featureId) {
if (std::holds_alternative<std::monostate>(featureId.featureIdStorage)) {
return FeatureIdType::INDEX;
} else if (std::holds_alternative<uint64_t>(featureId.featureIdStorage)) {
return FeatureIdType::ATTRIBUTE;
} else if (std::holds_alternative<TextureInfo>(featureId.featureIdStorage)) {
return FeatureIdType::TEXTURE;
}

assert(false);
return FeatureIdType::INDEX;
}

std::vector<FeatureIdType> getFeatureIdTypes(const FeaturesInfo& featuresInfo) {
const auto& featureIds = featuresInfo.featureIds;

std::vector<FeatureIdType> featureIdTypes;
featureIdTypes.reserve(featureIds.size());

for (const auto& featureId : featureIds) {
featureIdTypes.push_back(getFeatureIdType(featureId));
}

return featureIdTypes;
}

std::vector<uint64_t> getSetIndexMapping(const FeaturesInfo& featuresInfo, FeatureIdType type) {
const auto& featureIds = featuresInfo.featureIds;

std::vector<uint64_t> setIndexMapping;
setIndexMapping.reserve(featureIds.size());

for (uint64_t i = 0; i < featureIds.size(); i++) {
if (getFeatureIdType(featureIds[i]) == type) {
setIndexMapping.push_back(i);
}
}

return setIndexMapping;
}

bool hasFeatureIdType(const FeaturesInfo& featuresInfo, FeatureIdType type) {
const auto& featureIds = featuresInfo.featureIds;

for (const auto& featureId : featureIds) {
if (getFeatureIdType(featureId) == type) {
return true;
}
}

return false;
}

// In C++ 20 we can use the default equality comparison (= default)
bool TextureInfo::operator==(const TextureInfo& other) const {
return offset == other.offset && rotation == other.rotation && scale == other.scale && setIndex == other.setIndex &&
Expand Down

0 comments on commit 1c49da5

Please sign in to comment.