mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-08-09 12:29:56 +02:00
Introducing a fix for the overlayered model drawn in front
This commit is contained in:
parent
4e32c59118
commit
28ed61cc97
5 changed files with 45 additions and 0 deletions
|
@ -81,6 +81,7 @@ void ModelOverlay::render(RenderArgs* args) {
|
||||||
}
|
}
|
||||||
|
|
||||||
_model->setVisibleInScene(_visible, scene);
|
_model->setVisibleInScene(_visible, scene);
|
||||||
|
_model->setLayeredInFront(getDrawInFront(), scene);
|
||||||
|
|
||||||
scene->enqueuePendingChanges(pendingChanges);
|
scene->enqueuePendingChanges(pendingChanges);
|
||||||
}
|
}
|
||||||
|
|
|
@ -304,6 +304,12 @@ template <> const Item::Bound payloadGetBound(const ModelMeshPartPayload::Pointe
|
||||||
}
|
}
|
||||||
return Item::Bound();
|
return Item::Bound();
|
||||||
}
|
}
|
||||||
|
template <> int payloadGetLayer(const ModelMeshPartPayload::Pointer& payload) {
|
||||||
|
if (payload) {
|
||||||
|
return payload->getLayer();
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
template <> const ShapeKey shapeGetShapeKey(const ModelMeshPartPayload::Pointer& payload) {
|
template <> const ShapeKey shapeGetShapeKey(const ModelMeshPartPayload::Pointer& payload) {
|
||||||
if (payload) {
|
if (payload) {
|
||||||
|
@ -378,6 +384,10 @@ ItemKey ModelMeshPartPayload::getKey() const {
|
||||||
builder.withInvisible();
|
builder.withInvisible();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (_model->isLayeredInFront()) {
|
||||||
|
builder.withLayered();
|
||||||
|
}
|
||||||
|
|
||||||
if (_isBlendShaped || _isSkinned) {
|
if (_isBlendShaped || _isSkinned) {
|
||||||
builder.withDeformed();
|
builder.withDeformed();
|
||||||
}
|
}
|
||||||
|
@ -396,6 +406,17 @@ ItemKey ModelMeshPartPayload::getKey() const {
|
||||||
return builder.build();
|
return builder.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int ModelMeshPartPayload::getLayer() const {
|
||||||
|
// MAgic number while we are defining the layering mechanism:
|
||||||
|
const int LAYER_3D_FRONT = 1;
|
||||||
|
const int LAYER_3D = 0;
|
||||||
|
if (_model->isLayeredInFront()) {
|
||||||
|
return LAYER_3D_FRONT;
|
||||||
|
} else {
|
||||||
|
return LAYER_3D;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ShapeKey ModelMeshPartPayload::getShapeKey() const {
|
ShapeKey ModelMeshPartPayload::getShapeKey() const {
|
||||||
|
|
||||||
// guard against partially loaded meshes
|
// guard against partially loaded meshes
|
||||||
|
|
|
@ -95,6 +95,7 @@ public:
|
||||||
|
|
||||||
// Render Item interface
|
// Render Item interface
|
||||||
render::ItemKey getKey() const override;
|
render::ItemKey getKey() const override;
|
||||||
|
int getLayer() const;
|
||||||
render::ShapeKey getShapeKey() const override; // shape interface
|
render::ShapeKey getShapeKey() const override; // shape interface
|
||||||
void render(RenderArgs* args) const override;
|
void render(RenderArgs* args) const override;
|
||||||
|
|
||||||
|
@ -122,6 +123,7 @@ private:
|
||||||
namespace render {
|
namespace render {
|
||||||
template <> const ItemKey payloadGetKey(const ModelMeshPartPayload::Pointer& payload);
|
template <> const ItemKey payloadGetKey(const ModelMeshPartPayload::Pointer& payload);
|
||||||
template <> const Item::Bound payloadGetBound(const ModelMeshPartPayload::Pointer& payload);
|
template <> const Item::Bound payloadGetBound(const ModelMeshPartPayload::Pointer& payload);
|
||||||
|
template <> int payloadGetLayer(const ModelMeshPartPayload::Pointer& payload);
|
||||||
template <> const ShapeKey shapeGetShapeKey(const ModelMeshPartPayload::Pointer& payload);
|
template <> const ShapeKey shapeGetShapeKey(const ModelMeshPartPayload::Pointer& payload);
|
||||||
template <> void payloadRender(const ModelMeshPartPayload::Pointer& payload, RenderArgs* args);
|
template <> void payloadRender(const ModelMeshPartPayload::Pointer& payload, RenderArgs* args);
|
||||||
}
|
}
|
||||||
|
|
|
@ -620,6 +620,22 @@ void Model::setVisibleInScene(bool newValue, std::shared_ptr<render::Scene> scen
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Model::setLayeredInFront(bool layered, std::shared_ptr<render::Scene> scene) {
|
||||||
|
if (_isLayeredInFront != layered) {
|
||||||
|
_isLayeredInFront = layered;
|
||||||
|
|
||||||
|
render::PendingChanges pendingChanges;
|
||||||
|
foreach(auto item, _modelMeshRenderItems.keys()) {
|
||||||
|
pendingChanges.resetItem(item, _modelMeshRenderItems[item]);
|
||||||
|
}
|
||||||
|
foreach(auto item, _collisionRenderItems.keys()) {
|
||||||
|
pendingChanges.resetItem(item, _collisionRenderItems[item]);
|
||||||
|
}
|
||||||
|
scene->enqueuePendingChanges(pendingChanges);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bool Model::addToScene(std::shared_ptr<render::Scene> scene,
|
bool Model::addToScene(std::shared_ptr<render::Scene> scene,
|
||||||
render::PendingChanges& pendingChanges,
|
render::PendingChanges& pendingChanges,
|
||||||
render::Item::Status::Getters& statusGetters) {
|
render::Item::Status::Getters& statusGetters) {
|
||||||
|
|
|
@ -80,6 +80,7 @@ public:
|
||||||
|
|
||||||
// new Scene/Engine rendering support
|
// new Scene/Engine rendering support
|
||||||
void setVisibleInScene(bool newValue, std::shared_ptr<render::Scene> scene);
|
void setVisibleInScene(bool newValue, std::shared_ptr<render::Scene> scene);
|
||||||
|
void setLayeredInFront(bool layered, std::shared_ptr<render::Scene> scene);
|
||||||
bool needsFixupInScene() const;
|
bool needsFixupInScene() const;
|
||||||
|
|
||||||
bool needsReload() const { return _needsReload; }
|
bool needsReload() const { return _needsReload; }
|
||||||
|
@ -98,6 +99,8 @@ public:
|
||||||
|
|
||||||
bool isVisible() const { return _isVisible; }
|
bool isVisible() const { return _isVisible; }
|
||||||
|
|
||||||
|
bool isLayeredInFront() const { return _isLayeredInFront; }
|
||||||
|
|
||||||
void updateRenderItems();
|
void updateRenderItems();
|
||||||
void setRenderItemsNeedUpdate() { _renderItemsNeedUpdate = true; }
|
void setRenderItemsNeedUpdate() { _renderItemsNeedUpdate = true; }
|
||||||
bool getRenderItemsNeedUpdate() { return _renderItemsNeedUpdate; }
|
bool getRenderItemsNeedUpdate() { return _renderItemsNeedUpdate; }
|
||||||
|
@ -413,6 +416,8 @@ protected:
|
||||||
int _renderInfoDrawCalls { 0 };
|
int _renderInfoDrawCalls { 0 };
|
||||||
int _renderInfoHasTransparent { false };
|
int _renderInfoHasTransparent { false };
|
||||||
|
|
||||||
|
bool _isLayeredInFront { false };
|
||||||
|
|
||||||
private:
|
private:
|
||||||
float _loadingPriority { 0.0f };
|
float _loadingPriority { 0.0f };
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue