diff --git a/interface/src/renderer/Model.cpp b/interface/src/renderer/Model.cpp index 72a6ab7afe..c38e768381 100644 --- a/interface/src/renderer/Model.cpp +++ b/interface/src/renderer/Model.cpp @@ -1393,7 +1393,7 @@ int Model::renderMeshes(RenderMode mode, bool translucent, float alphaThreshold, bool cullMeshParts = args && !Menu::getInstance()->isOptionChecked(MenuOption::DontCullMeshParts); // depending on which parameters we were called with, pick the correct mesh group to render - QList* whichList = NULL; + QVector* whichList = NULL; if (translucent && !hasTangents && !hasSpecular && !isSkinned) { whichList = &_meshesTranslucent; } else if (translucent && hasTangents && !hasSpecular && !isSkinned) { @@ -1434,7 +1434,7 @@ int Model::renderMeshes(RenderMode mode, bool translucent, float alphaThreshold, qDebug() << "unexpected!!! we don't know which list of meshes to render..."; return 0; } - QList& list = *whichList; + QVector& list = *whichList; ProgramObject* program = &_program; Locations* locations = &_locations; @@ -1486,6 +1486,14 @@ int Model::renderMeshes(RenderMode mode, bool translucent, float alphaThreshold, // i is the "index" from the original networkMeshes QVector... foreach (int i, list) { + + // if our index is ever out of range for either meshes or networkMeshes, then skip it, and set our _meshesGroupsKnown + // to false to rebuild out mesh groups. + + if (i < 0 || i >= networkMeshes.size() || i > geometry.meshes.size()) { + _meshesGroupsKnown = false; // regenerate these lists next time around. + continue; + } // exit early if the translucency doesn't match what we're drawing const NetworkMesh& networkMesh = networkMeshes.at(i); diff --git a/interface/src/renderer/Model.h b/interface/src/renderer/Model.h index 55a2eed9d1..b3c319543b 100644 --- a/interface/src/renderer/Model.h +++ b/interface/src/renderer/Model.h @@ -337,25 +337,25 @@ private: bool _meshesGroupsKnown; - QList _meshesTranslucent; - QList _meshesTranslucentTangents; - QList _meshesTranslucentTangentsSpecular; - QList _meshesTranslucentSpecular; + QVector _meshesTranslucent; + QVector _meshesTranslucentTangents; + QVector _meshesTranslucentTangentsSpecular; + QVector _meshesTranslucentSpecular; - QList _meshesTranslucentSkinned; - QList _meshesTranslucentTangentsSkinned; - QList _meshesTranslucentTangentsSpecularSkinned; - QList _meshesTranslucentSpecularSkinned; + QVector _meshesTranslucentSkinned; + QVector _meshesTranslucentTangentsSkinned; + QVector _meshesTranslucentTangentsSpecularSkinned; + QVector _meshesTranslucentSpecularSkinned; - QList _meshesOpaque; - QList _meshesOpaqueTangents; - QList _meshesOpaqueTangentsSpecular; - QList _meshesOpaqueSpecular; + QVector _meshesOpaque; + QVector _meshesOpaqueTangents; + QVector _meshesOpaqueTangentsSpecular; + QVector _meshesOpaqueSpecular; - QList _meshesOpaqueSkinned; - QList _meshesOpaqueTangentsSkinned; - QList _meshesOpaqueTangentsSpecularSkinned; - QList _meshesOpaqueSpecularSkinned; + QVector _meshesOpaqueSkinned; + QVector _meshesOpaqueTangentsSkinned; + QVector _meshesOpaqueTangentsSpecularSkinned; + QVector _meshesOpaqueSpecularSkinned; };