mirror of
https://github.com/overte-org/overte.git
synced 2025-04-08 07:12:40 +02:00
fix image y flip and text crash
This commit is contained in:
parent
a87072a23d
commit
ea1b117ca4
2 changed files with 47 additions and 35 deletions
|
@ -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,
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue