1 #ifndef DALI_EGL_GRAPHICS_CONTROLLER_H
2 #define DALI_EGL_GRAPHICS_CONTROLLER_H
5 * Copyright (c) 2021 Samsung Electronics Co., Ltd.
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
20 #include <dali/graphics-api/graphics-controller.h>
27 class GlSyncAbstraction;
28 class GlContextHelperAbstraction;
29 } // namespace Integration
34 * EGL Implementation of the graphics controller.
36 * Temporarily holds the old GL abstractions whilst dali-core is migrated to the new API.
38 DALI_IMPORT_API class EglGraphicsController : public Graphics::Controller
41 EglGraphicsController() = default;
43 ~EglGraphicsController() override = default;
46 * Initialize the GLES abstraction. This can be called from the main thread.
48 void InitializeGLES(Integration::GlAbstraction& glAbstraction);
51 * Initialize with a reference to the GL abstractions.
53 * Note, this is now executed in the render thread, after core initialization
55 void Initialize(Integration::GlSyncAbstraction& glSyncAbstraction,
56 Integration::GlContextHelperAbstraction& glContextHelperAbstraction);
58 Integration::GlAbstraction& GetGlAbstraction() override;
59 Integration::GlSyncAbstraction& GetGlSyncAbstraction() override;
60 Integration::GlContextHelperAbstraction& GetGlContextHelperAbstraction() override;
63 * @copydoc Dali::Graphics::SubmitCommandBuffers()
65 void SubmitCommandBuffers(const SubmitInfo& submitInfo) override
70 * @copydoc Dali::Graphics::PresentRenderTarget()
72 void PresentRenderTarget(RenderTarget* renderTarget) override
77 * @copydoc Dali::Graphics::WaitIdle()
79 void WaitIdle() override
84 * @copydoc Dali::Graphics::Pause()
91 * @copydoc Dali::Graphics::Resume()
93 void Resume() override
98 * @copydoc Dali::Graphics::UpdateTextures()
100 void UpdateTextures(const std::vector<TextureUpdateInfo>& updateInfoList,
101 const std::vector<TextureUpdateSourceInfo>& sourceList) override
106 * @copydoc Dali::Graphics::EnableDepthStencilBuffer()
108 bool EnableDepthStencilBuffer(bool enableDepth, bool enableStencil) override
114 * @copydoc Dali::Graphics::RunGarbageCollector()
116 void RunGarbageCollector(size_t numberOfDiscardedRenderers) override
121 * @copydoc Dali::Graphics::DiscardUnusedResources()
123 void DiscardUnusedResources() override
128 * @copydoc Dali::Graphics::IsDiscardQueueEmpty()
130 bool IsDiscardQueueEmpty() override
136 * @copydoc Dali::Graphics::IsDrawOnResumeRequired()
138 bool IsDrawOnResumeRequired() override
144 * @copydoc Dali::Graphics::CreateBuffer()
146 Graphics::UniquePtr<Buffer> CreateBuffer(const BufferCreateInfo& bufferCreateInfo, Graphics::UniquePtr<Buffer>&& oldBuffer) override
152 * @copydoc Dali::Graphics::CreateCommandBuffer()
154 Graphics::UniquePtr<CommandBuffer> CreateCommandBuffer(const CommandBufferCreateInfo& commandBufferCreateInfo, Graphics::UniquePtr<CommandBuffer>&& oldCommandBuffer) override
160 * @copydoc Dali::Graphics::CreateRenderPass()
162 Graphics::UniquePtr<RenderPass> CreateRenderPass(const RenderPassCreateInfo& renderPassCreateInfo, Graphics::UniquePtr<RenderPass>&& oldRenderPass) override
168 * @copydoc Dali::Graphics::CreateTexture()
170 Graphics::UniquePtr<Texture> CreateTexture(const TextureCreateInfo& textureCreateInfo, Graphics::UniquePtr<Texture>&& oldTexture) override
176 * @copydoc Dali::Graphics::CreateFramebuffer()
178 Graphics::UniquePtr<Framebuffer> CreateFramebuffer(const FramebufferCreateInfo& framebufferCreateInfo, Graphics::UniquePtr<Framebuffer>&& oldFramebuffer) override
184 * @copydoc Dali::Graphics::CreatePipeline()
186 Graphics::UniquePtr<Pipeline> CreatePipeline(const PipelineCreateInfo& pipelineCreateInfo, Graphics::UniquePtr<Pipeline>&& oldPipeline) override
192 * @copydoc Dali::Graphics::CreateShader()
194 Graphics::UniquePtr<Shader> CreateShader(const ShaderCreateInfo& shaderCreateInfo, Graphics::UniquePtr<Shader>&& oldShader) override
200 * @copydoc Dali::Graphics::CreateSampler()
202 Graphics::UniquePtr<Sampler> CreateSampler(const SamplerCreateInfo& samplerCreateInfo, Graphics::UniquePtr<Sampler>&& oldSampler) override
208 * @copydoc Dali::Graphics::CreateRenderTarget()
210 Graphics::UniquePtr<RenderTarget> CreateRenderTarget(const RenderTargetCreateInfo& renderTargetCreateInfo, Graphics::UniquePtr<RenderTarget>&& oldRenderTarget) override
216 * @copydoc Dali::Graphics::MapBufferRange()
218 Graphics::UniquePtr<Memory> MapBufferRange(const MapBufferInfo& mapInfo) override
224 * @copydoc Dali::Graphics::MapTextureRange()
226 Graphics::UniquePtr<Memory> MapTextureRange(const MapTextureInfo& mapInfo) override
232 * @copydoc Dali::Graphics::UnmapMemory()
234 void UnmapMemory(Graphics::UniquePtr<Memory> memory) override
238 * @copydoc Dali::Graphics::GetTextureMemoryRequirements()
240 MemoryRequirements GetTextureMemoryRequirements(Texture& texture) const override
246 * @copydoc Dali::Graphics::GetBufferMemoryRequirements()
248 MemoryRequirements GetBufferMemoryRequirements(Buffer& buffer) const override
254 * @copydoc Dali::Graphics::GetTextureProperties()
256 const TextureProperties& GetTextureProperties(const Texture& texture) override
258 // for compiler not to moan
259 static TextureProperties dummy{};
264 * @copydoc Dali::Graphics::PipelineEquals()
266 [[nodiscard]] bool PipelineEquals(const Pipeline& pipeline0, const Pipeline& pipeline1) const override
271 [[nodiscard]] Integration::GlAbstraction* GetGL() const
273 return mGlAbstraction;
277 Integration::GlAbstraction* mGlAbstraction{nullptr};
278 Integration::GlSyncAbstraction* mGlSyncAbstraction{nullptr};
279 Integration::GlContextHelperAbstraction* mGlContextHelperAbstraction{nullptr};
282 } // namespace Graphics
286 #endif //DALI_EGL_GRAPHICS_CONTROLLER_H