11 #ifndef hifi_render_utils_FadeEffectJobs_h
12 #define hifi_render_utils_FadeEffectJobs_h
14 #include "FadeEffect.h"
16 #include <FadeTiming.h>
17 #include <gpu/Pipeline.h>
18 #include <render/ShapePipeline.h>
19 #include <render/RenderFetchCullSortTask.h>
20 #include <render/Transition.h>
22 class FadeEditConfig :
public render::Job::Config {
24 Q_PROPERTY(
bool editFade MEMBER editFade NOTIFY dirty)
25 Q_PROPERTY(
int editedCategory MEMBER editedCategory NOTIFY dirty)
29 bool editFade {
false };
30 int editedCategory { (int)TransitionType::ELEMENT_ENTER_DOMAIN };
37 class FadeConfig :
public render::Job::Config {
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)
66 void setEditedCategory(
int value);
68 void setDuration(
float value);
69 float getDuration()
const;
71 void setBaseSizeX(
float value);
72 float getBaseSizeX()
const;
74 void setBaseSizeY(
float value);
75 float getBaseSizeY()
const;
77 void setBaseSizeZ(
float value);
78 float getBaseSizeZ()
const;
80 void setBaseLevel(
float value);
81 float getBaseLevel()
const {
return props.baseLevel; }
83 void setInverted(
bool value);
84 bool isInverted()
const;
86 void setNoiseSizeX(
float value);
87 float getNoiseSizeX()
const;
89 void setNoiseSizeY(
float value);
90 float getNoiseSizeY()
const;
92 void setNoiseSizeZ(
float value);
93 float getNoiseSizeZ()
const;
95 void setNoiseLevel(
float value);
96 float getNoiseLevel()
const {
return props.noiseLevel; }
98 void setNoiseSpeedX(
float value);
99 float getNoiseSpeedX()
const;
101 void setNoiseSpeedY(
float value);
102 float getNoiseSpeedY()
const;
104 void setNoiseSpeedZ(
float value);
105 float getNoiseSpeedZ()
const;
107 void setEdgeWidth(
float value);
108 float getEdgeWidth()
const;
110 void setEdgeInnerColor(
const QColor& value);
111 QColor getEdgeInnerColor()
const;
113 void setEdgeInnerIntensity(
float value);
114 float getEdgeInnerIntensity()
const {
return props.innerEdgeColor.a; }
116 void setEdgeOuterColor(
const QColor& value);
117 QColor getEdgeOuterColor()
const;
119 void setEdgeOuterIntensity(
float value);
120 float getEdgeOuterIntensity()
const {
return props.outerEdgeColor.a; }
122 void setTiming(
int value);
123 int getTiming()
const {
return (
int)props.timing; }
125 FadeProperties props;
126 float threshold { 0.f };
127 float manualThreshold { 0.f };
128 bool manualFade {
false };
133 void dirtyCategory();
141 using Config = FadeEditConfig;
142 using Output = render::ItemID;
143 using JobModel = render::Job::ModelO<FadeEditJob, Output, Config>;
147 void configure(
const Config& config);
148 void run(
const render::RenderContextPointer& renderContext, Output& output);
152 bool _isEditEnabled {
false };
153 int _editedCategory { (int)TransitionType::ELEMENT_ENTER_DOMAIN };
154 render::ItemID _editedItem { render::Item::INVALID_ITEM_ID };
161 using Config = FadeConfig;
162 using Input = render::ItemID;
163 using JobModel = render::Job::ModelI<FadeJob, Input, Config>;
167 void configure(
const Config& config);
168 void run(
const render::RenderContextPointer& renderContext,
const Input& input);
171 FadeProperties _editedFadeProperties;
172 uint64_t _previousTime{ 0 };
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);