Fix bug that Dali::Texture destroyed at worker thread
[platform/core/uifw/dali-extension.git] / dali-extension / vector-animation-renderer / vector-animation-renderer-tizen.h
1 #ifndef DALI_VECTOR_ANIMATION_RENDERER_TIZEN_H
2 #define DALI_VECTOR_ANIMATION_RENDERER_TIZEN_H
3
4 /*
5  * Copyright (c) 2023 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/devel-api/adaptor-framework/native-image-source-queue.h>
23 #include <tbm_surface.h>
24 #include <tbm_surface_queue.h>
25
26 // INTERNAL INCLUDES
27 #include <dali-extension/vector-animation-renderer/vector-animation-renderer.h>
28
29 namespace Dali
30 {
31 namespace Plugin
32 {
33 /**
34  * @brief Implementation of the Tizen vector animation renderer class which has Tizen platform dependency.
35  */
36 class VectorAnimationRendererTizen : public VectorAnimationRenderer
37 {
38 public:
39   /**
40    * @brief Constructor.
41    */
42   VectorAnimationRendererTizen();
43
44   /**
45    * @brief Destructor.
46    */
47   virtual ~VectorAnimationRendererTizen();
48
49   /**
50    * @copydoc Dali::VectorAnimationRendererPlugin::Render()
51    */
52   bool Render(uint32_t frameNumber) override;
53
54   /**
55    * @copydoc Dali::VectorAnimationRendererPlugin::RenderStopped()
56    */
57   void RenderStopped() override;
58
59 private:
60   /**
61    * @brief Set shader for NativeImageSourceQueue with custom sampler type and prefix.
62    */
63   void SetShader() override;
64
65   /**
66    * @brief Reset buffer list.
67    */
68   void ResetBuffers() override;
69
70   /**
71    * @copydoc VectorAnimationRenderer::Finalize()
72    */
73   void OnFinalize() override;
74
75   /**
76    * @copydoc VectorAnimationRenderer::OnSetSize()
77    */
78   void OnSetSize() override;
79
80   /**
81    * @brief Event callback to process events.
82    */
83   void OnLottieRendered() override
84   {}
85
86   /**
87    * @copydoc VectorAnimationRenderer::PrepareTarget()
88    */
89   void PrepareTarget() override;
90
91   /**
92    * @copydoc VectorAnimationRenderer::IsTargetPrepared()
93    */
94   bool IsTargetPrepared() override;
95
96   /**
97    * @copydoc VectorAnimationRenderer::IsRenderReady()
98    */
99   bool IsRenderReady() override;
100
101   /**
102    * @copydoc VectorAnimationRenderer::GetTargetTexture()
103    */
104   Dali::Texture GetTargetTexture() override;
105
106 private:
107   using SurfacePair = std::pair<tbm_surface_h, rlottie::Surface>;
108
109   std::vector<SurfacePair> mBuffers; ///< EGL Image vector
110
111   Dali::Texture              mRenderedTexture;  ///< Rendered Texture
112   std::vector<Dali::Texture> mPreviousTextures; ///< Previous rendered texture
113   NativeImageSourceQueuePtr  mTargetSurface;    ///< The target surface
114   tbm_surface_queue_h        mTbmQueue;         ///< Tbm surface queue handle
115 };
116
117 } // namespace Plugin
118
119 } // namespace Dali
120
121 #endif // DALI_TIZEN_VECTOR_ANIMATION_RENDERER_PLUGIN_H