[Vulkan] Basic Vulkan backend
[platform/core/uifw/dali-core.git] / dali / integration-api / graphics / graphics.cpp
1 /*
2  * Copyright (c) 2017 Samsung Electronics Co., Ltd.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *
16  */
17
18 #include <dali/graphics/vulkan/vulkan-types.h>
19 #include <dali/graphics/vulkan/vulkan-graphics.h>
20 #include <dali/graphics/vulkan/vulkan-surface.h>
21
22 #include <dali/integration-api/graphics/graphics.h>
23
24 namespace Dali
25 {
26 /// fixme: substituting directly the vulkan implementation
27 namespace Graphics
28 {
29 using GraphicsImpl = Dali::Graphics::Vulkan::Graphics;
30 }
31
32 namespace Integration
33 {
34 namespace Graphics
35 {
36
37 Graphics::Graphics()
38 {
39   // create device
40   auto impl = Dali::Graphics::MakeUnique<Dali::Graphics::GraphicsImpl>();
41
42   impl->Create();
43
44   mGraphicsImpl = std::move(impl);
45 }
46
47 Graphics::~Graphics()
48 {
49
50 }
51
52 Dali::Graphics::FBID Graphics::Create(
53   std::unique_ptr<Dali::Integration::Graphics::SurfaceFactory> surfaceFactory)
54 {
55
56   // create surface
57   auto retval = mGraphicsImpl->CreateSurface(std::move(surfaceFactory));
58
59   // create device
60   mGraphicsImpl->CreateDevice();
61
62   // create swapchain
63   mGraphicsImpl->GetSurface( retval ).CreateSwapchain();
64
65   return retval;
66 }
67
68 Dali::Graphics::FBID Graphics::CreateSurface(
69   std::unique_ptr<Dali::Integration::Graphics::SurfaceFactory> surfaceFactory)
70 {
71   return 0u;
72 }
73
74 void Graphics::PreRender(Dali::Graphics::FBID framebufferId)
75 {
76   assert(framebufferId != 0u && "Invalid FBID!");
77   auto &surface = mGraphicsImpl->GetSurface(framebufferId);
78   surface.AcquireNextImage();
79 }
80
81 /*
82  * Postrender
83  */
84 void Graphics::PostRender(Dali::Graphics::FBID framebufferId)
85 {
86   assert(framebufferId != 0u && "Invalid FBID!");
87   auto &surface = mGraphicsImpl->GetSurface(framebufferId);
88   surface.Present();
89 }
90
91 void IncludeThisLibrary()
92 {
93 // dummy function to create linker dependency
94 }
95
96 } // Namespace Graphics
97 } // Namespace Integration
98 } // Namespace Dali