diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index 40e350dcb7..8f5f46c1e4 100644 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -528,7 +528,7 @@ void MyAvatar::loadData(QSettings* settings) { setScale(_scale); Application::getInstance()->getCamera()->setScale(_scale); - setFaceModelURL(settings->value("faceModelURL").toUrl()); + setFaceModelURL(settings->value("faceModelURL", DEFAULT_HEAD_MODEL_URL).toUrl()); setSkeletonModelURL(settings->value("skeletonModelURL").toUrl()); setDisplayName(settings->value("displayName").toString()); @@ -618,7 +618,7 @@ void MyAvatar::setSkeletonModelURL(const QUrl& skeletonModelURL) { _billboardValid = false; } -void MyAvatar::renderBody(RenderMode renderMode) { +void MyAvatar::renderBody(RenderMode renderMode, float glowLevel) { if (!(_skeletonModel.isRenderable() && getHead()->getFaceModel().isRenderable())) { return; // wait until both models are loaded } diff --git a/interface/src/avatar/MyAvatar.h b/interface/src/avatar/MyAvatar.h index a5312b0016..96f4ca3e4c 100644 --- a/interface/src/avatar/MyAvatar.h +++ b/interface/src/avatar/MyAvatar.h @@ -42,7 +42,7 @@ public: void moveWithLean(); void render(const glm::vec3& cameraPosition, RenderMode renderMode = NORMAL_RENDER_MODE); - void renderBody(RenderMode renderMode); + void renderBody(RenderMode renderMode, float glowLevel); bool shouldRenderHead(const glm::vec3& cameraPosition, RenderMode renderMode) const; void renderDebugBodyPoints(); void renderHeadMouse() const; diff --git a/interface/src/renderer/GeometryCache.cpp b/interface/src/renderer/GeometryCache.cpp index 3a410ac5e2..6e93fc77af 100644 --- a/interface/src/renderer/GeometryCache.cpp +++ b/interface/src/renderer/GeometryCache.cpp @@ -305,7 +305,6 @@ void GeometryCache::setBlendedVertices(const QPointer& model, const QWeak QSharedPointer GeometryCache::createResource(const QUrl& url, const QSharedPointer& fallback, bool delayLoad, const void* extra) { - QSharedPointer geometry(new NetworkGeometry(url, fallback.staticCast(), delayLoad), &Resource::allReferencesCleared); geometry->setLODParent(geometry); @@ -320,6 +319,20 @@ NetworkGeometry::NetworkGeometry(const QUrl& url, const QSharedPointer(), -1 }; + _geometry.joints.append(joint); + _geometry.leftEyeJointIndex = -1; + _geometry.rightEyeJointIndex = -1; + _geometry.neckJointIndex = -1; + _geometry.rootJointIndex = -1; + _geometry.leanJointIndex = -1; + _geometry.headJointIndex = -1; + _geometry.leftHandJointIndex = -1; + _geometry.rightHandJointIndex = -1; + } } bool NetworkGeometry::isLoadedWithTextures() const { diff --git a/interface/src/renderer/Model.cpp b/interface/src/renderer/Model.cpp index 3484ac5fc8..b75739197e 100644 --- a/interface/src/renderer/Model.cpp +++ b/interface/src/renderer/Model.cpp @@ -39,7 +39,8 @@ Model::Model(QObject* parent) : _boundingShape(), _boundingShapeLocalOffset(0.f), _lodDistance(0.0f), - _pupilDilation(0.0f) { + _pupilDilation(0.0f), + _url("http://invalid.com") { // we may have been created in the network thread, but we live in the main thread moveToThread(Application::getInstance()->thread()); } diff --git a/interface/src/renderer/Model.h b/interface/src/renderer/Model.h index 64295cb915..c6da5438cb 100644 --- a/interface/src/renderer/Model.h +++ b/interface/src/renderer/Model.h @@ -53,7 +53,7 @@ public: bool isActive() const { return _geometry && _geometry->isLoaded(); } - bool isRenderable() const { return !_meshStates.isEmpty(); } + bool isRenderable() const { return !_meshStates.isEmpty() || (isActive() && _geometry->getMeshes().isEmpty()); } bool isLoadedWithTextures() const { return _geometry && _geometry->isLoadedWithTextures(); } diff --git a/libraries/avatars/src/AvatarData.cpp b/libraries/avatars/src/AvatarData.cpp index 2e716296ff..2917f1530a 100644 --- a/libraries/avatars/src/AvatarData.cpp +++ b/libraries/avatars/src/AvatarData.cpp @@ -640,7 +640,7 @@ bool AvatarData::hasBillboardChangedAfterParsing(const QByteArray& packet) { } void AvatarData::setFaceModelURL(const QUrl& faceModelURL) { - _faceModelURL = faceModelURL.isEmpty() ? DEFAULT_HEAD_MODEL_URL : faceModelURL; + _faceModelURL = faceModelURL; qDebug() << "Changing face model for avatar to" << _faceModelURL.toString(); } diff --git a/libraries/shared/src/ResourceCache.cpp b/libraries/shared/src/ResourceCache.cpp index 04b6265513..2f26e344fd 100644 --- a/libraries/shared/src/ResourceCache.cpp +++ b/libraries/shared/src/ResourceCache.cpp @@ -31,7 +31,7 @@ ResourceCache::~ResourceCache() { } QSharedPointer ResourceCache::getResource(const QUrl& url, const QUrl& fallback, bool delayLoad, void* extra) { - if (!url.isValid() && fallback.isValid()) { + if (!url.isValid() && !url.isEmpty() && fallback.isValid()) { return getResource(fallback, QUrl(), delayLoad); } QSharedPointer resource = _resources.value(url); @@ -114,7 +114,11 @@ Resource::Resource(const QUrl& url, bool delayLoad) : _reply(NULL), _attempts(0) { - if (!(url.isValid() && ResourceCache::getNetworkAccessManager())) { + if (url.isEmpty()) { + _startedLoading = _loaded = true; + return; + + } else if (!(url.isValid() && ResourceCache::getNetworkAccessManager())) { _startedLoading = _failedToLoad = true; return; }