Overte C++ Documentation
GameWorkloadRenderer.h
1 //
2 // GameWorkloadRender.h
3 //
4 // Created by Sam Gateau on 2/20/2018.
5 // Copyright 2018 High Fidelity, Inc.
6 //
7 // Distributed under the Apache License, Version 2.0.
8 // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
9 //
10 #ifndef hifi_GameWorkloadRenderer_h
11 #define hifi_GameWorkloadRenderer_h
12 
13 #include "GameWorkload.h"
14 
15 class GameSpaceToRenderConfig : public workload::Job::Config {
16  Q_OBJECT
17  Q_PROPERTY(bool freezeViews MEMBER freezeViews NOTIFY dirty)
18  Q_PROPERTY(bool showProxies MEMBER showProxies NOTIFY dirty)
19  Q_PROPERTY(bool showViews MEMBER showViews NOTIFY dirty)
20 public:
21 
22  bool freezeViews{ false };
23  bool showProxies{ false };
24  bool showViews{ false };
25 signals:
26  void dirty();
27 
28 protected:
29 };
30 
31 class GameSpaceToRender {
32 public:
33  using Config = GameSpaceToRenderConfig;
34  using Outputs = render::Transaction;
35  using JobModel = workload::Job::ModelO<GameSpaceToRender, Outputs, Config>;
36 
37  GameSpaceToRender() {}
38 
39  void configure(const Config& config);
40  void run(const workload::WorkloadContextPointer& renderContext, Outputs& outputs);
41 
42 protected:
43  render::ItemID _spaceRenderItemID{ render::Item::INVALID_ITEM_ID };
44  bool _freezeViews{ false };
45  bool _showAllProxies{ false };
46  bool _showAllViews{ false };
47 };
48 
49 
50 class GameWorkloadRenderItem {
51 public:
52  using Payload = render::Payload<GameWorkloadRenderItem>;
53  using Pointer = Payload::DataPointer;
54 
55  GameWorkloadRenderItem();
56  ~GameWorkloadRenderItem() {}
57  void render(RenderArgs* args);
58 
59  render::Item::Bound& editBound() { return _bound; }
60  const render::Item::Bound& getBound(RenderArgs* args) { return _bound; }
61 
62  void setVisible(bool visible);
63  void showProxies(bool show);
64  void showViews(bool show);
65 
66  void setAllProxies(const workload::Proxy::Vector& proxies);
67  void setAllViews(const workload::Views& views);
68 
69  render::ItemKey getKey() const;
70 
71 protected:
72  render::Item::Bound _bound;
73 
74  workload::Proxy::Vector _myOwnProxies;
75  gpu::BufferPointer _allProxiesBuffer;
76  uint32_t _numAllProxies{ 0 };
77 
78  workload::Views _myOwnViews;
79  gpu::BufferPointer _allViewsBuffer;
80  uint32_t _numAllViews{ 0 };
81 
82  gpu::PipelinePointer _drawAllProxiesPipeline;
83  const gpu::PipelinePointer getProxiesPipeline();
84 
85  gpu::PipelinePointer _drawAllViewsPipeline;
86  const gpu::PipelinePointer getViewsPipeline();
87 
88  uint32_t _numDrawViewVerts{ 0 };
89  gpu::BufferPointer _drawViewBuffer;
90  const gpu::BufferPointer getDrawViewBuffer();
91 
92  render::ItemKey _key;
93  bool _showProxies{ true };
94  bool _showViews{ true };
95 };
96 
97 namespace render {
98  template <> const ItemKey payloadGetKey(const GameWorkloadRenderItem::Pointer& payload);
99  template <> const Item::Bound payloadGetBound(const GameWorkloadRenderItem::Pointer& payload, RenderArgs* args);
100  template <> void payloadRender(const GameWorkloadRenderItem::Pointer& payload, RenderArgs* args);
101  template <> const ShapeKey shapeGetShapeKey(const GameWorkloadRenderItem::Pointer& payload);
102 }
103 
104 #endif