1 #ifndef __DALI_TOOLKIT_RENDERER_FACTORY_CACHE_H__
2 #define __DALI_TOOLKIT_RENDERER_FACTORY_CACHE_H__
5 * Copyright (c) 2015 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.
21 #include "svg/svg-rasterize-thread.h"
24 #include <dali/public-api/object/ref-object.h>
25 #include <dali/devel-api/rendering/geometry.h>
26 #include <dali/devel-api/rendering/shader.h>
27 #include <dali/devel-api/rendering/renderer.h>
28 #include <dali/devel-api/common/owner-container.h>
29 #include <dali/devel-api/object/weak-handle.h>
42 * Caches shaders and geometries. Owned by RenderFactory.
44 class RendererFactoryCache : public RefObject
49 * Type of shader for caching.
55 BORDER_SHADER_ANTI_ALIASING,
56 GRADIENT_SHADER_LINEAR_USER_SPACE,
57 GRADIENT_SHADER_LINEAR_BOUNDING_BOX,
58 GRADIENT_SHADER_RADIAL_USER_SPACE,
59 GRADIENT_SHADER_RADIAL_BOUNDING_BOX,
63 SHADER_TYPE_MAX = SVG_SHADER
67 * Type of geometry for caching.
74 NINE_PATCH_BORDER_GEOMETRY,
75 GEOMETRY_TYPE_MAX = NINE_PATCH_BORDER_GEOMETRY
83 RendererFactoryCache();
86 * Request geometry of the given type.
87 * @return The geometry of the required type if it exist in the cache. Otherwise, an empty handle is returned.
89 Geometry GetGeometry( GeometryType type );
92 * Cache the geometry of the give type.
93 * @param[in] type The geometry type.
94 * @param[in] geometry The geometry for caching.
96 void SaveGeometry( GeometryType type, Geometry geometry);
99 * Request shader of the given type.
100 * @return The shader of the required type if it exist in the cache. Otherwise, an empty handle is returned.
102 Shader GetShader( ShaderType type );
105 * Cache the geometry of the give type.
106 * @param[in] type The geometry type.
107 * @param[in] geometry The geometry for caching.
109 void SaveShader( ShaderType type, Shader shader );
112 * Greate the quad geometry.
113 * Quad geometry is shared by multiple kind of Renderer, so implement it in the factory-cache.
115 static Geometry CreateQuadGeometry();
120 * @brief Request renderer from the url
122 * @return The cached renderer if exist in the cache. Otherwise an empty handle is returned.
124 Renderer GetRenderer( const std::string& key ) const;
127 * @brief Cache the renderer based on the given key.
129 * If the key already exists in the cache, then the cache will save an additional renderer to the cache.
130 * RemoveRenderer will then need to be called twice to remove both items from the cache.
132 * @param[in] key The key to use for caching
133 * @param[in] renderer The Renderer to be cached
135 void SaveRenderer( const std::string& key, Renderer& renderer );
138 * @brief Cleans the renderer cache by removing the renderer from the cache based on the given key if there are no longer any references to it
140 * @param[in] key The key used for caching
142 * @return True if the renderer is no longer used anywhere, false otherwise
144 bool CleanRendererCache( const std::string& key );
147 * @brief Cache the debug renderer
149 void CacheDebugRenderer( Renderer& renderer );
152 * @brief Request the debug renderer;
154 Renderer GetDebugRenderer();
157 * Get the SVG rasterization thread.
158 * @return A pointer pointing to the SVG rasterization thread.
160 SvgRasterizeThread* GetSVGRasterizationThread();
162 private: // for svg rasterization thread
165 * Applies the rasterized image to material
167 void ApplyRasterizedSVGToSampler();
172 * A reference counted object may only be deleted by calling Unreference()
174 virtual ~RendererFactoryCache();
177 * Undefined copy constructor.
179 RendererFactoryCache(const RendererFactoryCache&);
182 * Undefined assignment operator.
184 RendererFactoryCache& operator=(const RendererFactoryCache& rhs);
187 struct CachedRenderer
190 WeakHandle< Renderer > mRenderer;
192 CachedRenderer( const std::string& key, Renderer& renderer )
198 typedef Dali::Vector< std::size_t > HashVector;
199 typedef Dali::OwnerContainer< const CachedRenderer* > CachedRenderers;
202 * @brief Finds the first index into the cached renderers from the url
204 * @return Returns the first index into the cached renderer from the url if it exists in the cache, otherwise returns -1
206 int FindRenderer( const std::string& key ) const;
209 Geometry mGeometry[GEOMETRY_TYPE_MAX+1];
210 Shader mShader[SHADER_TYPE_MAX+1];
212 HashVector mRendererHashes;
213 CachedRenderers mRenderers;
215 Renderer mDebugRenderer;
217 SvgRasterizeThread* mSvgRasterizeThread;
220 } // namespace Internal
222 } // namespace Toolkit
226 #endif /*__DALI_TOOLKIT_RENDERER_FACTORY_CACHE_H__ */