Tizen 2.1 base
[framework/osp/uifw.git] / src / ui / effects / inc / renderer / graphics-engine / FUiEffects_RendererGraphicsEngineRender.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_RendererGraphicsEngineRender.h
20  * @brief               Class for rendering scene tree
21  *
22  */
23
24 #ifndef _FUI_EFFECTS_INTERNAL_RENDERER_GRAPHICS_ENGINE_RENDER_H_
25 #define _FUI_EFFECTS_INTERNAL_RENDERER_GRAPHICS_ENGINE_RENDER_H_
26
27 #include <vector>
28 #include <map>
29
30 #include <renderer/engine-model/FUiEffects_RendererEngineModelVisitor.h>
31 #include <renderer/engine-model/FUiEffects_RendererEngineModelBuffer.h>
32 #include <renderer/engine-model/FUiEffects_RendererEngineModelProperty.h>
33
34 #include <renderer/math/FUiEffects_RendererMathMatrix.h>
35
36 #include <renderer/system/FUiEffects_RendererSystemSmartPtr.h>
37
38 #include <renderer/graphics-engine/FUiEffects_RendererGraphicsEngineRenderCommand.h>
39 #include <renderer/graphics-engine/FUiEffects_RendererGraphicsEngineRenderShaderCache.h>
40 #include <renderer/graphics-engine/FUiEffects_RendererGraphicsEngineRenderDrawableCache.h>
41 #include <renderer/graphics-engine/FUiEffects_RendererGraphicsEngineRenderRenderTargetCache.h>
42
43 namespace Tizen { namespace Ui { namespace Effects { namespace _Renderer { namespace GraphicsEngine
44 {
45
46 class RenderDrawableCache;
47
48 class Render:
49         public Tizen::Ui::Effects::_Renderer::EngineModel::Visitor
50 {
51 public:
52         Render(void);
53         virtual ~Render(void);
54
55         virtual void Draw(Tizen::Ui::Effects::_Renderer::EngineModel::Node& root, Tizen::Ui::Effects::_Renderer::EngineModel::Camera& camera);
56         virtual void Draw(Tizen::Ui::Effects::_Renderer::EngineModel::Node& root);
57
58         virtual void ContextLost(void);
59         virtual void KillCache(RenderCacheImpl* pCache);
60
61         GLenum& GetAlphaBlendSource() { return __alphaBlendSource; }
62         GLenum& GetAlphaBlendDestination() { return __alphaBlendDestination; }
63         void SetDefaultDepthTestState(bool isEnable);
64
65
66         //implementation dependent functions
67         virtual void OnGroup(Tizen::Ui::Effects::_Renderer::EngineModel::Group&);
68         virtual void OnDrawable(Tizen::Ui::Effects::_Renderer::EngineModel::Drawable&);
69
70         void BuildCache(Tizen::Ui::Effects::_Renderer::EngineModel::Drawable&);
71         void BuildCache(Tizen::Ui::Effects::_Renderer::EngineModel::VertexBuffer&);
72         void BuildCache(Tizen::Ui::Effects::_Renderer::EngineModel::IndexBuffer&);
73         void BuildCache(Tizen::Ui::Effects::_Renderer::EngineModel::CompositeVertexBuffer&);
74         void BuildCache(Tizen::Ui::Effects::_Renderer::EngineModel::PartVertexBuffer&);
75
76         void BuildCache(Tizen::Ui::Effects::_Renderer::EngineModel::Texture2dProperty&, GLuint);
77         void BuildCache(Tizen::Ui::Effects::_Renderer::EngineModel::ShaderProperty&);
78         void BuildCache(Tizen::Ui::Effects::_Renderer::EngineModel::ProgramProperty&);
79
80         void BuildCache(Tizen::Ui::Effects::_Renderer::EngineModel::RenderTargetExternalRender&);
81         void BuildCache(Tizen::Ui::Effects::_Renderer::EngineModel::Texture2dAttachmentProperty&, GLuint);
82         void BuildCache(Tizen::Ui::Effects::_Renderer::EngineModel::StubAttachment&);
83
84         void BuildCache(Tizen::Ui::Effects::_Renderer::EngineModel::AlphaBlendProperty&);
85
86         void ManageCache(RenderCacheImplPtr pCache);
87
88         RenderCommandPtr GetDefaultRenderCommand(const RenderProgramCache::UniformListValueType*);
89
90         const Math::Matrix4f& GetWorldViewProjection(void);
91
92         void InternalCollectInfo(Tizen::Ui::Effects::_Renderer::EngineModel::Node&);
93
94 private:
95         void InternalKillDeadCaches(void);
96         void InternalPreDraw(void);
97         void InternalDraw(void);
98         void InternalPostDraw(void);
99         void InternalFindCameras(Tizen::Ui::Effects::_Renderer::EngineModel::Node&);
100
101         Math::Matrix4f __worldViewProjection;
102
103         typedef std::vector<RenderDrawableCache*> DrawableListType;
104         typedef std::map<RenderTargetExternalRenderCache*, RenderTargetExternalRenderCache*> ExternalRenderTargetListType;
105
106         ExternalRenderTargetListType __externalRenderTargets;
107         DrawableListType __drawables;
108         DrawableListType __blendDrawables;
109         Tizen::Ui::Effects::_Renderer::EngineModel::Camera* __pCamera;
110         bool __findCameraPass;
111
112         typedef std::vector<RenderCacheImplPtr> CacheListType;
113         typedef CacheListType::size_type CacheListSizeType;
114         CacheListType __caches;
115
116         typedef std::vector<RenderCacheImpl*> DeadCacheListType;
117         typedef DeadCacheListType::size_type DeadCacheListSizeType;
118         DeadCacheListType __deadCaches;
119
120         //States
121         GLenum __alphaBlendSource;
122         GLenum __alphaBlendDestination;
123
124         bool __depthTestState;
125
126         GLint __currentFrameBuffer;
127 };
128
129 typedef Tizen::Ui::Effects::_Renderer::System::SmartPtr<Render> RenderPtr;
130
131 class SetWorldViewProjection:
132         public RenderCommand
133 {
134 public:
135         SetWorldViewProjection(GLuint aLocation);
136         virtual ~SetWorldViewProjection() {}
137
138         virtual void Apply(Render*);
139 private:
140         GLuint __location;
141 };
142
143 }}}}} //Tizen::Ui::Effects::_Renderer::GraphicsEngine
144
145 #endif //_FUI_EFFECTS_INTERNAL_RENDERER_GRAPHICS_ENGINE_RENDER_H_
146