mirror of
https://github.com/lubosz/overte.git
synced 2025-04-29 11:22:29 +02:00
Merge pull request #11786 from SamGondelman/overlayFlash
Fix overlay flash on visibility and position change
This commit is contained in:
commit
d1e41e6bf0
13 changed files with 24 additions and 33 deletions
|
@ -280,13 +280,16 @@ void Base3DOverlay::update(float duration) {
|
||||||
if (render::Item::isValidID(itemID)) {
|
if (render::Item::isValidID(itemID)) {
|
||||||
// Capture the render transform value in game loop before
|
// Capture the render transform value in game loop before
|
||||||
auto latestTransform = evalRenderTransform();
|
auto latestTransform = evalRenderTransform();
|
||||||
|
bool latestVisible = getVisible();
|
||||||
_renderTransformDirty = false;
|
_renderTransformDirty = false;
|
||||||
render::ScenePointer scene = qApp->getMain3DScene();
|
render::ScenePointer scene = qApp->getMain3DScene();
|
||||||
render::Transaction transaction;
|
render::Transaction transaction;
|
||||||
transaction.updateItem<Overlay>(itemID, [latestTransform](Overlay& data) {
|
transaction.updateItem<Overlay>(itemID, [latestTransform, latestVisible](Overlay& data) {
|
||||||
auto overlay3D = dynamic_cast<Base3DOverlay*>(&data);
|
auto overlay3D = dynamic_cast<Base3DOverlay*>(&data);
|
||||||
if (overlay3D) {
|
if (overlay3D) {
|
||||||
|
// TODO: overlays need to communicate all relavent render properties through transactions
|
||||||
overlay3D->setRenderTransform(latestTransform);
|
overlay3D->setRenderTransform(latestTransform);
|
||||||
|
overlay3D->setRenderVisible(latestVisible);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
scene->enqueueTransaction(transaction);
|
scene->enqueueTransaction(transaction);
|
||||||
|
@ -306,6 +309,10 @@ void Base3DOverlay::setRenderTransform(const Transform& transform) {
|
||||||
_renderTransform = transform;
|
_renderTransform = transform;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Base3DOverlay::setRenderVisible(bool visible) {
|
||||||
|
_renderVisible = visible;
|
||||||
|
}
|
||||||
|
|
||||||
SpatialParentTree* Base3DOverlay::getParentTree() const {
|
SpatialParentTree* Base3DOverlay::getParentTree() const {
|
||||||
auto entityTreeRenderer = qApp->getEntities();
|
auto entityTreeRenderer = qApp->getEntities();
|
||||||
EntityTreePointer entityTree = entityTreeRenderer ? entityTreeRenderer->getTree() : nullptr;
|
EntityTreePointer entityTree = entityTreeRenderer ? entityTreeRenderer->getTree() : nullptr;
|
||||||
|
|
|
@ -76,8 +76,10 @@ protected:
|
||||||
virtual void parentDeleted() override;
|
virtual void parentDeleted() override;
|
||||||
|
|
||||||
mutable Transform _renderTransform;
|
mutable Transform _renderTransform;
|
||||||
|
mutable bool _renderVisible;
|
||||||
virtual Transform evalRenderTransform();
|
virtual Transform evalRenderTransform();
|
||||||
virtual void setRenderTransform(const Transform& transform);
|
virtual void setRenderTransform(const Transform& transform);
|
||||||
|
void setRenderVisible(bool visible);
|
||||||
const Transform& getRenderTransform() const { return _renderTransform; }
|
const Transform& getRenderTransform() const { return _renderTransform; }
|
||||||
|
|
||||||
float _lineWidth;
|
float _lineWidth;
|
||||||
|
|
|
@ -59,7 +59,7 @@ Circle3DOverlay::~Circle3DOverlay() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
void Circle3DOverlay::render(RenderArgs* args) {
|
void Circle3DOverlay::render(RenderArgs* args) {
|
||||||
if (!_visible) {
|
if (!_renderVisible) {
|
||||||
return; // do nothing if we're not visible
|
return; // do nothing if we're not visible
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -259,7 +259,7 @@ void Circle3DOverlay::render(RenderArgs* args) {
|
||||||
}
|
}
|
||||||
|
|
||||||
const render::ShapeKey Circle3DOverlay::getShapeKey() {
|
const render::ShapeKey Circle3DOverlay::getShapeKey() {
|
||||||
auto builder = render::ShapeKey::Builder().withoutCullFace().withUnlit();
|
auto builder = render::ShapeKey::Builder().withoutCullFace();
|
||||||
if (isTransparent()) {
|
if (isTransparent()) {
|
||||||
builder.withTranslucent();
|
builder.withTranslucent();
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,7 +44,7 @@ Cube3DOverlay::~Cube3DOverlay() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void Cube3DOverlay::render(RenderArgs* args) {
|
void Cube3DOverlay::render(RenderArgs* args) {
|
||||||
if (!_visible) {
|
if (!_renderVisible) {
|
||||||
return; // do nothing if we're not visible
|
return; // do nothing if we're not visible
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -53,7 +53,7 @@ AABox Grid3DOverlay::getBounds() const {
|
||||||
}
|
}
|
||||||
|
|
||||||
void Grid3DOverlay::render(RenderArgs* args) {
|
void Grid3DOverlay::render(RenderArgs* args) {
|
||||||
if (!_visible) {
|
if (!_renderVisible) {
|
||||||
return; // do nothing if we're not visible
|
return; // do nothing if we're not visible
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -60,7 +60,7 @@ void Image3DOverlay::update(float deltatime) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void Image3DOverlay::render(RenderArgs* args) {
|
void Image3DOverlay::render(RenderArgs* args) {
|
||||||
if (!_visible || !getParentVisible() || !_texture || !_texture->isLoaded()) {
|
if (!_renderVisible || !getParentVisible() || !_texture || !_texture->isLoaded()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -123,7 +123,7 @@ AABox Line3DOverlay::getBounds() const {
|
||||||
}
|
}
|
||||||
|
|
||||||
void Line3DOverlay::render(RenderArgs* args) {
|
void Line3DOverlay::render(RenderArgs* args) {
|
||||||
if (!_visible) {
|
if (!_renderVisible) {
|
||||||
return; // do nothing if we're not visible
|
return; // do nothing if we're not visible
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -23,7 +23,6 @@ Rectangle3DOverlay::Rectangle3DOverlay() :
|
||||||
for (size_t i = 0; i < _rectGeometryIds.size(); ++i) {
|
for (size_t i = 0; i < _rectGeometryIds.size(); ++i) {
|
||||||
_rectGeometryIds[i] = geometryCache->allocateID();
|
_rectGeometryIds[i] = geometryCache->allocateID();
|
||||||
}
|
}
|
||||||
qDebug() << "Building rect3d overlay";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Rectangle3DOverlay::Rectangle3DOverlay(const Rectangle3DOverlay* rectangle3DOverlay) :
|
Rectangle3DOverlay::Rectangle3DOverlay(const Rectangle3DOverlay* rectangle3DOverlay) :
|
||||||
|
@ -34,11 +33,9 @@ Rectangle3DOverlay::Rectangle3DOverlay(const Rectangle3DOverlay* rectangle3DOver
|
||||||
for (size_t i = 0; i < _rectGeometryIds.size(); ++i) {
|
for (size_t i = 0; i < _rectGeometryIds.size(); ++i) {
|
||||||
_rectGeometryIds[i] = geometryCache->allocateID();
|
_rectGeometryIds[i] = geometryCache->allocateID();
|
||||||
}
|
}
|
||||||
qDebug() << "Building rect3d overlay";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Rectangle3DOverlay::~Rectangle3DOverlay() {
|
Rectangle3DOverlay::~Rectangle3DOverlay() {
|
||||||
qDebug() << "Destryoing rect3d overlay";
|
|
||||||
auto geometryCache = DependencyManager::get<GeometryCache>();
|
auto geometryCache = DependencyManager::get<GeometryCache>();
|
||||||
if (geometryCache) {
|
if (geometryCache) {
|
||||||
geometryCache->releaseID(_geometryCacheID);
|
geometryCache->releaseID(_geometryCacheID);
|
||||||
|
@ -49,7 +46,7 @@ Rectangle3DOverlay::~Rectangle3DOverlay() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void Rectangle3DOverlay::render(RenderArgs* args) {
|
void Rectangle3DOverlay::render(RenderArgs* args) {
|
||||||
if (!_visible) {
|
if (!_renderVisible) {
|
||||||
return; // do nothing if we're not visible
|
return; // do nothing if we're not visible
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -58,18 +55,11 @@ void Rectangle3DOverlay::render(RenderArgs* args) {
|
||||||
const float MAX_COLOR = 255.0f;
|
const float MAX_COLOR = 255.0f;
|
||||||
glm::vec4 rectangleColor(color.red / MAX_COLOR, color.green / MAX_COLOR, color.blue / MAX_COLOR, alpha);
|
glm::vec4 rectangleColor(color.red / MAX_COLOR, color.green / MAX_COLOR, color.blue / MAX_COLOR, alpha);
|
||||||
|
|
||||||
glm::vec3 position = getPosition();
|
|
||||||
glm::vec2 dimensions = getDimensions();
|
|
||||||
glm::vec2 halfDimensions = dimensions * 0.5f;
|
|
||||||
glm::quat rotation = getRotation();
|
|
||||||
|
|
||||||
auto batch = args->_batch;
|
auto batch = args->_batch;
|
||||||
|
|
||||||
if (batch) {
|
if (batch) {
|
||||||
// FIXME Start using the _renderTransform instead of calling for Transform and Dimensions from here, do the custom things needed in evalRenderTransform()
|
Transform transform = getRenderTransform();
|
||||||
Transform transform;
|
glm::vec2 halfDimensions = transform.getScale() * 0.5f;
|
||||||
transform.setTranslation(position);
|
transform.setScale(1.0f);
|
||||||
transform.setRotation(rotation);
|
|
||||||
|
|
||||||
batch->setModelTransform(transform);
|
batch->setModelTransform(transform);
|
||||||
auto geometryCache = DependencyManager::get<GeometryCache>();
|
auto geometryCache = DependencyManager::get<GeometryCache>();
|
||||||
|
@ -124,8 +114,3 @@ void Rectangle3DOverlay::setProperties(const QVariantMap& properties) {
|
||||||
Rectangle3DOverlay* Rectangle3DOverlay::createClone() const {
|
Rectangle3DOverlay* Rectangle3DOverlay::createClone() const {
|
||||||
return new Rectangle3DOverlay(this);
|
return new Rectangle3DOverlay(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
Transform Rectangle3DOverlay::evalRenderTransform() {
|
|
||||||
return getTransform();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
|
@ -29,9 +29,6 @@ public:
|
||||||
|
|
||||||
virtual Rectangle3DOverlay* createClone() const override;
|
virtual Rectangle3DOverlay* createClone() const override;
|
||||||
|
|
||||||
protected:
|
|
||||||
Transform evalRenderTransform() override;
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
int _geometryCacheID;
|
int _geometryCacheID;
|
||||||
std::array<int, 4> _rectGeometryIds;
|
std::array<int, 4> _rectGeometryIds;
|
||||||
|
|
|
@ -24,7 +24,7 @@ Shape3DOverlay::Shape3DOverlay(const Shape3DOverlay* Shape3DOverlay) :
|
||||||
}
|
}
|
||||||
|
|
||||||
void Shape3DOverlay::render(RenderArgs* args) {
|
void Shape3DOverlay::render(RenderArgs* args) {
|
||||||
if (!_visible) {
|
if (!_renderVisible) {
|
||||||
return; // do nothing if we're not visible
|
return; // do nothing if we're not visible
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -27,7 +27,7 @@ Sphere3DOverlay::Sphere3DOverlay(const Sphere3DOverlay* Sphere3DOverlay) :
|
||||||
}
|
}
|
||||||
|
|
||||||
void Sphere3DOverlay::render(RenderArgs* args) {
|
void Sphere3DOverlay::render(RenderArgs* args) {
|
||||||
if (!_visible) {
|
if (!_renderVisible) {
|
||||||
return; // do nothing if we're not visible
|
return; // do nothing if we're not visible
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -92,7 +92,7 @@ void Text3DOverlay::update(float deltatime) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void Text3DOverlay::render(RenderArgs* args) {
|
void Text3DOverlay::render(RenderArgs* args) {
|
||||||
if (!_visible || !getParentVisible()) {
|
if (!_renderVisible || !getParentVisible()) {
|
||||||
return; // do nothing if we're not visible
|
return; // do nothing if we're not visible
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -268,7 +268,7 @@ Q_INVOKABLE int Web3DOverlay::deviceIdByTouchPoint(qreal x, qreal y) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void Web3DOverlay::render(RenderArgs* args) {
|
void Web3DOverlay::render(RenderArgs* args) {
|
||||||
if (!_visible || !getParentVisible()) {
|
if (!_renderVisible || !getParentVisible()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue