mirror of
https://github.com/overte-org/overte.git
synced 2025-08-09 17:01:18 +02:00
Merge pull request #15882 from SamGondelman/imagey
BUGZ-661: Fix Image Entity Y flip and Text Entity shutdown crash
This commit is contained in:
commit
47a863cb11
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 x = _keepAspectRatio ? fromImage.width() / (2.0f * maxSize) : 0.5f;
|
||||||
float y = _keepAspectRatio ? fromImage.height() / (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 texCoordBottomLeft((fromImage.x() + 0.5f) / imageWidth, (fromImage.y() + fromImage.height() - 0.5f) / imageHeight);
|
||||||
glm::vec2 texCoordTopRight((fromImage.x() + fromImage.width() - 0.5f) / imageWidth,
|
glm::vec2 texCoordTopRight((fromImage.x() + fromImage.width() - 0.5f) / imageWidth, (fromImage.y() + 0.5f) / imageHeight);
|
||||||
-(fromImage.y() + fromImage.height() - 0.5f) / imageHeight);
|
|
||||||
|
|
||||||
DependencyManager::get<GeometryCache>()->renderQuad(
|
DependencyManager::get<GeometryCache>()->renderQuad(
|
||||||
*batch, glm::vec2(-x, -y), glm::vec2(x, y), texCoordBottomLeft, texCoordTopRight,
|
*batch, glm::vec2(-x, -y), glm::vec2(x, y), texCoordBottomLeft, texCoordTopRight,
|
||||||
|
|
|
@ -277,51 +277,60 @@ entities::TextPayload::~TextPayload() {
|
||||||
}
|
}
|
||||||
|
|
||||||
ItemKey entities::TextPayload::getKey() const {
|
ItemKey entities::TextPayload::getKey() const {
|
||||||
auto renderable = DependencyManager::get<EntityTreeRenderer>()->renderableForEntityId(_entityID);
|
auto entityTreeRenderer = DependencyManager::get<EntityTreeRenderer>();
|
||||||
if (renderable) {
|
if (entityTreeRenderer) {
|
||||||
auto textRenderable = std::static_pointer_cast<TextEntityRenderer>(renderable);
|
auto renderable = entityTreeRenderer->renderableForEntityId(_entityID);
|
||||||
ItemKey::Builder key;
|
if (renderable) {
|
||||||
// Similar to EntityRenderer::getKey()
|
auto textRenderable = std::static_pointer_cast<TextEntityRenderer>(renderable);
|
||||||
if (textRenderable->isTextTransparent()) {
|
ItemKey::Builder key;
|
||||||
key = ItemKey::Builder::transparentShape().withSubMetaCulled().withTagBits(textRenderable->getTagMask()).withLayer(textRenderable->getHifiRenderLayer());
|
// Similar to EntityRenderer::getKey()
|
||||||
} else if (textRenderable->_canCastShadow) {
|
if (textRenderable->isTextTransparent()) {
|
||||||
key = ItemKey::Builder::opaqueShape().withSubMetaCulled().withTagBits(textRenderable->getTagMask()).withShadowCaster().withLayer(textRenderable->getHifiRenderLayer());
|
key = ItemKey::Builder::transparentShape().withSubMetaCulled().withTagBits(textRenderable->getTagMask()).withLayer(textRenderable->getHifiRenderLayer());
|
||||||
} else {
|
} else if (textRenderable->_canCastShadow) {
|
||||||
key = ItemKey::Builder::opaqueShape().withSubMetaCulled().withTagBits(textRenderable->getTagMask()).withLayer(textRenderable->getHifiRenderLayer());
|
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) {
|
if (!textRenderable->_visible) {
|
||||||
key.withInvisible();
|
key.withInvisible();
|
||||||
|
}
|
||||||
|
return key;
|
||||||
}
|
}
|
||||||
return key;
|
|
||||||
}
|
}
|
||||||
return ItemKey::Builder::opaqueShape();
|
return ItemKey::Builder::opaqueShape();
|
||||||
}
|
}
|
||||||
|
|
||||||
Item::Bound entities::TextPayload::getBound() const {
|
Item::Bound entities::TextPayload::getBound() const {
|
||||||
auto renderable = DependencyManager::get<EntityTreeRenderer>()->renderableForEntityId(_entityID);
|
auto entityTreeRenderer = DependencyManager::get<EntityTreeRenderer>();
|
||||||
if (renderable) {
|
if (entityTreeRenderer) {
|
||||||
return std::static_pointer_cast<TextEntityRenderer>(renderable)->getBound();
|
auto renderable = entityTreeRenderer->renderableForEntityId(_entityID);
|
||||||
|
if (renderable) {
|
||||||
|
return std::static_pointer_cast<TextEntityRenderer>(renderable)->getBound();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return Item::Bound();
|
return Item::Bound();
|
||||||
}
|
}
|
||||||
|
|
||||||
ShapeKey entities::TextPayload::getShapeKey() const {
|
ShapeKey entities::TextPayload::getShapeKey() const {
|
||||||
auto renderable = DependencyManager::get<EntityTreeRenderer>()->renderableForEntityId(_entityID);
|
auto entityTreeRenderer = DependencyManager::get<EntityTreeRenderer>();
|
||||||
if (renderable) {
|
if (entityTreeRenderer) {
|
||||||
auto textRenderable = std::static_pointer_cast<TextEntityRenderer>(renderable);
|
auto renderable = entityTreeRenderer->renderableForEntityId(_entityID);
|
||||||
|
if (renderable) {
|
||||||
|
auto textRenderable = std::static_pointer_cast<TextEntityRenderer>(renderable);
|
||||||
|
|
||||||
auto builder = render::ShapeKey::Builder().withOwnPipeline();
|
auto builder = render::ShapeKey::Builder().withOwnPipeline();
|
||||||
if (textRenderable->isTextTransparent()) {
|
if (textRenderable->isTextTransparent()) {
|
||||||
builder.withTranslucent();
|
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();
|
return ShapeKey::Builder::invalid();
|
||||||
}
|
}
|
||||||
|
@ -336,7 +345,11 @@ void entities::TextPayload::render(RenderArgs* args) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto renderable = DependencyManager::get<EntityTreeRenderer>()->renderableForEntityId(_entityID);
|
auto entityTreeRenderer = DependencyManager::get<EntityTreeRenderer>();
|
||||||
|
if (!entityTreeRenderer) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
auto renderable = entityTreeRenderer->renderableForEntityId(_entityID);
|
||||||
if (!renderable) {
|
if (!renderable) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue