2 * Copyright (c) 2019 Samsung Electronics Co., Ltd.
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
20 #include <dali/internal/graphics/gles/egl-graphics.h>
23 #include <dali/internal/window-system/common/display-utils.h> // For Utils::MakeUnique
32 EglGraphics::EglGraphics( )
33 : mMultiSamplingLevel( 0 )
37 EglGraphics::~EglGraphics()
41 void EglGraphics::SetGlesVersion( const int32_t glesVersion )
43 mEglImplementation->SetGlesVersion( glesVersion );
44 mGLES->SetGlesVersion( glesVersion );
47 void EglGraphics::SetIsSurfacelessContextSupported( const bool isSupported )
49 mGLES->SetIsSurfacelessContextSupported( isSupported );
52 void EglGraphics::Initialize( EnvironmentOptions* environmentOptions )
54 if( environmentOptions->GetGlesCallTime() > 0 )
56 mGLES = Utils::MakeUnique< GlProxyImplementation >( *environmentOptions );
60 mGLES.reset ( new GlImplementation() );
63 mDepthBufferRequired = static_cast< Integration::DepthBufferAvailable >( environmentOptions->DepthBufferRequired() );
64 mStencilBufferRequired = static_cast< Integration::StencilBufferAvailable >( environmentOptions->StencilBufferRequired() );
65 mPartialUpdateRequired = static_cast< Integration::PartialUpdateAvailable >( environmentOptions->PartialUpdateRequired() );
67 mMultiSamplingLevel = environmentOptions->GetMultiSamplingLevel();
69 mEglSync = Utils::MakeUnique< EglSyncImplementation >();
71 mEglContextHelper = Utils::MakeUnique< EglContextHelperImplementation >();
74 void EglGraphics::Initialize( bool depth, bool stencil, int msaa )
76 mDepthBufferRequired = static_cast< Integration::DepthBufferAvailable >( depth );
77 mStencilBufferRequired = static_cast< Integration::StencilBufferAvailable >( stencil );
79 mMultiSamplingLevel = msaa;
81 mEglSync = Utils::MakeUnique< EglSyncImplementation >();
83 mEglContextHelper = Utils::MakeUnique< EglContextHelperImplementation >();
86 EglInterface* EglGraphics::Create()
88 mEglImplementation = Utils::MakeUnique< EglImplementation >( mMultiSamplingLevel, mDepthBufferRequired, mStencilBufferRequired, mPartialUpdateRequired );
89 mEglImageExtensions = Utils::MakeUnique< EglImageExtensions >( mEglImplementation.get() );
91 mEglSync->Initialize( mEglImplementation.get() ); // The sync impl needs the EglDisplay
93 mEglContextHelper->Initialize( mEglImplementation.get() ); // The context helper impl needs the EglContext
95 return mEglImplementation.get();
98 void EglGraphics::Destroy()
102 GlImplementation& EglGraphics::GetGlesInterface()
107 Integration::GlAbstraction& EglGraphics::GetGlAbstraction() const
109 DALI_ASSERT_DEBUG( mGLES && "GLImplementation not created" );
113 EglImplementation& EglGraphics::GetEglImplementation() const
115 DALI_ASSERT_DEBUG( mEglImplementation && "EGLImplementation not created" );
116 return *mEglImplementation;
119 EglInterface& EglGraphics::GetEglInterface() const
121 DALI_ASSERT_DEBUG( mEglImplementation && "EGLImplementation not created" );
122 EglInterface* eglInterface = mEglImplementation.get();
123 return *eglInterface;
126 EglSyncImplementation& EglGraphics::GetSyncImplementation()
128 DALI_ASSERT_DEBUG( mEglSync && "EglSyncImplementation not created" );
132 EglContextHelperImplementation& EglGraphics::GetContextHelperImplementation()
134 DALI_ASSERT_DEBUG( mEglContextHelper && "EglContextHelperImplementation not created" );
135 return *mEglContextHelper;
138 EglImageExtensions* EglGraphics::GetImageExtensions()
140 DALI_ASSERT_DEBUG( mEglImageExtensions && "EglImageExtensions not created" );
141 return mEglImageExtensions.get();