From 2639796402486d173eeb31300a26dcc989073305 Mon Sep 17 00:00:00 2001 From: Andrzej Kapolka Date: Fri, 28 Feb 2014 12:22:10 -0800 Subject: [PATCH] Wait until both head and body are loaded before rendering. Closes #2145. --- interface/src/avatar/Avatar.cpp | 3 +++ interface/src/avatar/MyAvatar.cpp | 4 ++++ interface/src/renderer/Model.h | 2 ++ 3 files changed, 9 insertions(+) diff --git a/interface/src/avatar/Avatar.cpp b/interface/src/avatar/Avatar.cpp index 27788eb354..85671c9e30 100644 --- a/interface/src/avatar/Avatar.cpp +++ b/interface/src/avatar/Avatar.cpp @@ -309,6 +309,9 @@ void Avatar::renderBody() { renderBillboard(); return; } + if (!(_skeletonModel.isRenderable() && getHead()->getFaceModel().isRenderable())) { + return; // wait until both models are loaded + } _skeletonModel.render(1.0f); getHead()->render(1.0f); getHand()->render(false); diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index 96e2cc2221..02d14b7a2c 100644 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -677,6 +677,10 @@ void MyAvatar::setSkeletonModelURL(const QUrl& skeletonModelURL) { } void MyAvatar::renderBody(bool forceRenderHead) { + if (!(_skeletonModel.isRenderable() && getHead()->getFaceModel().isRenderable())) { + return; // wait until both models are loaded + } + // Render the body's voxels and head _skeletonModel.render(1.0f); diff --git a/interface/src/renderer/Model.h b/interface/src/renderer/Model.h index 52d0622ead..e200960b98 100644 --- a/interface/src/renderer/Model.h +++ b/interface/src/renderer/Model.h @@ -46,6 +46,8 @@ public: bool isActive() const { return _geometry && _geometry->isLoaded(); } + bool isRenderable() const { return !_meshStates.isEmpty(); } + bool isLoadedWithTextures() const; void init();