refactoring _fadeStartTime and isTransparent, make simple renderables switch to transparent when fade finishes

This commit is contained in:
SamGondelman 2016-08-04 12:34:46 -07:00
parent 6604c27f23
commit ac9a80131a
11 changed files with 26 additions and 21 deletions

View file

@ -96,8 +96,16 @@ public: \
virtual void removeFromScene(EntityItemPointer self, std::shared_ptr<render::Scene> scene, render::PendingChanges& pendingChanges) override { _renderHelper.removeFromScene(self, scene, pendingChanges); } \
virtual void locationChanged(bool tellPhysics = true) override { EntityItem::locationChanged(tellPhysics); _renderHelper.notifyChanged(); } \
virtual void dimensionsChanged() override { EntityItem::dimensionsChanged(); _renderHelper.notifyChanged(); } \
void checkTransparency() { \
bool transparent = isTransparent(); \
if (transparent != prevIsTransparent) { \
_renderHelper.notifyChanged(); \
prevIsTransparent = transparent; \
} \
} \
private: \
SimpleRenderableEntityItem _renderHelper;
SimpleRenderableEntityItem _renderHelper; \
bool prevIsTransparent { isTransparent() };
#endif // hifi_RenderableEntityItem_h

View file

@ -91,6 +91,9 @@ public:
render::ItemID getMetaRenderItem() { return _myMetaItem; }
// Transparency is handled in ModelMeshPartPayload
bool isTransparent() override { return false; }
private:
QVariantMap parseTexturesToMap(QString textures);
void remapTextures();

View file

@ -167,6 +167,8 @@ void RenderablePolyLineEntityItem::update(const quint64& now) {
}
void RenderablePolyLineEntityItem::render(RenderArgs* args) {
checkTransparency();
QWriteLocker lock(&_quadReadWriteLock);
if (_points.size() < 2 || _normals.size () < 2 || _strokeWidths.size() < 2) {
return;

View file

@ -18,7 +18,6 @@
#include <PolyLineEntityItem.h>
#include "RenderableEntityItem.h"
#include <TextureCache.h>
#include <Interpolate.h>
#include <QReadWriteLock>
@ -50,7 +49,6 @@ protected:
gpu::BufferView _uniformBuffer;
unsigned int _numVertices;
QVector<glm::vec3> _vertices;
quint64 _fadeStartTime { usecTimestampNow() };
};

View file

@ -71,18 +71,19 @@ void RenderableShapeEntityItem::setUserData(const QString& value) {
}
}
bool RenderableShapeEntityItem::isTransparent() {
/*bool RenderableShapeEntityItem::isTransparent() {
if (_procedural && _procedural->ready()) {
return Interpolate::calculateFadeRatio(_procedural->getFadeStartTime()) < 1.0f;
} else {
return Interpolate::calculateFadeRatio(_fadeStartTime) < 1.0f;
return EntityItem::isTransparent();
}
}
}*/
void RenderableShapeEntityItem::render(RenderArgs* args) {
PerformanceTimer perfTimer("RenderableShapeEntityItem::render");
//Q_ASSERT(getType() == EntityTypes::Shape);
Q_ASSERT(args->_batch);
checkTransparency();
if (!_procedural) {
_procedural.reset(new Procedural(getUserData()));

View file

@ -11,7 +11,6 @@
#include <ShapeEntityItem.h>
#include <procedural/Procedural.h>
#include <Interpolate.h>
#include "RenderableEntityItem.h"
@ -22,18 +21,17 @@ public:
static EntityItemPointer factory(const EntityItemID& entityID, const EntityItemProperties& properties);
static EntityItemPointer boxFactory(const EntityItemID& entityID, const EntityItemProperties& properties);
static EntityItemPointer sphereFactory(const EntityItemID& entityID, const EntityItemProperties& properties);
RenderableShapeEntityItem(const EntityItemID& entityItemID) : ShapeEntityItem(entityItemID) {}
RenderableShapeEntityItem(const EntityItemID& entityItemID) : ShapeEntityItem(entityItemID) { _procedural.reset(nullptr); }
void render(RenderArgs* args) override;
void setUserData(const QString& value) override;
bool isTransparent() override;
// bool isTransparent() override;
SIMPLE_RENDERABLE();
private:
QSharedPointer<Procedural> _procedural;
quint64 _fadeStartTime { usecTimestampNow() };
};

View file

@ -27,6 +27,7 @@ EntityItemPointer RenderableTextEntityItem::factory(const EntityItemID& entityID
void RenderableTextEntityItem::render(RenderArgs* args) {
PerformanceTimer perfTimer("RenderableTextEntityItem::render");
Q_ASSERT(getType() == EntityTypes::Text);
checkTransparency();
static const float SLIGHTLY_BEHIND = -0.005f;
float fadeRatio = Interpolate::calculateFadeRatio(_fadeStartTime);

View file

@ -14,7 +14,6 @@
#include <TextEntityItem.h>
#include <TextRenderer3D.h>
#include <Interpolate.h>
#include "RenderableEntityItem.h"
@ -28,13 +27,10 @@ public:
virtual void render(RenderArgs* args) override;
bool isTransparent() override { return Interpolate::calculateFadeRatio(_fadeStartTime) < 1.0f; }
SIMPLE_RENDERABLE();
private:
TextRenderer3D* _textRenderer = TextRenderer3D::getInstance(SANS_FONT_FAMILY, FIXED_FONT_POINT_SIZE / 2.0f);
quint64 _fadeStartTime { usecTimestampNow() };
};

View file

@ -164,6 +164,8 @@ bool RenderableWebEntityItem::buildWebSurface(EntityTreeRenderer* renderer) {
}
void RenderableWebEntityItem::render(RenderArgs* args) {
checkTransparency();
#ifdef WANT_EXTRA_DEBUGGING
{
gpu::Batch& batch = *args->_batch;

View file

@ -12,7 +12,6 @@
#include <QSharedPointer>
#include <WebEntityItem.h>
#include <Interpolate.h>
#include "RenderableEntityItem.h"
@ -36,8 +35,6 @@ public:
void update(const quint64& now) override;
bool needsToCallUpdate() const override { return _webSurface != nullptr; }
bool isTransparent() override { return Interpolate::calculateFadeRatio(_fadeStartTime) < 1.0f; }
SIMPLE_RENDERABLE();
private:
@ -56,8 +53,6 @@ private:
QMetaObject::Connection _mouseReleaseConnection;
QMetaObject::Connection _mouseMoveConnection;
QMetaObject::Connection _hoverLeaveConnection;
quint64 _fadeStartTime;
};

View file

@ -26,6 +26,7 @@
#include <Transform.h>
#include <Sound.h>
#include <SpatiallyNestable.h>
#include <Interpolate.h>
#include "EntityItemID.h"
#include "EntityItemPropertiesDefaults.h"
@ -435,7 +436,7 @@ public:
QUuid getOwningAvatarID() const { return _owningAvatarID; }
void setOwningAvatarID(const QUuid& owningAvatarID) { _owningAvatarID = owningAvatarID; }
virtual bool isTransparent() { return false; }
virtual bool isTransparent() { return Interpolate::calculateFadeRatio(_fadeStartTime) < 1.0f; }
protected:
@ -566,7 +567,7 @@ protected:
quint64 _lastUpdatedAngularVelocityTimestamp { 0 };
quint64 _lastUpdatedAccelerationTimestamp { 0 };
quint64 _fadeStartTime { usecTimestampNow() };
};
#endif // hifi_EntityItem_h