2 // Open Service Platform
3 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
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
9 // http://floralicense.org/license/
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.
19 * @file FUiEffects_RendererGraphicsEngineRender.h
20 * @brief Class for rendering scene tree
24 #ifndef _FUI_EFFECTS_INTERNAL_RENDERER_GRAPHICS_ENGINE_RENDER_H_
25 #define _FUI_EFFECTS_INTERNAL_RENDERER_GRAPHICS_ENGINE_RENDER_H_
30 #include <renderer/engine-model/FUiEffects_RendererEngineModelVisitor.h>
31 #include <renderer/engine-model/FUiEffects_RendererEngineModelBuffer.h>
32 #include <renderer/engine-model/FUiEffects_RendererEngineModelProperty.h>
34 #include <renderer/math/FUiEffects_RendererMathMatrix.h>
36 #include <renderer/system/FUiEffects_RendererSystemSmartPtr.h>
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>
43 namespace Tizen { namespace Ui { namespace Effects { namespace _Renderer { namespace GraphicsEngine
46 class RenderDrawableCache;
49 public Tizen::Ui::Effects::_Renderer::EngineModel::Visitor
53 virtual ~Render(void);
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);
58 virtual void ContextLost(void);
59 virtual void KillCache(RenderCacheImpl* pCache);
61 GLenum& GetAlphaBlendSource() { return __alphaBlendSource; }
62 GLenum& GetAlphaBlendDestination() { return __alphaBlendDestination; }
63 void SetDefaultDepthTestState(bool isEnable);
66 //implementation dependent functions
67 virtual void OnGroup(Tizen::Ui::Effects::_Renderer::EngineModel::Group&);
68 virtual void OnDrawable(Tizen::Ui::Effects::_Renderer::EngineModel::Drawable&);
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&);
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&);
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&);
84 void BuildCache(Tizen::Ui::Effects::_Renderer::EngineModel::AlphaBlendProperty&);
86 void ManageCache(RenderCacheImplPtr pCache);
88 RenderCommandPtr GetDefaultRenderCommand(const RenderProgramCache::UniformListValueType*);
90 const Math::Matrix4f& GetWorldViewProjection(void);
92 void InternalCollectInfo(Tizen::Ui::Effects::_Renderer::EngineModel::Node&);
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&);
101 Math::Matrix4f __worldViewProjection;
103 typedef std::vector<RenderDrawableCache*> DrawableListType;
104 typedef std::map<RenderTargetExternalRenderCache*, RenderTargetExternalRenderCache*> ExternalRenderTargetListType;
106 ExternalRenderTargetListType __externalRenderTargets;
107 DrawableListType __drawables;
108 DrawableListType __blendDrawables;
109 Tizen::Ui::Effects::_Renderer::EngineModel::Camera* __pCamera;
110 bool __findCameraPass;
112 typedef std::vector<RenderCacheImplPtr> CacheListType;
113 typedef CacheListType::size_type CacheListSizeType;
114 CacheListType __caches;
116 typedef std::vector<RenderCacheImpl*> DeadCacheListType;
117 typedef DeadCacheListType::size_type DeadCacheListSizeType;
118 DeadCacheListType __deadCaches;
121 GLenum __alphaBlendSource;
122 GLenum __alphaBlendDestination;
124 bool __depthTestState;
126 GLint __currentFrameBuffer;
129 typedef Tizen::Ui::Effects::_Renderer::System::SmartPtr<Render> RenderPtr;
131 class SetWorldViewProjection:
135 SetWorldViewProjection(GLuint aLocation);
136 virtual ~SetWorldViewProjection() {}
138 virtual void Apply(Render*);
143 }}}}} //Tizen::Ui::Effects::_Renderer::GraphicsEngine
145 #endif //_FUI_EFFECTS_INTERNAL_RENDERER_GRAPHICS_ENGINE_RENDER_H_