14 #ifndef hifi_RenderableTextEntityItem_h
15 #define hifi_RenderableTextEntityItem_h
17 #include "RenderableEntityItem.h"
19 #include <procedural/Procedural.h>
24 namespace render {
namespace entities {
28 class TextEntityRenderer :
public TypedEntityRenderer<TextEntityItem> {
29 using Parent = TypedEntityRenderer<TextEntityItem>;
30 using Pointer = std::shared_ptr<TextEntityRenderer>;
32 TextEntityRenderer(
const EntityItemPointer& entity);
33 ~TextEntityRenderer();
35 QSizeF textSize(
const QString& text)
const;
38 bool isTransparent()
const override;
39 bool isTextTransparent()
const;
40 Item::Bound getBound(RenderArgs* args)
override;
41 ShapeKey getShapeKey()
override;
42 ItemKey getKey()
override;
43 virtual uint32_t metaFetchMetaSubItems(ItemIDs& subItems)
const override;
45 void onAddToSceneTyped(
const TypedEntityPointer& entity)
override;
46 void onRemoveFromSceneTyped(
const TypedEntityPointer& entity)
override;
49 virtual bool needsRenderUpdate()
const override;
50 virtual void doRenderUpdateSynchronousTyped(
const ScenePointer& scene, Transaction& transaction,
const TypedEntityPointer& entity)
override;
51 virtual void doRenderUpdateAsynchronousTyped(
const TypedEntityPointer& entity)
override;
52 virtual void doRender(RenderArgs* args)
override;
54 std::shared_ptr<TextRenderer3D> _textRenderer;
56 PulsePropertyGroup _pulseProperties;
62 bool _unlit {
false };
64 std::shared_ptr<graphics::ProceduralMaterial> _material { std::make_shared<graphics::ProceduralMaterial>() };
65 glm::vec3 _backgroundColor { NAN };
66 float _backgroundAlpha { NAN };
73 glm::vec3 _dimensions;
76 TextAlignment _alignment { TextAlignment::LEFT };
77 TextEffect _effect { TextEffect::NO_EFFECT };
78 glm::vec3 _effectColor { 0 };
79 float _effectThickness { 0.0f };
81 int _geometryID { 0 };
83 std::shared_ptr<TextPayload> _textPayload;
84 render::ItemID _textRenderID;
85 void updateTextRenderItem()
const;
87 friend class render::entities::TextPayload;
92 TextPayload() =
default;
93 TextPayload(
const QUuid& entityID,
const std::weak_ptr<TextRenderer3D>& textRenderer);
96 typedef render::Payload<TextPayload> Payload;
97 typedef Payload::DataPointer Pointer;
99 ItemKey getKey()
const;
100 Item::Bound getBound(RenderArgs* args)
const;
101 ShapeKey getShapeKey()
const;
102 void render(RenderArgs* args);
103 bool passesZoneOcclusionTest(
const std::unordered_set<QUuid>& containingZones)
const;
107 std::weak_ptr<TextRenderer3D> _textRenderer;
109 int _geometryID { 0 };
115 template <>
const ItemKey payloadGetKey(
const entities::TextPayload::Pointer& payload);
116 template <>
const Item::Bound payloadGetBound(
const entities::TextPayload::Pointer& payload, RenderArgs* args);
117 template <>
const ShapeKey shapeGetShapeKey(
const entities::TextPayload::Pointer& payload);
118 template <>
void payloadRender(
const entities::TextPayload::Pointer& payload, RenderArgs* args);
119 template <>
bool payloadPassesZoneOcclusionTest(
const entities::TextPayload::Pointer& payload,
const std::unordered_set<QUuid>& containingZones);