mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-08-12 19:15:57 +02:00
make model overlays acutally use sub mesh payload items
This commit is contained in:
parent
f70ff2291b
commit
7fde574a2a
9 changed files with 63 additions and 10 deletions
|
@ -581,9 +581,11 @@ void Avatar::simulateAttachments(float deltaTime) {
|
|||
void Avatar::renderAttachments(RenderArgs* args) {
|
||||
// RenderArgs::RenderMode modelRenderMode = (renderMode == RenderArgs::SHADOW_RENDER_MODE) ?
|
||||
// RenderArgs::SHADOW_RENDER_MODE : RenderArgs::DEFAULT_RENDER_MODE;
|
||||
/*
|
||||
foreach (Model* model, _attachmentModels) {
|
||||
model->render(args, 1.0f);
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
void Avatar::updateJointMappings() {
|
||||
|
|
|
@ -1580,12 +1580,16 @@ void MyAvatar::renderAttachments(RenderArgs* args) {
|
|||
QString headJointName = (geometry.headJointIndex == -1) ? QString() : geometry.joints.at(geometry.headJointIndex).name;
|
||||
// RenderArgs::RenderMode modelRenderMode = (renderMode == RenderArgs::SHADOW_RENDER_MODE) ?
|
||||
// RenderArgs::SHADOW_RENDER_MODE : RenderArgs::DEFAULT_RENDER_MODE;
|
||||
|
||||
// FIX ME - attachments need to be added to scene too...
|
||||
/*
|
||||
for (int i = 0; i < _attachmentData.size(); i++) {
|
||||
const QString& jointName = _attachmentData.at(i).jointName;
|
||||
if (jointName != headJointName && jointName != "Head") {
|
||||
_attachmentModels.at(i)->render(args, 1.0f);
|
||||
}
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
//Renders sixense laser pointers for UI selection with controllers
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||
//
|
||||
|
||||
#include <Application.h>
|
||||
#include <GlowEffect.h>
|
||||
|
||||
#include "ModelOverlay.h"
|
||||
|
@ -54,11 +55,33 @@ void ModelOverlay::update(float deltatime) {
|
|||
_isLoaded = _model.isActive();
|
||||
}
|
||||
|
||||
bool ModelOverlay::addToScene(Overlay::Pointer overlay, std::shared_ptr<render::Scene> scene, render::PendingChanges& pendingChanges) {
|
||||
Base3DOverlay::addToScene(overlay, scene, pendingChanges);
|
||||
_model.addToScene(scene, pendingChanges);
|
||||
}
|
||||
|
||||
void ModelOverlay::removeFromScene(Overlay::Pointer overlay, std::shared_ptr<render::Scene> scene, render::PendingChanges& pendingChanges) {
|
||||
Base3DOverlay::removeFromScene(overlay, scene, pendingChanges);
|
||||
_model.removeFromScene(scene, pendingChanges);
|
||||
}
|
||||
|
||||
void ModelOverlay::render(RenderArgs* args) {
|
||||
|
||||
// check to see if when we added our model to the scene they were ready, if they were not ready, then
|
||||
// fix them up in the scene
|
||||
render::ScenePointer scene = Application::getInstance()->getMain3DScene();
|
||||
render::PendingChanges pendingChanges;
|
||||
if (_model.needsFixupInScene()) {
|
||||
_model.removeFromScene(scene, pendingChanges);
|
||||
_model.addToScene(scene, pendingChanges);
|
||||
}
|
||||
scene->enqueuePendingChanges(pendingChanges);
|
||||
|
||||
if (!_visible) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
if (_model.isActive()) {
|
||||
if (_model.isRenderable()) {
|
||||
float glowLevel = getGlowLevel();
|
||||
|
@ -72,6 +95,7 @@ void ModelOverlay::render(RenderArgs* args) {
|
|||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
void ModelOverlay::setProperties(const QScriptValue &properties) {
|
||||
|
|
|
@ -32,6 +32,9 @@ public:
|
|||
|
||||
virtual ModelOverlay* createClone() const;
|
||||
|
||||
virtual bool addToScene(Overlay::Pointer overlay, std::shared_ptr<render::Scene> scene, render::PendingChanges& pendingChanges);
|
||||
virtual void removeFromScene(Overlay::Pointer overlay, std::shared_ptr<render::Scene> scene, render::PendingChanges& pendingChanges);
|
||||
|
||||
private:
|
||||
|
||||
Model _model;
|
||||
|
|
|
@ -228,3 +228,13 @@ float Overlay::updatePulse() {
|
|||
return _pulse;
|
||||
}
|
||||
|
||||
bool Overlay::addToScene(Overlay::Pointer overlay, std::shared_ptr<render::Scene> scene, render::PendingChanges& pendingChanges) {
|
||||
auto overlayPayload = new Overlay::Payload(overlay);
|
||||
auto overlayPayloadPointer = Overlay::PayloadPointer(overlayPayload);
|
||||
_renderItemID = scene->allocateID();
|
||||
pendingChanges.resetItem(_renderItemID, overlayPayloadPointer);
|
||||
}
|
||||
|
||||
void Overlay::removeFromScene(Overlay::Pointer overlay, std::shared_ptr<render::Scene> scene, render::PendingChanges& pendingChanges) {
|
||||
pendingChanges.removeItem(_renderItemID);
|
||||
}
|
||||
|
|
|
@ -48,6 +48,12 @@ public:
|
|||
virtual void update(float deltatime) {}
|
||||
virtual void render(RenderArgs* args) = 0;
|
||||
|
||||
//virtual bool needsFixupInScene() { return false; }
|
||||
virtual bool readyToAddToScene(RenderArgs* renderArgs = nullptr) { return true; }
|
||||
virtual bool addToScene(Overlay::Pointer overlay, std::shared_ptr<render::Scene> scene, render::PendingChanges& pendingChanges);
|
||||
virtual void removeFromScene(Overlay::Pointer overlay, std::shared_ptr<render::Scene> scene, render::PendingChanges& pendingChanges);
|
||||
|
||||
|
||||
// getters
|
||||
virtual bool is3D() const = 0;
|
||||
bool isLoaded() { return _isLoaded; }
|
||||
|
|
|
@ -118,6 +118,7 @@ void Overlays::update(float deltatime) {
|
|||
|
||||
void Overlays::cleanupOverlaysToDelete() {
|
||||
if (!_overlaysToDelete.isEmpty()) {
|
||||
render::ScenePointer scene = Application::getInstance()->getMain3DScene();
|
||||
render::PendingChanges pendingChanges;
|
||||
|
||||
{
|
||||
|
@ -128,13 +129,12 @@ void Overlays::cleanupOverlaysToDelete() {
|
|||
|
||||
auto itemID = overlay->getRenderItemID();
|
||||
if (itemID != render::Item::INVALID_ITEM_ID) {
|
||||
pendingChanges.removeItem(itemID);
|
||||
overlay->removeFromScene(overlay, scene, pendingChanges);
|
||||
}
|
||||
} while (!_overlaysToDelete.isEmpty());
|
||||
}
|
||||
|
||||
if (pendingChanges._removedItems.size() > 0) {
|
||||
render::ScenePointer scene = Application::getInstance()->getMain3DScene();
|
||||
scene->enqueuePendingChanges(pendingChanges);
|
||||
}
|
||||
}
|
||||
|
@ -216,13 +216,9 @@ unsigned int Overlays::addOverlay(Overlay* overlay) {
|
|||
_overlaysWorld[thisID] = overlayPointer;
|
||||
|
||||
render::ScenePointer scene = Application::getInstance()->getMain3DScene();
|
||||
auto overlayPayload = new Overlay::Payload(overlayPointer);
|
||||
auto overlayPayloadPointer = Overlay::PayloadPointer(overlayPayload);
|
||||
render::ItemID itemID = scene->allocateID();
|
||||
overlay->setRenderItemID(itemID);
|
||||
|
||||
render::PendingChanges pendingChanges;
|
||||
pendingChanges.resetItem(itemID, overlayPayloadPointer);
|
||||
|
||||
overlayPointer->addToScene(overlayPointer, scene, pendingChanges);
|
||||
|
||||
scene->enqueuePendingChanges(pendingChanges);
|
||||
}
|
||||
|
|
|
@ -925,6 +925,7 @@ void Model::removeFromScene(std::shared_ptr<render::Scene> scene, render::Pendin
|
|||
}
|
||||
|
||||
bool Model::render(RenderArgs* renderArgs, float alpha) {
|
||||
return; //
|
||||
PROFILE_RANGE(__FUNCTION__);
|
||||
|
||||
// render the attachments
|
||||
|
|
|
@ -114,7 +114,6 @@ public:
|
|||
void reset();
|
||||
virtual void simulate(float deltaTime, bool fullUpdate = true);
|
||||
|
||||
bool render(RenderArgs* renderArgs, float alpha = 1.0f);
|
||||
void renderSetup(RenderArgs* args);
|
||||
|
||||
// Scene rendering support
|
||||
|
@ -547,6 +546,14 @@ private:
|
|||
QSet<std::shared_ptr<OpaqueMeshPart>> _opaqueRenderItems;
|
||||
QSet<render::ItemID> _renderItems;
|
||||
bool _readyWhenAdded = false;
|
||||
|
||||
|
||||
private:
|
||||
// FIX ME - We want to get rid of this interface for rendering...
|
||||
// right now the only remaining user are Avatar attachments.
|
||||
// that usage has been temporarily disabled...
|
||||
bool render(RenderArgs* renderArgs, float alpha = 1.0f);
|
||||
|
||||
};
|
||||
|
||||
Q_DECLARE_METATYPE(QPointer<Model>)
|
||||
|
|
Loading…
Reference in a new issue