Overte C++ Documentation
RenderableMaterialEntityItem.h
1 //
2 // Created by Sam Gondelman on 1/18/2018
3 // Copyright 2018 High Fidelity, Inc.
4 // Copyright 2024 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 //
9 
10 #ifndef hifi_RenderableMaterialEntityItem_h
11 #define hifi_RenderableMaterialEntityItem_h
12 
13 #include "RenderableEntityItem.h"
14 
15 #include <MaterialEntityItem.h>
16 
17 #include <procedural/ProceduralMaterialCache.h>
18 
19 class NetworkMaterial;
20 
21 namespace render { namespace entities {
22 
23 class MaterialEntityRenderer : public TypedEntityRenderer<MaterialEntityItem> {
24  using Parent = TypedEntityRenderer<MaterialEntityItem>;
25  using Pointer = std::shared_ptr<MaterialEntityRenderer>;
26 public:
27  MaterialEntityRenderer(const EntityItemPointer& entity) : Parent(entity) {}
28  ~MaterialEntityRenderer() { deleteMaterial(_parentID, _parentMaterialName); }
29 
30  graphics::MaterialPointer getTopMaterial() override { return getMaterial(); }
31 
32 private:
33  virtual void doRenderUpdateSynchronousTyped(const ScenePointer& scene, Transaction& transaction, const TypedEntityPointer& entity) override;
34  virtual void doRenderUpdateAsynchronousTyped(const TypedEntityPointer& entity) override;
35  virtual void doRender(RenderArgs* args) override;
36  virtual HighlightStyle getOutlineStyle(const ViewFrustum& viewFrustum, const size_t height) const override;
37 
38  ItemKey getKey() override;
39  ShapeKey getShapeKey() override;
40 
41  QString _materialURL;
42  QString _materialData;
43  QString _parentMaterialName;
44  quint16 _priority;
45  QUuid _parentID;
46 
47  MaterialMappingMode _materialMappingMode { UNSET_MATERIAL_MAPPING_MODE };
48  bool _materialRepeat { false };
49  glm::vec2 _materialMappingPos;
50  glm::vec2 _materialMappingScale;
51  float _materialMappingRot;
52  Transform _transform;
53  glm::vec3 _dimensions;
54 
55  bool _texturesLoaded { false };
56  bool _retryApply { false };
57 
58  std::shared_ptr<NetworkMaterial> getMaterial() const;
59  void setCurrentMaterialName(const std::string& currentMaterialName);
60 
61  void applyTextureTransform(std::shared_ptr<NetworkMaterial>& material);
62  void applyMaterial(const TypedEntityPointer& entity);
63  void deleteMaterial(const QUuid& oldParentID, const QString& oldParentMaterialName);
64 
65  NetworkMaterialResourcePointer _networkMaterial;
66  NetworkMaterialResource::ParsedMaterials _parsedMaterials;
67  std::shared_ptr<NetworkMaterial> _appliedMaterial;
68  std::string _currentMaterialName;
69 
70  gpu::BufferPointer _colorBuffer { std::make_shared<gpu::Buffer>() };
71 };
72 
73 } }
74 #endif // hifi_RenderableMaterialEntityItem_h