History

fix crash setting model texture

(cherry picked from commit b152bf02af4eb17cf5c169ca9c577154c83901f7)

howard-stearns committed 8 years ago

Commit df0ecb41 parent 1646f542 files · +7 −8Browse files

Showing the changes to libraries/render-utils/src/Model.cpp (1 of 2 files). Show all

Unified · Split

libraries/render-utils/src/Model.cpp+6−7
@@ -1074,15 +1074,11 @@ int Model::getLastFreeJointIndex(int jointIndex) const { · 1073 unmodified lines
1074 1074
1075void Model::setTextures(const QVariantMap& textures) {1075void Model::setTextures(const QVariantMap& textures) {
1076 if (isLoaded()) {1076 if (isLoaded()) {
1077 _needsUpdateTextures = true;1077 _pendingTextures.clear();
1078 _needsFixupInScene = true;1078 _needsFixupInScene = true;
1079 _renderGeometry->setTextures(textures);1079 _renderGeometry->setTextures(textures);
1080 } else {1080 } else {
1081 // FIXME(Huffman): Disconnect previously connected lambdas so we don't set textures multiple1081 _pendingTextures = textures;
1082 // after the geometry has finished loading.
1083 connect(&_renderWatcher, &GeometryResourceWatcher::finished, this, [this, textures]() {
1084 _renderGeometry->setTextures(textures);
1085 });
1086 }1082 }
1087}1083}
1088 1084
@@ -1106,7 +1102,8 @@ void Model::setURL(const QUrl& url) { · 17 unmodified lines
1106 }1102 }
1107 1103
1108 _needsReload = true;1104 _needsReload = true;
1109 _needsUpdateTextures = true;1105 // One might be tempted to _pendingTextures.clear(), thinking that a new URL means an old texture doesn't apply.
1106 // But sometimes, particularly when first setting the values, the texture might be set first. So let's not clear here.
1110 _visualGeometryRequestFailed = false;1107 _visualGeometryRequestFailed = false;
1111 _needsFixupInScene = true;1108 _needsFixupInScene = true;
1112 invalidCalculatedMeshBoxes();1109 invalidCalculatedMeshBoxes();
@@ -1123,6 +1120,8 @@ void Model::setURL(const QUrl& url) { · 10 unmodified lines
1123void Model::loadURLFinished(bool success) {1120void Model::loadURLFinished(bool success) {
1124 if (!success) {1121 if (!success) {
1125 _visualGeometryRequestFailed = true;1122 _visualGeometryRequestFailed = true;
1123 } else if (!_pendingTextures.empty()) {
1124 setTextures(_pendingTextures);
1126 }1125 }
1127 emit setURLFinished(success);1126 emit setURLFinished(success);
1128}1127}