remove the defunct and undocumented dynamics debug renderer, to be replaced with...
[platform/core/uifw/dali-core.git] / dali / internal / render / common / render-manager.h
1 #ifndef __DALI_INTERNAL_SCENE_GRAPH_RENDER_MANAGER_H__
2 #define __DALI_INTERNAL_SCENE_GRAPH_RENDER_MANAGER_H__
3
4 /*
5  * Copyright (c) 2014 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 // INTERNAL INCLUDES
22 #include <dali/internal/common/message.h>
23 #include <dali/internal/render/common/post-process-resource-dispatcher.h>
24 #include <dali/internal/render/gl-resources/bitmap-texture.h>
25 #include <dali/internal/update/common/double-buffered.h>
26 #include <dali/internal/update/resources/resource-manager-declarations.h>
27 #include <dali/public-api/math/rect.h>
28
29 namespace Dali
30 {
31
32 namespace Integration
33 {
34 class GlAbstraction;
35 class RenderStatus;
36 }
37
38 struct Vector4;
39
40 namespace Internal
41 {
42 class Context;
43
44 namespace SceneGraph
45 {
46 class Renderer;
47 class RenderQueue;
48 class RenderMaterial;
49 class TextureCache;
50 class RenderInstruction;
51 class RenderInstructionContainer;
52 class RenderTracker;
53
54 /**
55  * RenderManager is responsible for rendering the result of the previous "update", which
56  * is provided in a RenderCommand during UpdateManager::Update().
57  */
58 class RenderManager : public PostProcessResourceDispatcher
59 {
60 public:
61
62   /**
63    * Construct a new RenderManager.
64    * @param[in]  glAbstraction The GL abstraction used for rendering.
65    * @param[out] resourcePostProcessQueue A queue for sending rendered texture ids to the update-thread.
66    */
67   static RenderManager* New( Dali::Integration::GlAbstraction& glAbstraction, ResourcePostProcessList& resourcePostProcessQueue );
68
69   /**
70    * Non-virtual destructor; not intended as a base class
71    */
72   ~RenderManager();
73
74   /**
75    * Retrieve the RenderQueue. Messages should only be added to this from the update-thread.
76    * @return The render queue.
77    */
78   RenderQueue& GetRenderQueue();
79
80   /**
81    * Retrieve the texture cache. Messages should only be sent to this from the update thread,
82    * accessor methods should only be used from the render thread.
83    * @return The texture cache
84    */
85   TextureCache& GetTextureCache();
86
87   /**
88    * Retrieves the context. Can only be called inside render thread
89    * TODO remove this when programs are initialized in render thread
90    * @return reference to the context
91    */
92   Context& GetContext();
93
94   /**
95    * @copydoc Dali::Integration::Core::ContextCreated()
96    */
97   void ContextCreated();
98
99   /**
100    * @copydoc Dali::Integration::Core::ContextToBeDestroyed()
101    */
102   void ContextDestroyed();
103
104   /**
105    * Dispatch requests onto the postProcessResourcesQueue
106    * @param[in] request The request to dispatch
107    */
108   virtual void DispatchPostProcessRequest(ResourcePostProcessRequest& request);
109
110   /**
111    * Retrieve the render instructions; these should be set during each "update" traversal.
112    * @return The render instruction container.
113    */
114   RenderInstructionContainer& GetRenderInstructionContainer();
115
116   // The following methods should be called via RenderQueue messages
117
118   /**
119    * Set the background color i.e. the glClear color used at the beginning of each frame.
120    * @param[in] color The new background color.
121    */
122   void SetBackgroundColor( const Vector4& color );
123
124   /*
125    * Set the frame time delta (time elapsed since the last frame.
126    * @param[in] deltaTime the delta time
127    */
128   void SetFrameDeltaTime( float deltaTime );
129
130   /**
131    * Returns the rectangle for the default surface (probably the application window).
132    * @return Rectangle for the surface.
133    */
134   void SetDefaultSurfaceRect( const Rect<int>& rect );
135
136   /**
137    * Add a Renderer to the render manager.
138    * @param[in] renderer The renderer to add.
139    * @post renderer is owned by RenderManager
140    */
141   void AddRenderer( Renderer* renderer );
142
143   /**
144    * Remove a Renderer from the render manager.
145    * @param[in] renderer The renderer to remove.
146    * @post renderer is destroyed.
147    */
148   void RemoveRenderer( Renderer* renderer );
149
150   /**
151    * Adds a RenderMaterial to the render manager for MeshRenderers to use.
152    * The RenderManager takes ownership of the material
153    * @param[in] renderMaterial
154    * @post renderMaterial is owned by RenderManager
155    */
156   void AddRenderMaterial( RenderMaterial* renderMaterial );
157
158   /**
159    * Removes a RenderMaterial from the RenderManager
160    * RenderManager will destroy the material
161    * @pre renderManager owns the materail
162    * @param[in] renderMaterial
163    * @post renderMaterial is destroyed
164    */
165   void RemoveRenderMaterial( RenderMaterial* renderMaterial );
166
167   /**
168    * Adds a render tracker to the RenderManager. RenderManager takes ownership of the
169    * tracker. The lifetime of the tracker is related to the lifetime of the tracked
170    * object, usually an offscreen render task.
171    * @param[in] renderTracker The render tracker
172    */
173   void AddRenderTracker( RenderTracker* renderTracker );
174
175   /**
176    * Removes a render tracker from the RenderManager.
177    * @param[in] renderTracker The render tracker to remove.
178    */
179   void RemoveRenderTracker( RenderTracker* renderTracker );
180
181   // This method should be called from Core::Render()
182
183   /**
184    * Renders the results of the previous "update" traversal.
185    * @param[out] status contains the flag that indicates if render instructions exist
186    * @return true if a further update is required
187    */
188   bool Render( Integration::RenderStatus& status );
189
190 private:
191
192   /**
193    * Helper to process a single RenderInstruction.
194    * @param[in] instruction A description of the rendering operation.
195    */
196   void DoRender( RenderInstruction& instruction, float elapsedTime );
197
198 private:
199
200   /**
201    * Construct a new RenderManager.
202    */
203   RenderManager();
204
205   // Undefined
206   RenderManager( const RenderManager& );
207
208   // Undefined
209   RenderManager& operator=( const RenderManager& rhs );
210
211 private:
212
213   struct Impl;
214   Impl* mImpl;
215
216 };
217
218 } // namespace SceneGraph
219
220 } // namespace Internal
221
222 } // namespace Dali
223
224 #endif // __DALI_INTERNAL_SCENE_GRAPH_RENDER_MANAGER_H__