fix image y flip and text crash

This commit is contained in:
SamGondelman 2019-07-03 23:14:52 -07:00
parent a87072a23d
commit ea1b117ca4
2 changed files with 47 additions and 35 deletions

View file

@ -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<GeometryCache>()->renderQuad(
*batch, glm::vec2(-x, -y), glm::vec2(x, y), texCoordBottomLeft, texCoordTopRight,

View file

@ -277,51 +277,60 @@ entities::TextPayload::~TextPayload() {
}
ItemKey entities::TextPayload::getKey() const {
auto renderable = DependencyManager::get<EntityTreeRenderer>()->renderableForEntityId(_entityID);
if (renderable) {
auto textRenderable = std::static_pointer_cast<TextEntityRenderer>(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<EntityTreeRenderer>();
if (entityTreeRenderer) {
auto renderable = entityTreeRenderer->renderableForEntityId(_entityID);
if (renderable) {
auto textRenderable = std::static_pointer_cast<TextEntityRenderer>(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<EntityTreeRenderer>()->renderableForEntityId(_entityID);
if (renderable) {
return std::static_pointer_cast<TextEntityRenderer>(renderable)->getBound();
auto entityTreeRenderer = DependencyManager::get<EntityTreeRenderer>();
if (entityTreeRenderer) {
auto renderable = entityTreeRenderer->renderableForEntityId(_entityID);
if (renderable) {
return std::static_pointer_cast<TextEntityRenderer>(renderable)->getBound();
}
}
return Item::Bound();
}
ShapeKey entities::TextPayload::getShapeKey() const {
auto renderable = DependencyManager::get<EntityTreeRenderer>()->renderableForEntityId(_entityID);
if (renderable) {
auto textRenderable = std::static_pointer_cast<TextEntityRenderer>(renderable);
auto entityTreeRenderer = DependencyManager::get<EntityTreeRenderer>();
if (entityTreeRenderer) {
auto renderable = entityTreeRenderer->renderableForEntityId(_entityID);
if (renderable) {
auto textRenderable = std::static_pointer_cast<TextEntityRenderer>(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<EntityTreeRenderer>()->renderableForEntityId(_entityID);
auto entityTreeRenderer = DependencyManager::get<EntityTreeRenderer>();
if (!entityTreeRenderer) {
return;
}
auto renderable = entityTreeRenderer->renderableForEntityId(_entityID);
if (!renderable) {
return;
}