From ea1b117ca403c306b1487baa3a5441c88ab25a99 Mon Sep 17 00:00:00 2001 From: SamGondelman Date: Wed, 3 Jul 2019 23:14:52 -0700 Subject: [PATCH] fix image y flip and text crash --- .../src/RenderableImageEntityItem.cpp | 5 +- .../src/RenderableTextEntityItem.cpp | 77 +++++++++++-------- 2 files changed, 47 insertions(+), 35 deletions(-) diff --git a/libraries/entities-renderer/src/RenderableImageEntityItem.cpp b/libraries/entities-renderer/src/RenderableImageEntityItem.cpp index cfe6039ab3..3a4dbf5c6f 100644 --- a/libraries/entities-renderer/src/RenderableImageEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableImageEntityItem.cpp @@ -199,9 +199,8 @@ void ImageEntityRenderer::doRender(RenderArgs* args) { float x = _keepAspectRatio ? fromImage.width() / (2.0f * maxSize) : 0.5f; float y = _keepAspectRatio ? fromImage.height() / (2.0f * maxSize) : 0.5f; - glm::vec2 texCoordBottomLeft((fromImage.x() + 0.5f) / imageWidth, -(fromImage.y() + 0.5f) / imageHeight); - glm::vec2 texCoordTopRight((fromImage.x() + fromImage.width() - 0.5f) / imageWidth, - -(fromImage.y() + fromImage.height() - 0.5f) / imageHeight); + glm::vec2 texCoordBottomLeft((fromImage.x() + 0.5f) / imageWidth, (fromImage.y() + fromImage.height() - 0.5f) / imageHeight); + glm::vec2 texCoordTopRight((fromImage.x() + fromImage.width() - 0.5f) / imageWidth, (fromImage.y() + 0.5f) / imageHeight); DependencyManager::get()->renderQuad( *batch, glm::vec2(-x, -y), glm::vec2(x, y), texCoordBottomLeft, texCoordTopRight, diff --git a/libraries/entities-renderer/src/RenderableTextEntityItem.cpp b/libraries/entities-renderer/src/RenderableTextEntityItem.cpp index 118ff4d6f1..146b9861dc 100644 --- a/libraries/entities-renderer/src/RenderableTextEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableTextEntityItem.cpp @@ -277,51 +277,60 @@ entities::TextPayload::~TextPayload() { } ItemKey entities::TextPayload::getKey() const { - auto renderable = DependencyManager::get()->renderableForEntityId(_entityID); - if (renderable) { - auto textRenderable = std::static_pointer_cast(renderable); - ItemKey::Builder key; - // Similar to EntityRenderer::getKey() - if (textRenderable->isTextTransparent()) { - key = ItemKey::Builder::transparentShape().withSubMetaCulled().withTagBits(textRenderable->getTagMask()).withLayer(textRenderable->getHifiRenderLayer()); - } else if (textRenderable->_canCastShadow) { - key = ItemKey::Builder::opaqueShape().withSubMetaCulled().withTagBits(textRenderable->getTagMask()).withShadowCaster().withLayer(textRenderable->getHifiRenderLayer()); - } else { - key = ItemKey::Builder::opaqueShape().withSubMetaCulled().withTagBits(textRenderable->getTagMask()).withLayer(textRenderable->getHifiRenderLayer()); - } + auto entityTreeRenderer = DependencyManager::get(); + if (entityTreeRenderer) { + auto renderable = entityTreeRenderer->renderableForEntityId(_entityID); + if (renderable) { + auto textRenderable = std::static_pointer_cast(renderable); + ItemKey::Builder key; + // Similar to EntityRenderer::getKey() + if (textRenderable->isTextTransparent()) { + key = ItemKey::Builder::transparentShape().withSubMetaCulled().withTagBits(textRenderable->getTagMask()).withLayer(textRenderable->getHifiRenderLayer()); + } else if (textRenderable->_canCastShadow) { + key = ItemKey::Builder::opaqueShape().withSubMetaCulled().withTagBits(textRenderable->getTagMask()).withShadowCaster().withLayer(textRenderable->getHifiRenderLayer()); + } else { + key = ItemKey::Builder::opaqueShape().withSubMetaCulled().withTagBits(textRenderable->getTagMask()).withLayer(textRenderable->getHifiRenderLayer()); + } - if (!textRenderable->_visible) { - key.withInvisible(); + if (!textRenderable->_visible) { + key.withInvisible(); + } + return key; } - return key; } return ItemKey::Builder::opaqueShape(); } Item::Bound entities::TextPayload::getBound() const { - auto renderable = DependencyManager::get()->renderableForEntityId(_entityID); - if (renderable) { - return std::static_pointer_cast(renderable)->getBound(); + auto entityTreeRenderer = DependencyManager::get(); + if (entityTreeRenderer) { + auto renderable = entityTreeRenderer->renderableForEntityId(_entityID); + if (renderable) { + return std::static_pointer_cast(renderable)->getBound(); + } } return Item::Bound(); } ShapeKey entities::TextPayload::getShapeKey() const { - auto renderable = DependencyManager::get()->renderableForEntityId(_entityID); - if (renderable) { - auto textRenderable = std::static_pointer_cast(renderable); + auto entityTreeRenderer = DependencyManager::get(); + if (entityTreeRenderer) { + auto renderable = entityTreeRenderer->renderableForEntityId(_entityID); + if (renderable) { + auto textRenderable = std::static_pointer_cast(renderable); - auto builder = render::ShapeKey::Builder().withOwnPipeline(); - if (textRenderable->isTextTransparent()) { - builder.withTranslucent(); + auto builder = render::ShapeKey::Builder().withOwnPipeline(); + if (textRenderable->isTextTransparent()) { + builder.withTranslucent(); + } + if (textRenderable->_unlit) { + builder.withUnlit(); + } + if (textRenderable->_primitiveMode == PrimitiveMode::LINES) { + builder.withWireframe(); + } + return builder.build(); } - if (textRenderable->_unlit) { - builder.withUnlit(); - } - if (textRenderable->_primitiveMode == PrimitiveMode::LINES) { - builder.withWireframe(); - } - return builder.build(); } return ShapeKey::Builder::invalid(); } @@ -336,7 +345,11 @@ void entities::TextPayload::render(RenderArgs* args) { return; } - auto renderable = DependencyManager::get()->renderableForEntityId(_entityID); + auto entityTreeRenderer = DependencyManager::get(); + if (!entityTreeRenderer) { + return; + } + auto renderable = entityTreeRenderer->renderableForEntityId(_entityID); if (!renderable) { return; }