mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-08-10 07:57:20 +02:00
Accomodate the caching Model
This commit is contained in:
parent
a262d9960c
commit
581bbea36e
2 changed files with 21 additions and 4 deletions
|
@ -242,6 +242,18 @@ const QVariantMap Geometry::getTextures() const {
|
||||||
return textures;
|
return textures;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FIXME: The materials should only be copied when modified, but the Model currently caches the original
|
||||||
|
Geometry::Geometry(const Geometry& geometry) {
|
||||||
|
_geometry = geometry._geometry;
|
||||||
|
_meshes = geometry._meshes;
|
||||||
|
_shapes = geometry._shapes;
|
||||||
|
|
||||||
|
_materials.reserve(geometry._materials.size());
|
||||||
|
for (const auto& material : geometry._materials) {
|
||||||
|
_materials.push_back(std::make_shared<NetworkMaterial>(*material));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void Geometry::setTextures(const QVariantMap& textureMap) {
|
void Geometry::setTextures(const QVariantMap& textureMap) {
|
||||||
if (_meshes->size() > 0) {
|
if (_meshes->size() > 0) {
|
||||||
for (auto& material : _materials) {
|
for (auto& material : _materials) {
|
||||||
|
@ -249,10 +261,12 @@ void Geometry::setTextures(const QVariantMap& textureMap) {
|
||||||
if (std::any_of(material->_textures.cbegin(), material->_textures.cend(),
|
if (std::any_of(material->_textures.cbegin(), material->_textures.cend(),
|
||||||
[&textureMap](const NetworkMaterial::Textures::value_type& it) { return it.texture && textureMap.contains(it.name); })) {
|
[&textureMap](const NetworkMaterial::Textures::value_type& it) { return it.texture && textureMap.contains(it.name); })) {
|
||||||
|
|
||||||
if (material->isOriginal()) {
|
// FIXME: The Model currently caches the materials (waste of space!)
|
||||||
// Copy the material to avoid mutating the cached version
|
// so they must be copied in the Geometry copy-ctor
|
||||||
material = std::make_shared<NetworkMaterial>(*material);
|
// if (material->isOriginal()) {
|
||||||
}
|
// // Copy the material to avoid mutating the cached version
|
||||||
|
// material = std::make_shared<NetworkMaterial>(*material);
|
||||||
|
//}
|
||||||
|
|
||||||
material->setTextures(textureMap);
|
material->setTextures(textureMap);
|
||||||
_areTexturesLoaded = false;
|
_areTexturesLoaded = false;
|
||||||
|
|
|
@ -56,6 +56,9 @@ class Geometry {
|
||||||
public:
|
public:
|
||||||
using Pointer = std::shared_ptr<Geometry>;
|
using Pointer = std::shared_ptr<Geometry>;
|
||||||
|
|
||||||
|
Geometry() = default;
|
||||||
|
Geometry(const Geometry& geometry);
|
||||||
|
|
||||||
// Immutable over lifetime
|
// Immutable over lifetime
|
||||||
using NetworkMeshes = std::vector<std::shared_ptr<const NetworkMesh>>;
|
using NetworkMeshes = std::vector<std::shared_ptr<const NetworkMesh>>;
|
||||||
using NetworkShapes = std::vector<std::shared_ptr<const NetworkShape>>;
|
using NetworkShapes = std::vector<std::shared_ptr<const NetworkShape>>;
|
||||||
|
|
Loading…
Reference in a new issue