Overte C++ Documentation
RenderablePolyLineEntityItem.h
1 //
2 // RenderablePolyLineEntityItem.h
3 // libraries/entities-renderer/src/
4 //
5 // Created by Eric Levin on 6/22/15.
6 // Copyright 2015 High Fidelity, Inc.
7 //
8 // Distributed under the Apache License, Version 2.0.
9 // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
10 //
11 
12 #ifndef hifi_RenderablePolyLineEntityItem_h
13 #define hifi_RenderablePolyLineEntityItem_h
14 
15 #include "RenderableEntityItem.h"
16 #include <TextureCache.h>
17 
18 namespace render { namespace entities {
19 
20 class PolyLineEntityRenderer : public TypedEntityRenderer<PolyLineEntityItem> {
21  using Parent = TypedEntityRenderer<PolyLineEntityItem>;
22  friend class EntityRenderer;
23 
24 public:
25  PolyLineEntityRenderer(const EntityItemPointer& entity);
26 
27  void updateModelTransformAndBound(const EntityItemPointer& entity) override;
28 
29  virtual bool isTransparent() const override;
30 
31  ComponentMode getFadeOutMode() const override { return ComponentMode::COMPONENT_MODE_DISABLED; }
32 
33 protected:
34  virtual bool needsRenderUpdateFromTypedEntity(const TypedEntityPointer& entity) const override;
35  virtual void doRenderUpdateSynchronousTyped(const ScenePointer& scene, Transaction& transaction, const TypedEntityPointer& entity) override;
36  virtual void doRenderUpdateAsynchronousTyped(const TypedEntityPointer& entity) override;
37 
38  virtual ItemKey getKey() override;
39  virtual ShapeKey getShapeKey() override;
40  virtual void doRender(RenderArgs* args) override;
41 
42  static void buildPipelines();
43  void updateGeometry();
44  void updateData();
45 
46  QVector<glm::vec3> _points;
47  QVector<glm::vec3> _normals;
48  QVector<glm::vec3> _colors;
49  glm::vec3 _color;
50  QVector<float> _widths;
51 
52  NetworkTexturePointer _texture;
53  float _textureAspectRatio { 1.0f };
54  bool _textureLoaded { false };
55 
56  bool _isUVModeStretch { false };
57  bool _faceCamera { false };
58  bool _glow { false };
59 
60  size_t _numVertices { 0 };
61  gpu::BufferPointer _polylineDataBuffer;
62  gpu::BufferPointer _polylineGeometryBuffer;
63  static std::map<std::pair<render::Args::RenderMethod, bool>, gpu::PipelinePointer> _pipelines;
64 };
65 
66 } } // namespace
67 
68 #endif // hifi_RenderablePolyLineEntityItem_h