10 #ifndef hifi_RenderableMaterialEntityItem_h
11 #define hifi_RenderableMaterialEntityItem_h
13 #include "RenderableEntityItem.h"
15 #include <MaterialEntityItem.h>
17 #include <procedural/ProceduralMaterialCache.h>
19 class NetworkMaterial;
21 namespace render {
namespace entities {
23 class MaterialEntityRenderer :
public TypedEntityRenderer<MaterialEntityItem> {
24 using Parent = TypedEntityRenderer<MaterialEntityItem>;
25 using Pointer = std::shared_ptr<MaterialEntityRenderer>;
27 MaterialEntityRenderer(
const EntityItemPointer& entity) : Parent(entity) {}
28 ~MaterialEntityRenderer() { deleteMaterial(_parentID, _parentMaterialName); }
30 graphics::MaterialPointer getTopMaterial()
override {
return getMaterial(); }
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;
38 ItemKey getKey()
override;
39 ShapeKey getShapeKey()
override;
42 QString _materialData;
43 QString _parentMaterialName;
47 MaterialMappingMode _materialMappingMode { UNSET_MATERIAL_MAPPING_MODE };
48 bool _materialRepeat {
false };
49 glm::vec2 _materialMappingPos;
50 glm::vec2 _materialMappingScale;
51 float _materialMappingRot;
53 glm::vec3 _dimensions;
55 bool _texturesLoaded {
false };
56 bool _retryApply {
false };
58 std::shared_ptr<NetworkMaterial> getMaterial()
const;
59 void setCurrentMaterialName(
const std::string& currentMaterialName);
61 void applyTextureTransform(std::shared_ptr<NetworkMaterial>& material);
62 void applyMaterial(
const TypedEntityPointer& entity);
63 void deleteMaterial(
const QUuid& oldParentID,
const QString& oldParentMaterialName);
65 NetworkMaterialResourcePointer _networkMaterial;
66 NetworkMaterialResource::ParsedMaterials _parsedMaterials;
67 std::shared_ptr<NetworkMaterial> _appliedMaterial;
68 std::string _currentMaterialName;
70 gpu::BufferPointer _colorBuffer { std::make_shared<gpu::Buffer>() };