mirror of
https://github.com/overte-org/overte.git
synced 2025-04-20 18:23:54 +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) {
|
||||
if (args) {
|
||||
args->_elementsTouched++;
|
||||
if (payload && payload->entity) {
|
||||
if (payload && payload->entity && payload->entity->getVisible()) {
|
||||
payload->entity->render(args);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -221,6 +221,8 @@ void RenderableModelEntityItem::render(RenderArgs* args) {
|
|||
_model->addToScene(scene, pendingChanges);
|
||||
}
|
||||
scene->enqueuePendingChanges(pendingChanges);
|
||||
|
||||
_model->setVisibleInScene(getVisible(), scene);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -78,6 +78,7 @@ Model::Model(QObject* parent) :
|
|||
_showTrueJointTransforms(true),
|
||||
_lodDistance(0.0f),
|
||||
_pupilDilation(0.0f),
|
||||
_isVisible(true),
|
||||
_url("http://invalid.com"),
|
||||
_blendNumber(0),
|
||||
_appliedBlendNumber(0),
|
||||
|
@ -823,6 +824,9 @@ public:
|
|||
|
||||
namespace render {
|
||||
template <> const ItemKey payloadGetKey(const TransparentMeshPart::Pointer& payload) {
|
||||
if (!payload->model->isVisible()) {
|
||||
return ItemKey::Builder().withInvisible().build();
|
||||
}
|
||||
return ItemKey::Builder::transparentShape();
|
||||
}
|
||||
|
||||
|
@ -853,6 +857,9 @@ public:
|
|||
|
||||
namespace render {
|
||||
template <> const ItemKey payloadGetKey(const OpaqueMeshPart::Pointer& payload) {
|
||||
if (!payload->model->isVisible()) {
|
||||
return ItemKey::Builder().withInvisible().build();
|
||||
}
|
||||
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) {
|
||||
if (!_meshGroupsKnown && isLoadedWithTextures()) {
|
||||
|
@ -893,7 +912,7 @@ bool Model::addToScene(std::shared_ptr<render::Scene> scene, render::PendingChan
|
|||
auto renderData = TransparentMeshPart::Pointer(renderItem);
|
||||
auto renderPayload = render::PayloadPointer(new TransparentMeshPart::Payload(renderData));
|
||||
pendingChanges.resetItem(item, renderPayload);
|
||||
_renderItems << item;
|
||||
_renderItems.insert(item, renderPayload);
|
||||
somethingAdded = true;
|
||||
}
|
||||
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 renderPayload = render::PayloadPointer(new OpaqueMeshPart::Payload(renderData));
|
||||
pendingChanges.resetItem(item, renderPayload);
|
||||
_renderItems << item;
|
||||
_renderItems.insert(item, renderPayload);
|
||||
somethingAdded = true;
|
||||
}
|
||||
|
||||
|
@ -916,7 +935,7 @@ void Model::removeFromScene(std::shared_ptr<render::Scene> scene, render::Pendin
|
|||
attachment->removeFromScene(scene, pendingChanges);
|
||||
}
|
||||
|
||||
foreach (auto item, _renderItems) {
|
||||
foreach (auto item, _renderItems.keys()) {
|
||||
pendingChanges.removeItem(item);
|
||||
}
|
||||
_renderItems.clear();
|
||||
|
|
|
@ -107,6 +107,9 @@ public:
|
|||
bool isActive() const { return _geometry && _geometry->isLoaded(); }
|
||||
|
||||
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(); }
|
||||
|
||||
|
@ -334,6 +337,7 @@ private:
|
|||
|
||||
QUrl _url;
|
||||
QUrl _collisionUrl;
|
||||
bool _isVisible;
|
||||
|
||||
gpu::Buffers _blendedVertexBuffers;
|
||||
std::vector<Transform> _transforms;
|
||||
|
@ -528,7 +532,7 @@ private:
|
|||
|
||||
QSet<std::shared_ptr<TransparentMeshPart>> _transparentRenderItems;
|
||||
QSet<std::shared_ptr<OpaqueMeshPart>> _opaqueRenderItems;
|
||||
QSet<render::ItemID> _renderItems;
|
||||
QMap<render::ItemID, render::PayloadPointer> _renderItems;
|
||||
bool _readyWhenAdded = false;
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue