Tizen 2.1 base
[framework/osp/uifw.git] / src / ui / effects / inc / renderer / graphics-engine / FUiEffects_RendererGraphicsEngineRenderBufferCache.h
1 //
2 // Open Service Platform
3 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
4 //
5 // Licensed under the Flora License, Version 1.0 (the License);
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
8 //
9 //     http://floralicense.org/license/
10 //
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an AS IS BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
16 //
17
18 /**
19  * @file                FUiEffects_RendererGraphicsEngineRenderBufferCache.h
20  * @brief               Class for buffer caching
21  *
22  */
23
24 #ifndef _FUI_EFFECTS_INTERNAL_RENDERER_GRAPHICS_ENGINE_RENDER_BUFFER_CACHE_H_
25 #define _FUI_EFFECTS_INTERNAL_RENDERER_GRAPHICS_ENGINE_RENDER_BUFFER_CACHE_H_
26
27 #include <renderer/engine-model/FUiEffects_RendererEngineModelForwardDeclaration.h>
28 #include <renderer/engine-model/FUiEffects_RendererEngineModelBuffer.h>
29 #include <renderer/system/FUiEffects_RendererSystemSmartPtr.h>
30
31 #include <renderer/graphics-engine/FUiEffects_RendererGraphicsEngineOpenGLImplementation.h>
32 #include <renderer/graphics-engine/FUiEffects_RendererGraphicsEngineRenderCache.h>
33
34 namespace Tizen { namespace Ui { namespace Effects { namespace _Renderer { namespace GraphicsEngine
35 {
36
37 class Render;
38
39 class IBufferCache:
40         public RenderCache
41 {
42 public:
43         IBufferCache(Render* pRender);
44         virtual ~IBufferCache(void);
45
46         static GLenum GetGlUsage(Tizen::Ui::Effects::_Renderer::EngineModel::SolidBufferStrategy::BufferUsage::Value usage);
47         static GLenum GetGlDataType(Tizen::Ui::Effects::_Renderer::EngineModel::TypedBufferStrategy::DataType::Value dataType);
48         static GLsizei GetGlDataTypeSize(Tizen::Ui::Effects::_Renderer::EngineModel::TypedBufferStrategy::DataType::Value dataType);
49
50         virtual void DropCache(void);
51         virtual void DestroyCache(void);
52
53 protected:
54         GLuint _bufferId;
55         GLenum _dataType;
56 };
57
58 class IndexBufferCache:
59         public IBufferCache
60 {
61 public:
62         IndexBufferCache(Render* pRender, Tizen::Ui::Effects::_Renderer::EngineModel::IndexBuffer* pBuffer);
63         virtual ~IndexBufferCache(void);
64
65         static GLenum GetGlPrimitiveType(Tizen::Ui::Effects::_Renderer::EngineModel::IndexBuffer::PrimitiveType::Value primitiveType);
66
67         virtual void Die(void);
68         virtual void Validate(Render*);
69         virtual void DestroyCache(void);
70
71         void DrawElements(Render*);
72
73 private:
74         GLsizei __elementsCount;
75         GLenum __primitiveType;
76         Tizen::Ui::Effects::_Renderer::EngineModel::IndexBuffer* __pBuffer;
77 };
78
79 typedef Tizen::Ui::Effects::_Renderer::System::SmartPtr<IndexBufferCache> IndexBufferCachePtr;
80
81 class VertexBufferCache:
82         public IBufferCache
83 {
84 public:
85         VertexBufferCache(Render* pRender): IBufferCache(pRender) {}
86         virtual ~VertexBufferCache(void) {}
87
88         virtual void BindToAttrib(Render*, GLuint index) = 0;
89         virtual void BindAsVertices(Render*) = 0;
90         virtual void BindAsColor(Render*) = 0;
91         virtual void BindAsTexCoord(Render*, GLuint stage) = 0;
92 };
93
94 typedef Tizen::Ui::Effects::_Renderer::System::SmartPtr<VertexBufferCache> VertexBufferCachePtr;
95
96 class SolidVertexBufferCache:
97         public VertexBufferCache
98 {
99 public:
100         SolidVertexBufferCache(Render *pRender, Tizen::Ui::Effects::_Renderer::EngineModel::VertexBuffer* pBuffer);
101         virtual ~SolidVertexBufferCache(void);
102
103         virtual void Die(void);
104         virtual void Validate(Render*);
105         virtual void DestroyCache();
106
107         void BindToAttrib(Render*, GLuint index);
108         void BindAsVertices(Render*);
109         void BindAsColor(Render*);
110         void BindAsTexCoord(Render*, GLuint stage);
111
112 private:
113         GLint __componentsPerElement;
114         Tizen::Ui::Effects::_Renderer::EngineModel::VertexBuffer* __pBuffer;
115 };
116
117 typedef Tizen::Ui::Effects::_Renderer::System::SmartPtr<SolidVertexBufferCache> SolidVertexBufferCachePtr;
118
119 class PartVertexBufferCache:
120         public VertexBufferCache
121 {
122 public:
123         PartVertexBufferCache(Render *pRender, Tizen::Ui::Effects::_Renderer::EngineModel::PartVertexBuffer* pBuffer);
124         virtual ~PartVertexBufferCache(void);
125
126         virtual void Die(void);
127         virtual void Validate(Render*);
128         virtual void DestroyCache(void);
129
130         void BindToAttrib(Render*, GLuint index);
131         void BindAsVertices(Render*);
132         void BindAsColor(Render*);
133         void BindAsTexCoord(Render*, GLuint stage);
134
135 private:
136         GLint __componentsPerElement;
137         GLsizei __stride;
138         GLvoid* __pOffset;
139         Tizen::Ui::Effects::_Renderer::EngineModel::PartVertexBuffer* __pBuffer;
140 };
141
142 typedef Tizen::Ui::Effects::_Renderer::System::SmartPtr<PartVertexBufferCache> PartVertexBufferCachePtr;
143
144 class CompositeVertexBufferCache:
145         public IBufferCache
146 {
147 public:
148         CompositeVertexBufferCache(Render *pRender, Tizen::Ui::Effects::_Renderer::EngineModel::CompositeVertexBuffer* pBuffer);
149         virtual ~CompositeVertexBufferCache(void);
150
151         virtual void Die(void);
152         virtual void Validate(Render*);
153         virtual void DestroyCache(void);
154
155         void Bind(Render*);
156
157 private:
158         Tizen::Ui::Effects::_Renderer::EngineModel::CompositeVertexBuffer* __pBuffer;
159 };
160
161 typedef Tizen::Ui::Effects::_Renderer::System::SmartPtr<CompositeVertexBufferCache> CompositeVertexBufferCachePtr;
162
163 }}}}} // Tizen::Ui::Effects::_Renderer::GraphicsEngine
164
165 #endif //_FUI_EFFECTS_INTERNAL_RENDERER_GRAPHICS_ENGINE_RENDER_BUFFER_CACHE_H_