Overte C++ Documentation
FadeEffectJobs.h
1 //
2 // FadeEffectJobs.h
3 
4 // Created by Olivier Prat on 07/07/2017.
5 // Copyright 2017 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 
11 #ifndef hifi_render_utils_FadeEffectJobs_h
12 #define hifi_render_utils_FadeEffectJobs_h
13 
14 #include "FadeEffect.h"
15 
16 #include <FadeTiming.h>
17 #include <gpu/Pipeline.h>
18 #include <render/ShapePipeline.h>
19 #include <render/RenderFetchCullSortTask.h>
20 #include <render/Transition.h>
21 
22 class FadeEditConfig : public render::Job::Config {
23  Q_OBJECT
24  Q_PROPERTY(bool editFade MEMBER editFade NOTIFY dirty)
25  Q_PROPERTY(int editedCategory MEMBER editedCategory NOTIFY dirty)
26 
27 public:
28 
29  bool editFade { false };
30  int editedCategory { (int)TransitionType::ELEMENT_ENTER_DOMAIN };
31 
32 signals:
33 
34  void dirty();
35 };
36 
37 class FadeConfig : public render::Job::Config {
38  Q_OBJECT
39  Q_PROPERTY(float duration READ getDuration WRITE setDuration NOTIFY dirty)
40  Q_PROPERTY(float baseSizeX READ getBaseSizeX WRITE setBaseSizeX NOTIFY dirty)
41  Q_PROPERTY(float baseSizeY READ getBaseSizeY WRITE setBaseSizeY NOTIFY dirty)
42  Q_PROPERTY(float baseSizeZ READ getBaseSizeZ WRITE setBaseSizeZ NOTIFY dirty)
43  Q_PROPERTY(float baseLevel READ getBaseLevel WRITE setBaseLevel NOTIFY dirty)
44  Q_PROPERTY(bool isInverted READ isInverted WRITE setInverted NOTIFY dirty)
45  Q_PROPERTY(float noiseSizeX READ getNoiseSizeX WRITE setNoiseSizeX NOTIFY dirty)
46  Q_PROPERTY(float noiseSizeY READ getNoiseSizeY WRITE setNoiseSizeY NOTIFY dirty)
47  Q_PROPERTY(float noiseSizeZ READ getNoiseSizeZ WRITE setNoiseSizeZ NOTIFY dirty)
48  Q_PROPERTY(float noiseLevel READ getNoiseLevel WRITE setNoiseLevel NOTIFY dirty)
49  Q_PROPERTY(float edgeWidth READ getEdgeWidth WRITE setEdgeWidth NOTIFY dirty)
50  Q_PROPERTY(QColor edgeInnerColor READ getEdgeInnerColor WRITE setEdgeInnerColor NOTIFY dirty)
51  Q_PROPERTY(float edgeInnerIntensity READ getEdgeInnerIntensity WRITE setEdgeInnerIntensity NOTIFY dirty)
52  Q_PROPERTY(QColor edgeOuterColor READ getEdgeOuterColor WRITE setEdgeOuterColor NOTIFY dirty)
53  Q_PROPERTY(float edgeOuterIntensity READ getEdgeOuterIntensity WRITE setEdgeOuterIntensity NOTIFY dirty)
54  Q_PROPERTY(int timing READ getTiming WRITE setTiming NOTIFY dirty)
55  Q_PROPERTY(float noiseSpeedX READ getNoiseSpeedX WRITE setNoiseSpeedX NOTIFY dirty)
56  Q_PROPERTY(float noiseSpeedY READ getNoiseSpeedY WRITE setNoiseSpeedY NOTIFY dirty)
57  Q_PROPERTY(float noiseSpeedZ READ getNoiseSpeedZ WRITE setNoiseSpeedZ NOTIFY dirty)
58  Q_PROPERTY(float threshold MEMBER threshold NOTIFY dirty)
59  Q_PROPERTY(bool manualFade MEMBER manualFade NOTIFY dirty)
60  Q_PROPERTY(float manualThreshold MEMBER manualThreshold NOTIFY dirty)
61 
62 public:
63 
64  FadeConfig();
65 
66  void setEditedCategory(int value);
67 
68  void setDuration(float value);
69  float getDuration() const;
70 
71  void setBaseSizeX(float value);
72  float getBaseSizeX() const;
73 
74  void setBaseSizeY(float value);
75  float getBaseSizeY() const;
76 
77  void setBaseSizeZ(float value);
78  float getBaseSizeZ() const;
79 
80  void setBaseLevel(float value);
81  float getBaseLevel() const { return props.baseLevel; }
82 
83  void setInverted(bool value);
84  bool isInverted() const;
85 
86  void setNoiseSizeX(float value);
87  float getNoiseSizeX() const;
88 
89  void setNoiseSizeY(float value);
90  float getNoiseSizeY() const;
91 
92  void setNoiseSizeZ(float value);
93  float getNoiseSizeZ() const;
94 
95  void setNoiseLevel(float value);
96  float getNoiseLevel() const { return props.noiseLevel; }
97 
98  void setNoiseSpeedX(float value);
99  float getNoiseSpeedX() const;
100 
101  void setNoiseSpeedY(float value);
102  float getNoiseSpeedY() const;
103 
104  void setNoiseSpeedZ(float value);
105  float getNoiseSpeedZ() const;
106 
107  void setEdgeWidth(float value);
108  float getEdgeWidth() const;
109 
110  void setEdgeInnerColor(const QColor& value);
111  QColor getEdgeInnerColor() const;
112 
113  void setEdgeInnerIntensity(float value);
114  float getEdgeInnerIntensity() const { return props.innerEdgeColor.a; }
115 
116  void setEdgeOuterColor(const QColor& value);
117  QColor getEdgeOuterColor() const;
118 
119  void setEdgeOuterIntensity(float value);
120  float getEdgeOuterIntensity() const { return props.outerEdgeColor.a; }
121 
122  void setTiming(int value);
123  int getTiming() const { return (int)props.timing; }
124 
125  FadeProperties props;
126  float threshold { 0.f };
127  float manualThreshold { 0.f };
128  bool manualFade { false };
129 
130 signals:
131 
132  void dirty();
133  void dirtyCategory();
134 
135 };
136 
137 class FadeEditJob {
138 
139 public:
140 
141  using Config = FadeEditConfig;
142  using Output = render::ItemID;
143  using JobModel = render::Job::ModelO<FadeEditJob, Output, Config>;
144 
145  FadeEditJob() {}
146 
147  void configure(const Config& config);
148  void run(const render::RenderContextPointer& renderContext, Output& output);
149 
150 private:
151 
152  bool _isEditEnabled { false };
153  int _editedCategory { (int)TransitionType::ELEMENT_ENTER_DOMAIN };
154  render::ItemID _editedItem { render::Item::INVALID_ITEM_ID };
155 
156 };
157 
158 class FadeJob {
159 
160 public:
161  using Config = FadeConfig;
162  using Input = render::ItemID;
163  using JobModel = render::Job::ModelI<FadeJob, Input, Config>;
164 
165  FadeJob();
166 
167  void configure(const Config& config);
168  void run(const render::RenderContextPointer& renderContext, const Input& input);
169 
170 private:
171  FadeProperties _editedFadeProperties;
172  uint64_t _previousTime{ 0 };
173 
174  bool update(RenderArgs* args,
175  const Config& config,
176  const render::ScenePointer& scene,
177  render::Transaction& transaction,
178  render::Transition& transition,
179  const double deltaTime,
180  const render::ItemID editedItemID) const;
181  static float computeElementEnterRatio(double time, const double period, FadeTiming timing);
182 
183 };
184 
185 #endif // hifi_render_utils_FadeEffectJobs_h