1 #ifndef __DALI_INTERNAL_RENDER_THREAD_H__
2 #define __DALI_INTERNAL_RENDER_THREAD_H__
5 * Copyright (c) 2014 Samsung Electronics Co., Ltd.
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
11 * http://www.apache.org/licenses/LICENSE-2.0
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.
22 #include <boost/thread.hpp>
25 #include <base/interfaces/egl-interface.h>
26 #include <render-surface-impl.h> // needed for Dali::Internal::Adaptor::RenderSurface
43 class AdaptorInternalServices;
45 class UpdateRenderSynchronization;
46 class EglFactoryInterface;
47 class EnvironmentOptions;
55 REPLACE_SURFACE, // Request to replace surface
60 * @param[in] type The type of the request
62 RenderRequest( Request type );
65 * @return the type of the request
73 class ReplaceSurfaceRequest : public RenderRequest
80 ReplaceSurfaceRequest();
84 * @param[in] newSurface The new surface to use
86 void SetSurface(RenderSurface* newSurface);
89 * @return the new surface
91 RenderSurface* GetSurface();
94 * Called when the request has been completed to set the result.
96 void ReplaceCompleted();
99 * @return true if the replace has completed.
101 bool GetReplaceCompleted();
104 RenderSurface* mNewSurface; ///< The new surface to use.
105 unsigned int mReplaceCompleted; ///< Set to true when the replace has completed.
110 * The render-thread is responsible for calling Core::Render() after each update.
117 * Create the render-thread; this will not do anything until Start() is called.
118 * @param[in] sync update-render synchronization object
119 * @param[in] adaptorInterfaces base adaptor interface
120 * @param[in] environmentOptions environment options
123 RenderThread( UpdateRenderSynchronization& sync,
124 AdaptorInternalServices& adaptorInterfaces,
125 const EnvironmentOptions& environmentOptions );
130 virtual ~RenderThread();
135 * Starts the render-thread
140 * Stops the render-thread
145 * Offscreen was posted to onscreen
149 private: // Render thread side helpers
152 * This method is used by the Render thread for rendering the Core to the screen.
153 * Called from render thread
154 * @return true, if the thread finishes properly.
160 * Called from render thread
162 void InitializeEgl();
165 * Check if display has events
166 * Called from render thread
168 void ConsumeEvents();
171 * Check if main thread made any requests, e.g. ReplaceSurface
172 * Called from render thread
173 * @return true if a request was processed, false otherwise.
175 bool ProcessRequest(RenderRequest* request);
178 * Replaces the rendering surface
179 * Used for replacing pixmaps due to resizing
180 * Called from render thread
181 * @param newSurface to use
183 void ReplaceSurface( RenderSurface* newSurface );
187 * Called from render thread
192 * Called before core renders the scene
193 * Called from render thread
194 * @return true if successful and Core::Render should be called.
199 * Called after core has rendered the scene
200 * Called from render thread
201 * @param[in] timeDelta Time since PostRender was last called in microseconds
203 void PostRender( unsigned int timeDelta );
207 UpdateRenderSynchronization& mUpdateRenderSync; ///< Used to synchronize the update & render threads
208 Dali::Integration::Core& mCore; ///< Dali core reference
209 Integration::GlAbstraction& mGLES; ///< GL abstraction reference
210 EglFactoryInterface* mEglFactory; ///< Factory class to create EGL implementation
211 EglInterface* mEGL; ///< Interface to EGL implementation
212 boost::thread* mThread; ///< render thread
213 bool mUsingPixmap; ///< whether we're using a pixmap or a window
214 RenderSurface* mSurface; ///< Current surface
215 const EnvironmentOptions& mEnvironmentOptions; ///< Environment options
216 bool mSurfaceReplaced; ///< True when new surface has been initialzed.
219 } // namespace Adaptor
221 } // namespace Internal
225 #endif // __DALI_INTERNAL_RENDER_THREAD_H__