mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-08-09 18:26:26 +02:00
Update entity payload items to correctly hide when not visible
This commit is contained in:
parent
50f44c801a
commit
a62b55fcb2
4 changed files with 30 additions and 5 deletions
|
@ -31,7 +31,7 @@ namespace render {
|
||||||
template <> void payloadRender(const RenderableEntityItemProxy::Pointer& payload, RenderArgs* args) {
|
template <> void payloadRender(const RenderableEntityItemProxy::Pointer& payload, RenderArgs* args) {
|
||||||
if (args) {
|
if (args) {
|
||||||
args->_elementsTouched++;
|
args->_elementsTouched++;
|
||||||
if (payload && payload->entity) {
|
if (payload && payload->entity && payload->entity->getVisible()) {
|
||||||
payload->entity->render(args);
|
payload->entity->render(args);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -221,6 +221,8 @@ void RenderableModelEntityItem::render(RenderArgs* args) {
|
||||||
_model->addToScene(scene, pendingChanges);
|
_model->addToScene(scene, pendingChanges);
|
||||||
}
|
}
|
||||||
scene->enqueuePendingChanges(pendingChanges);
|
scene->enqueuePendingChanges(pendingChanges);
|
||||||
|
|
||||||
|
_model->setVisibleInScene(getVisible(), scene);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -78,6 +78,7 @@ Model::Model(QObject* parent) :
|
||||||
_showTrueJointTransforms(true),
|
_showTrueJointTransforms(true),
|
||||||
_lodDistance(0.0f),
|
_lodDistance(0.0f),
|
||||||
_pupilDilation(0.0f),
|
_pupilDilation(0.0f),
|
||||||
|
_isVisible(true),
|
||||||
_url("http://invalid.com"),
|
_url("http://invalid.com"),
|
||||||
_blendNumber(0),
|
_blendNumber(0),
|
||||||
_appliedBlendNumber(0),
|
_appliedBlendNumber(0),
|
||||||
|
@ -823,6 +824,9 @@ public:
|
||||||
|
|
||||||
namespace render {
|
namespace render {
|
||||||
template <> const ItemKey payloadGetKey(const TransparentMeshPart::Pointer& payload) {
|
template <> const ItemKey payloadGetKey(const TransparentMeshPart::Pointer& payload) {
|
||||||
|
if (!payload->model->isVisible()) {
|
||||||
|
return ItemKey::Builder().withInvisible().build();
|
||||||
|
}
|
||||||
return ItemKey::Builder::transparentShape();
|
return ItemKey::Builder::transparentShape();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -853,6 +857,9 @@ public:
|
||||||
|
|
||||||
namespace render {
|
namespace render {
|
||||||
template <> const ItemKey payloadGetKey(const OpaqueMeshPart::Pointer& payload) {
|
template <> const ItemKey payloadGetKey(const OpaqueMeshPart::Pointer& payload) {
|
||||||
|
if (!payload->model->isVisible()) {
|
||||||
|
return ItemKey::Builder().withInvisible().build();
|
||||||
|
}
|
||||||
return ItemKey::Builder::opaqueShape();
|
return ItemKey::Builder::opaqueShape();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -872,6 +879,18 @@ namespace render {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Model::setVisibleInScene(bool newValue, std::shared_ptr<render::Scene> scene) {
|
||||||
|
if (_isVisible != newValue) {
|
||||||
|
_isVisible = newValue;
|
||||||
|
|
||||||
|
render::PendingChanges pendingChanges;
|
||||||
|
foreach (auto item, _renderItems.keys()) {
|
||||||
|
pendingChanges.resetItem(item, _renderItems[item]);
|
||||||
|
}
|
||||||
|
scene->enqueuePendingChanges(pendingChanges);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
bool Model::addToScene(std::shared_ptr<render::Scene> scene, render::PendingChanges& pendingChanges) {
|
bool Model::addToScene(std::shared_ptr<render::Scene> scene, render::PendingChanges& pendingChanges) {
|
||||||
if (!_meshGroupsKnown && isLoadedWithTextures()) {
|
if (!_meshGroupsKnown && isLoadedWithTextures()) {
|
||||||
|
@ -893,7 +912,7 @@ bool Model::addToScene(std::shared_ptr<render::Scene> scene, render::PendingChan
|
||||||
auto renderData = TransparentMeshPart::Pointer(renderItem);
|
auto renderData = TransparentMeshPart::Pointer(renderItem);
|
||||||
auto renderPayload = render::PayloadPointer(new TransparentMeshPart::Payload(renderData));
|
auto renderPayload = render::PayloadPointer(new TransparentMeshPart::Payload(renderData));
|
||||||
pendingChanges.resetItem(item, renderPayload);
|
pendingChanges.resetItem(item, renderPayload);
|
||||||
_renderItems << item;
|
_renderItems.insert(item, renderPayload);
|
||||||
somethingAdded = true;
|
somethingAdded = true;
|
||||||
}
|
}
|
||||||
foreach (auto renderItem, _opaqueRenderItems) {
|
foreach (auto renderItem, _opaqueRenderItems) {
|
||||||
|
@ -901,7 +920,7 @@ bool Model::addToScene(std::shared_ptr<render::Scene> scene, render::PendingChan
|
||||||
auto renderData = OpaqueMeshPart::Pointer(renderItem);
|
auto renderData = OpaqueMeshPart::Pointer(renderItem);
|
||||||
auto renderPayload = render::PayloadPointer(new OpaqueMeshPart::Payload(renderData));
|
auto renderPayload = render::PayloadPointer(new OpaqueMeshPart::Payload(renderData));
|
||||||
pendingChanges.resetItem(item, renderPayload);
|
pendingChanges.resetItem(item, renderPayload);
|
||||||
_renderItems << item;
|
_renderItems.insert(item, renderPayload);
|
||||||
somethingAdded = true;
|
somethingAdded = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -916,7 +935,7 @@ void Model::removeFromScene(std::shared_ptr<render::Scene> scene, render::Pendin
|
||||||
attachment->removeFromScene(scene, pendingChanges);
|
attachment->removeFromScene(scene, pendingChanges);
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (auto item, _renderItems) {
|
foreach (auto item, _renderItems.keys()) {
|
||||||
pendingChanges.removeItem(item);
|
pendingChanges.removeItem(item);
|
||||||
}
|
}
|
||||||
_renderItems.clear();
|
_renderItems.clear();
|
||||||
|
|
|
@ -107,6 +107,9 @@ public:
|
||||||
bool isActive() const { return _geometry && _geometry->isLoaded(); }
|
bool isActive() const { return _geometry && _geometry->isLoaded(); }
|
||||||
|
|
||||||
bool isRenderable() const { return !_meshStates.isEmpty() || (isActive() && _geometry->getMeshes().isEmpty()); }
|
bool isRenderable() const { return !_meshStates.isEmpty() || (isActive() && _geometry->getMeshes().isEmpty()); }
|
||||||
|
|
||||||
|
void setVisibleInScene(bool newValue, std::shared_ptr<render::Scene> scene);
|
||||||
|
bool isVisible() const { return _isVisible; }
|
||||||
|
|
||||||
bool isLoadedWithTextures() const { return _geometry && _geometry->isLoadedWithTextures(); }
|
bool isLoadedWithTextures() const { return _geometry && _geometry->isLoadedWithTextures(); }
|
||||||
|
|
||||||
|
@ -334,6 +337,7 @@ private:
|
||||||
|
|
||||||
QUrl _url;
|
QUrl _url;
|
||||||
QUrl _collisionUrl;
|
QUrl _collisionUrl;
|
||||||
|
bool _isVisible;
|
||||||
|
|
||||||
gpu::Buffers _blendedVertexBuffers;
|
gpu::Buffers _blendedVertexBuffers;
|
||||||
std::vector<Transform> _transforms;
|
std::vector<Transform> _transforms;
|
||||||
|
@ -528,7 +532,7 @@ private:
|
||||||
|
|
||||||
QSet<std::shared_ptr<TransparentMeshPart>> _transparentRenderItems;
|
QSet<std::shared_ptr<TransparentMeshPart>> _transparentRenderItems;
|
||||||
QSet<std::shared_ptr<OpaqueMeshPart>> _opaqueRenderItems;
|
QSet<std::shared_ptr<OpaqueMeshPart>> _opaqueRenderItems;
|
||||||
QSet<render::ItemID> _renderItems;
|
QMap<render::ItemID, render::PayloadPointer> _renderItems;
|
||||||
bool _readyWhenAdded = false;
|
bool _readyWhenAdded = false;
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue