11 #ifndef hifi_render_utils_FadeEffectJobs_h
12 #define hifi_render_utils_FadeEffectJobs_h
14 #include "FadeEffect.h"
16 #include <gpu/Pipeline.h>
17 #include <render/ShapePipeline.h>
18 #include <render/RenderFetchCullSortTask.h>
19 #include <render/Transition.h>
22 FADE_ELEMENT_ENTER_LEAVE_DOMAIN = 0,
23 FADE_BUBBLE_ISECT_OWNER,
24 FADE_BUBBLE_ISECT_TRESPASSER,
25 FADE_USER_ENTER_LEAVE_DOMAIN,
32 class FadeEditConfig :
public render::Job::Config {
34 Q_PROPERTY(
bool editFade MEMBER editFade NOTIFY dirty)
38 bool editFade{
false };
45 class FadeConfig :
public render::Job::Config {
47 Q_PROPERTY(
int editedCategory MEMBER editedCategory WRITE setEditedCategory NOTIFY dirtyCategory)
48 Q_PROPERTY(
float duration READ getDuration WRITE setDuration NOTIFY dirty)
49 Q_PROPERTY(
float baseSizeX READ getBaseSizeX WRITE setBaseSizeX NOTIFY dirty)
50 Q_PROPERTY(
float baseSizeY READ getBaseSizeY WRITE setBaseSizeY NOTIFY dirty)
51 Q_PROPERTY(
float baseSizeZ READ getBaseSizeZ WRITE setBaseSizeZ NOTIFY dirty)
52 Q_PROPERTY(
float baseLevel READ getBaseLevel WRITE setBaseLevel NOTIFY dirty)
53 Q_PROPERTY(
bool isInverted READ isInverted WRITE setInverted NOTIFY dirty)
54 Q_PROPERTY(
float noiseSizeX READ getNoiseSizeX WRITE setNoiseSizeX NOTIFY dirty)
55 Q_PROPERTY(
float noiseSizeY READ getNoiseSizeY WRITE setNoiseSizeY NOTIFY dirty)
56 Q_PROPERTY(
float noiseSizeZ READ getNoiseSizeZ WRITE setNoiseSizeZ NOTIFY dirty)
57 Q_PROPERTY(
float noiseLevel READ getNoiseLevel WRITE setNoiseLevel NOTIFY dirty)
58 Q_PROPERTY(
float edgeWidth READ getEdgeWidth WRITE setEdgeWidth NOTIFY dirty)
59 Q_PROPERTY(QColor edgeInnerColor READ getEdgeInnerColor WRITE setEdgeInnerColor NOTIFY dirty)
60 Q_PROPERTY(
float edgeInnerIntensity READ getEdgeInnerIntensity WRITE setEdgeInnerIntensity NOTIFY dirty)
61 Q_PROPERTY(QColor edgeOuterColor READ getEdgeOuterColor WRITE setEdgeOuterColor NOTIFY dirty)
62 Q_PROPERTY(
float edgeOuterIntensity READ getEdgeOuterIntensity WRITE setEdgeOuterIntensity NOTIFY dirty)
63 Q_PROPERTY(
int timing READ getTiming WRITE setTiming NOTIFY dirty)
64 Q_PROPERTY(
float noiseSpeedX READ getNoiseSpeedX WRITE setNoiseSpeedX NOTIFY dirty)
65 Q_PROPERTY(
float noiseSpeedY READ getNoiseSpeedY WRITE setNoiseSpeedY NOTIFY dirty)
66 Q_PROPERTY(
float noiseSpeedZ READ getNoiseSpeedZ WRITE setNoiseSpeedZ NOTIFY dirty)
67 Q_PROPERTY(
float threshold MEMBER threshold NOTIFY dirty)
68 Q_PROPERTY(
bool manualFade MEMBER manualFade NOTIFY dirty)
69 Q_PROPERTY(
float manualThreshold MEMBER manualThreshold NOTIFY dirty)
84 void setEditedCategory(
int value);
86 void setDuration(
float value);
87 float getDuration()
const;
89 void setBaseSizeX(
float value);
90 float getBaseSizeX()
const;
92 void setBaseSizeY(
float value);
93 float getBaseSizeY()
const;
95 void setBaseSizeZ(
float value);
96 float getBaseSizeZ()
const;
98 void setBaseLevel(
float value);
99 float getBaseLevel()
const {
return events[editedCategory].baseLevel; }
101 void setInverted(
bool value);
102 bool isInverted()
const;
104 void setNoiseSizeX(
float value);
105 float getNoiseSizeX()
const;
107 void setNoiseSizeY(
float value);
108 float getNoiseSizeY()
const;
110 void setNoiseSizeZ(
float value);
111 float getNoiseSizeZ()
const;
113 void setNoiseLevel(
float value);
114 float getNoiseLevel()
const {
return events[editedCategory].noiseLevel; }
116 void setNoiseSpeedX(
float value);
117 float getNoiseSpeedX()
const;
119 void setNoiseSpeedY(
float value);
120 float getNoiseSpeedY()
const;
122 void setNoiseSpeedZ(
float value);
123 float getNoiseSpeedZ()
const;
125 void setEdgeWidth(
float value);
126 float getEdgeWidth()
const;
128 void setEdgeInnerColor(
const QColor& value);
129 QColor getEdgeInnerColor()
const;
131 void setEdgeInnerIntensity(
float value);
132 float getEdgeInnerIntensity()
const {
return events[editedCategory].edgeInnerColor.a; }
134 void setEdgeOuterColor(
const QColor& value);
135 QColor getEdgeOuterColor()
const;
137 void setEdgeOuterIntensity(
float value);
138 float getEdgeOuterIntensity()
const {
return events[editedCategory].edgeOuterColor.a; }
140 void setTiming(
int value);
141 int getTiming()
const {
return events[editedCategory].timing; }
144 glm::vec4 edgeInnerColor;
145 glm::vec4 edgeOuterColor;
147 glm::vec3 noiseSpeed;
157 Event events[FADE_CATEGORY_COUNT];
158 int editedCategory{ FADE_ELEMENT_ENTER_LEAVE_DOMAIN };
159 float threshold{ 0.f };
160 float manualThreshold{ 0.f };
161 bool manualFade{
false };
163 Q_INVOKABLE
void save(
const QString& filePath)
const;
164 Q_INVOKABLE
void load(
const QString& filePath);
166 static QString eventNames[FADE_CATEGORY_COUNT];
171 void dirtyCategory();
179 using Config = FadeEditConfig;
180 using Input = render::VaryingSet2<render::ItemBounds, FadeCategory>;
181 using JobModel = render::Job::ModelI<FadeEditJob, Input, Config>;
185 void configure(
const Config& config);
186 void run(
const render::RenderContextPointer& renderContext,
const FadeEditJob::Input& inputs);
190 bool _isEditEnabled{
false };
191 render::ItemID _editedItem{ render::Item::INVALID_ITEM_ID };
199 static const FadeCategory transitionToCategory[render::Transition::TYPE_COUNT];
201 using Config = FadeConfig;
202 using Output = FadeCategory;
203 using JobModel = render::Job::ModelO<FadeJob, Output, Config>;
207 void configure(
const Config& config);
208 void run(
const render::RenderContextPointer& renderContext, FadeJob::Output& output);
210 gpu::BufferView getConfigurationBuffer()
const {
return _configurations; }
214 #include "Fade_shared.slh"
216 struct FadeConfiguration
218 FadeParameters parameters[FADE_CATEGORY_COUNT];
220 using FadeConfigurationBuffer = gpu::StructBuffer<FadeConfiguration>;
222 FadeConfigurationBuffer _configurations;
223 float _thresholdScale[FADE_CATEGORY_COUNT];
224 uint64_t _previousTime{ 0 };
226 bool update(RenderArgs* args,
const Config& config,
const render::ScenePointer& scene, render::Transaction& transaction, render::Transition& transition,
const double deltaTime)
const;
227 static float computeElementEnterRatio(
double time,
const double period, FadeConfig::Timing timing);