Overte C++ Documentation
RenderableImageEntityItem.h
1 //
2 // Created by Sam Gondelman on 11/29/18
3 // Copyright 2018 High Fidelity, Inc.
4 // Copyright 2023 Overte e.V.
5 //
6 // Distributed under the Apache License, Version 2.0.
7 // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
8 // SPDX-License-Identifier: Apache-2.0
9 //
10 
11 #ifndef hifi_RenderableImageEntityItem_h
12 #define hifi_RenderableImageEntityItem_h
13 
14 #include "RenderableEntityItem.h"
15 
16 #include <ImageEntityItem.h>
17 
18 #include <procedural/Procedural.h>
19 
20 namespace render { namespace entities {
21 
22 class ImageEntityRenderer : public TypedEntityRenderer<ImageEntityItem> {
23  using Parent = TypedEntityRenderer<ImageEntityItem>;
24  using Pointer = std::shared_ptr<ImageEntityRenderer>;
25 public:
26  ImageEntityRenderer(const EntityItemPointer& entity);
27  ~ImageEntityRenderer();
28 
29  gpu::TexturePointer getTexture() override { return _texture ? _texture->getGPUTexture() : nullptr; }
30 
31 protected:
32  Item::Bound getBound(RenderArgs* args) override;
33  ShapeKey getShapeKey() override;
34 
35  bool isTransparent() const override;
36 
37 private:
38  virtual bool needsRenderUpdate() const override;
39  virtual void doRenderUpdateSynchronousTyped(const ScenePointer& scene, Transaction& transaction, const TypedEntityPointer& entity) override;
40  virtual void doRenderUpdateAsynchronousTyped(const TypedEntityPointer& entity) override;
41  virtual void doRender(RenderArgs* args) override;
42 
43  QString _imageURL;
44  NetworkTexturePointer _texture;
45  bool _textureIsLoaded { false };
46 
47  bool _emissive { false };
48  bool _keepAspectRatio { false };
49  QRect _subImage;
50 
51  std::shared_ptr<graphics::ProceduralMaterial> _material { std::make_shared<graphics::ProceduralMaterial>() };
52  glm::vec3 _color { NAN };
53  float _alpha { NAN };
54  PulsePropertyGroup _pulseProperties;
55 
56  int _geometryId { 0 };
57 };
58 
59 } }
60 #endif // hifi_RenderableImageEntityItem_h