14 #ifndef hifi_RenderableTextEntityItem_h
15 #define hifi_RenderableTextEntityItem_h
17 #include "RenderableEntityItem.h"
19 #include <GeometryCache.h>
20 #include <procedural/Procedural.h>
25 namespace render {
namespace entities {
29 class TextEntityRenderer :
public TypedEntityRenderer<TextEntityItem> {
30 using Parent = TypedEntityRenderer<TextEntityItem>;
31 using Pointer = std::shared_ptr<TextEntityRenderer>;
33 TextEntityRenderer(
const EntityItemPointer& entity);
34 ~TextEntityRenderer();
36 QSizeF textSize(
const QString& text)
const;
39 bool isTransparent()
const override;
40 bool isTextTransparent()
const;
41 Item::Bound getBound(RenderArgs* args)
override;
42 ShapeKey getShapeKey()
override;
43 ItemKey getKey()
override;
44 virtual uint32_t metaFetchMetaSubItems(ItemIDs& subItems)
const override;
46 void onAddToSceneTyped(
const TypedEntityPointer& entity)
override;
47 void onRemoveFromSceneTyped(
const TypedEntityPointer& entity)
override;
50 virtual bool needsRenderUpdate()
const override;
51 virtual void doRenderUpdateSynchronousTyped(
const ScenePointer& scene, Transaction& transaction,
const TypedEntityPointer& entity)
override;
52 virtual void doRenderUpdateAsynchronousTyped(
const TypedEntityPointer& entity)
override;
53 virtual void doRender(RenderArgs* args)
override;
55 std::shared_ptr<TextRenderer3D> _textRenderer;
57 PulsePropertyGroup _pulseProperties;
63 bool _unlit {
false };
65 std::shared_ptr<graphics::ProceduralMaterial> _material { std::make_shared<graphics::ProceduralMaterial>() };
66 glm::vec3 _backgroundColor { NAN };
67 float _backgroundAlpha { NAN };
74 glm::vec3 _dimensions;
77 TextAlignment _alignment { TextAlignment::LEFT };
78 TextVerticalAlignment _verticalAlignment { TextVerticalAlignment::TOP };
79 TextEffect _effect { TextEffect::NO_EFFECT };
80 glm::vec3 _effectColor { 0 };
81 float _effectThickness { 0.0f };
83 FadeBuffers _fadeBuffers;
85 int _geometryID { 0 };
87 std::shared_ptr<TextPayload> _textPayload;
88 render::ItemID _textRenderID { render::Item::INVALID_ITEM_ID };
89 void updateTextRenderItem()
const;
91 friend class render::entities::TextPayload;
96 TextPayload() =
default;
97 TextPayload(
const QUuid& entityID,
const std::weak_ptr<TextRenderer3D>& textRenderer);
100 typedef render::Payload<TextPayload> Payload;
101 typedef Payload::DataPointer Pointer;
103 ItemKey getKey()
const;
104 Item::Bound getBound(RenderArgs* args)
const;
105 ShapeKey getShapeKey()
const;
106 void render(RenderArgs* args);
107 bool passesZoneOcclusionTest(
const std::unordered_set<QUuid>& containingZones)
const;
108 ItemID computeMirrorView(ViewFrustum& viewFrustum)
const;
112 std::weak_ptr<TextRenderer3D> _textRenderer;
113 Transform _prevRenderTransform;
115 int _geometryID { 0 };
121 template <>
const ItemKey payloadGetKey(
const entities::TextPayload::Pointer& payload);
122 template <>
const Item::Bound payloadGetBound(
const entities::TextPayload::Pointer& payload, RenderArgs* args);
123 template <>
const ShapeKey shapeGetShapeKey(
const entities::TextPayload::Pointer& payload);
124 template <>
void payloadRender(
const entities::TextPayload::Pointer& payload, RenderArgs* args);
125 template <>
bool payloadPassesZoneOcclusionTest(
const entities::TextPayload::Pointer& payload,
const std::unordered_set<QUuid>& containingZones);
126 template <> ItemID payloadComputeMirrorView(
const entities::TextPayload::Pointer& payload, ViewFrustum& viewFrustum);