[4.0] Render to Frame Buffer Object.
[platform/core/uifw/dali-adaptor.git] / adaptors / base / environment-options.h
1 #ifndef DALI_INTERNAL_ADAPTOR_ENVIRONMENT_OPTIONS_H
2 #define DALI_INTERNAL_ADAPTOR_ENVIRONMENT_OPTIONS_H
3
4 /*
5  * Copyright (c) 2017 Samsung Electronics Co., Ltd.
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  * http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  *
19  */
20
21 // EXTERNAL INCLUDES
22 #include <dali/integration-api/debug.h>
23
24 // INTERNAL INCLUDES
25 #include <base/threading-mode.h>
26
27 namespace Dali
28 {
29 namespace Internal
30 {
31 namespace Adaptor
32 {
33
34 /**
35  * This class provides the environment options which define settings as well as
36  * the ability to install a log function.
37  *
38  */
39 class EnvironmentOptions
40 {
41 public:
42
43   /**
44    * Constructor
45    */
46   EnvironmentOptions();
47
48   /**
49    * non-virtual destructor, not intended as a base class
50    */
51   ~EnvironmentOptions();
52
53   /**
54    * @param logFunction logging function
55    */
56   void SetLogFunction( const Dali::Integration::Log::LogFunction& logFunction );
57
58   /**
59    * Install the log function for the current thread.
60    */
61   void InstallLogFunction() const;
62
63   /**
64    * Un-install the log function for the current thread.
65    */
66   void UnInstallLogFunction() const;
67
68   /**
69    * @return whether network control is enabled or not ( 0 = off, 1 = on )
70    */
71   unsigned int GetNetworkControlMode() const;
72
73   /**
74    * @return frequency of how often FPS is logged out (e.g. 0 = off, 2 = every 2 seconds).
75    */
76   unsigned int GetFrameRateLoggingFrequency() const;
77
78   /**
79    * @return frequency of how often Update Status is logged out (e.g. 0 = off, 60 = log every 60 frames = 1 second @ 60FPS).
80    */
81   unsigned int GetUpdateStatusLoggingFrequency() const;
82
83   /**
84    * @return object profiler status interval ( 0 == off )
85    */
86   unsigned int GetObjectProfilerInterval() const;
87
88   /**
89    * @return performance statistics log level ( 0 == off )
90    */
91   unsigned int GetPerformanceStatsLoggingOptions() const;
92
93   /**
94    * @return performance statistics log frequency in seconds
95    */
96   unsigned int GetPerformanceStatsLoggingFrequency() const;
97
98   /**
99    * @return performance time stamp output ( 0 == off)
100    */
101   unsigned int GetPerformanceTimeStampOutput() const;
102
103   /**
104    * @return pan-gesture logging level ( 0 == off )
105    */
106   unsigned int GetPanGestureLoggingLevel() const;
107
108   /**
109    * @return pan-gesture prediction mode ( -1 means not set so no prediction, 0 = no prediction )
110    */
111   int GetPanGesturePredictionMode() const;
112
113   /**
114    * @return pan-gesture prediction amount
115    */
116   int GetPanGesturePredictionAmount() const;
117
118   /**
119    * @return maximum pan-gesture prediction amount
120    */
121   int GetPanGestureMaximumPredictionAmount() const;
122
123   /**
124    * @return minimum pan-gesture prediction amount
125    */
126   int GetPanGestureMinimumPredictionAmount() const;
127
128   /**
129    * @brief Gets the prediction amount to adjust when the pan velocity is changed.
130    *
131    * If the pan velocity is accelerating, the prediction amount will be increased
132    * by the specified amount until it reaches the upper bound. If the pan velocity
133    * is decelerating, the prediction amount will be decreased by the specified
134    * amount until it reaches the lower bound.
135    *
136    * @return pan-gesture prediction amount adjustment
137    */
138   int GetPanGesturePredictionAmountAdjustment() const;
139
140   /**
141    * @return pan-gesture smoothing mode ( -1 means not set so no smoothing, 0 = no smoothing )
142    */
143   int GetPanGestureSmoothingMode() const;
144
145   /**
146    * @return pan-gesture smoothing amount
147    */
148   float GetPanGestureSmoothingAmount() const;
149
150   /**
151    * @return The minimum distance before a pan can be started (-1 means it's not set)
152    */
153   int GetMinimumPanDistance() const;
154
155   /**
156    * @return The minimum events before a pan can be started (-1 means it's not set)
157    */
158   int GetMinimumPanEvents() const;
159
160   /**
161    * @return The width of the window
162    */
163   unsigned int GetWindowWidth() const;
164
165   /**
166    * @return The height of the window
167    */
168   unsigned int GetWindowHeight() const;
169
170   /**
171    * @brief Get the graphics status time
172    */
173   int GetGlesCallTime() const;
174
175   /**
176    * @brief Get whether or not to accumulate gles call statistics
177    */
178   bool GetGlesCallAccumulate() const;
179
180   /**
181    * @return true if performance server is required
182    */
183   bool PerformanceServerRequired() const;
184
185   /**
186    * @return Gets the window name.
187    */
188   const std::string& GetWindowName() const;
189
190   /**
191    * @return Gets the window class.
192    */
193   const std::string& GetWindowClassName() const;
194
195   /**
196    * @return The thread mode that DALi should use.
197    */
198   ThreadingMode::Type GetThreadingMode() const;
199
200   /**
201    * @return The render refresh rate.
202    */
203   unsigned int GetRenderRefreshRate() const;
204
205   /**
206    * @return The number of samples required in multisample buffers
207    */
208   int GetMultiSamplingLevel() const;
209
210   /**
211    * @return The maximum texture size
212    */
213   unsigned int GetMaxTextureSize() const;
214
215   /**
216    * @return The maximum texture size
217    */
218   int GetIndicatorVisibleMode() const;
219
220   /**
221    * @brief Retrieves the interval of frames to be rendered into the Frame Buffer Object and the Frame Buffer.
222    *
223    * @return The number of frames that are going to be rendered into the Frame Buffer Object but the last one which is going to be rendered into the Frame Buffer.
224    */
225   unsigned int GetRenderToFboInterval() const;
226
227 private: // Internal
228
229   /**
230    * Parses the environment options.
231    * Called from the constructor
232    */
233   void ParseEnvironmentOptions();
234
235 private: // Data
236
237   std::string mWindowName;                        ///< name of the window
238   std::string mWindowClassName;                   ///< name of the class the window belongs to
239   unsigned int mNetworkControl;                   ///< whether network control is enabled
240   unsigned int mFpsFrequency;                     ///< how often fps is logged out in seconds
241   unsigned int mUpdateStatusFrequency;            ///< how often update status is logged out in frames
242   unsigned int mObjectProfilerInterval;           ///< how often object counts are logged out in seconds
243   unsigned int mPerformanceStatsLevel;            ///< performance statistics logging bitmask
244   unsigned int mPerformanceStatsFrequency;        ///< performance statistics logging frequency (seconds)
245   unsigned int mPerformanceTimeStampOutput;       ///< performance time stamp output ( bitmask)
246   unsigned int mPanGestureLoggingLevel;           ///< pan-gesture log level
247   int mPanGesturePredictionMode;                  ///< prediction mode for pan gestures
248   int mPanGesturePredictionAmount;                ///< prediction amount for pan gestures
249   int mPanGestureMaxPredictionAmount;             ///< maximum prediction amount for pan gestures
250   int mPanGestureMinPredictionAmount;             ///< minimum prediction amount for pan gestures
251   int mPanGesturePredictionAmountAdjustment;      ///< adjustment of prediction amount for pan gestures
252   int mPanGestureSmoothingMode;                   ///< prediction mode for pan gestures
253   float mPanGestureSmoothingAmount;               ///< prediction amount for pan gestures
254   int mPanMinimumDistance;                        ///< minimum distance required before pan starts
255   int mPanMinimumEvents;                          ///< minimum events required before pan starts
256   int mGlesCallTime;                              ///< time in seconds between status updates
257   unsigned int mWindowWidth;                      ///< width of the window
258   unsigned int mWindowHeight;                     ///< height of the window
259   ThreadingMode::Type mThreadingMode;             ///< threading mode
260   unsigned int mRenderRefreshRate;                ///< render refresh rate
261   bool mGlesCallAccumulate;                       ///< Whether or not to accumulate gles call statistics
262   int mMultiSamplingLevel;                        ///< The number of samples required in multisample buffers
263   unsigned int mMaxTextureSize;                   ///< The maximum texture size that GL can handle
264   int mIndicatorVisibleMode;                      ///< Indicator visible mode
265   unsigned int mRenderToFboInterval;              ///< The number of frames that are going to be rendered into the Frame Buffer Object but the last one which is going to be rendered into the Frame Buffer.
266
267   Dali::Integration::Log::LogFunction mLogFunction;
268
269   // Undefined copy constructor.
270   EnvironmentOptions( const EnvironmentOptions& );
271
272   // Undefined assignment operator.
273   EnvironmentOptions& operator=( const EnvironmentOptions& );
274
275 };
276
277 } // Adaptor
278 } // Internal
279 } // Dali
280
281 #endif // DALI_INTERNAL_ADAPTOR_ENVIRONMENT_OPTIONS_H