Tizen 2.1 base
[framework/osp/uifw.git] / src / ui / effects / inc / renderer / graphics-engine / FUiEffects_RendererGraphicsEngineRenderShaderCache.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_RendererGraphicsEngineRenderShaderCache.h
20  * @brief               Class for render shaders cache
21  *
22  */
23
24 #ifndef _FUI_EFFECTS_INTERNAL_RENDERER_GRAPHICS_ENGINE_RENDER_SHADER_CACHE_H_
25 #define _FUI_EFFECTS_INTERNAL_RENDERER_GRAPHICS_ENGINE_RENDER_SHADER_CACHE_H_
26
27 #include <renderer/engine-model/FUiEffects_RendererEngineModelForwardDeclaration.h>
28 #include <renderer/engine-model/FUiEffects_RendererEngineModelProperty.h>
29 #include <renderer/engine-model/FUiEffects_RendererEngineModelShaderProperty.h>
30 #include <renderer/system/FUiEffects_RendererSystemSmartPtr.h>
31
32 #include <renderer/graphics-engine/FUiEffects_RendererGraphicsEngineOpenGLImplementation.h>
33 #include <renderer/graphics-engine/FUiEffects_RendererGraphicsEngineRenderCache.h>
34
35 #include <vector>
36
37 namespace Tizen { namespace Ui { namespace Effects { namespace _Renderer { namespace GraphicsEngine
38 {
39
40 class Render;
41
42 class RenderShaderCache:
43         public RenderCache
44 {
45 public:
46         RenderShaderCache(Render *pRender, Tizen::Ui::Effects::_Renderer::EngineModel::ShaderProperty* pShader);
47         virtual ~RenderShaderCache(void);
48
49         static GLenum GetShaderType(Tizen::Ui::Effects::_Renderer::EngineModel::ShaderProperty::ShaderType::Value shaderType);
50         static bool IsBinary(Tizen::Ui::Effects::_Renderer::EngineModel::ShaderProperty::DataType::Value dataType);
51
52         virtual void Die(void);
53         virtual void DropCache(void);
54         virtual void DestroyCache(void);
55
56         virtual void Validate(Render*);
57
58         void AttachToProgram(Render*, GLuint programId);
59
60 protected:
61         GLuint _shaderId;
62         Tizen::Ui::Effects::_Renderer::EngineModel::ShaderProperty* _pShader;
63 };
64
65 typedef Tizen::Ui::Effects::_Renderer::System::SmartPtr<RenderShaderCache> RenderShaderCachePtr;
66
67 class RenderProgramCache:
68         public RenderCache
69 {
70 public:
71         struct GlInfo
72         {
73                 GLuint location;
74                 GLenum type;
75                 GLint size;
76         };
77
78         typedef std::vector<std::pair<GlInfo, std::string> > AttribuleListType;
79         typedef AttribuleListType UniformListType;
80         typedef AttribuleListType::size_type AttribuleListSizeType;
81         typedef AttribuleListSizeType UniformListSizeType;
82         typedef AttribuleListType::value_type AttribuleListValueType;
83         typedef AttribuleListValueType UniformListValueType;
84
85         RenderProgramCache(Render *pRender, Tizen::Ui::Effects::_Renderer::EngineModel::ProgramProperty* pProgram);
86         virtual ~RenderProgramCache(void);
87
88         virtual void Die(void);
89         virtual void DropCache(void);
90         virtual void DestroyCache(void);
91
92         virtual void Validate(Render*);
93
94         void UseProgram(Render*);
95         void DisableAttributes(Render*);
96         void EnableAttributes(Render*);
97         const AttribuleListValueType& GetAttribute(AttribuleListSizeType index);
98         AttribuleListSizeType GetNumAttributes(void);
99         const UniformListValueType& GetUniform(UniformListSizeType index);
100         UniformListSizeType GetNumUniforms(void);
101
102 protected:
103         AttribuleListType _attributes;
104         UniformListType _uniforms;
105
106         GLuint _programId;
107         RenderShaderCache* _pVertexShader;
108         RenderShaderCache* _pFragmentShader;
109         Tizen::Ui::Effects::_Renderer::EngineModel::ProgramProperty* _pProgram;
110 };
111
112 typedef Tizen::Ui::Effects::_Renderer::System::SmartPtr<RenderProgramCache> RenderProgramCachePtr;
113
114 }}}}} //Tizen::Ui::Effects::_Renderer::GraphicsEngine
115
116 #endif //_FUI_EFFECTS_INTERNAL_RENDERER_GRAPHICS_ENGINE_RENDER_SHADER_CACHE_H_