Diligent Engine  v.2.4.g
GLContextAndroid.hpp
Go to the documentation of this file.
1 /*
2  * Copyright 2019-2021 Diligent Graphics LLC
3  * Copyright 2015-2019 Egor Yusov
4  *
5  * Licensed under the Apache License, Version 2.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://www.apache.org/licenses/LICENSE-2.0
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  * In no event and under no legal theory, whether in tort (including negligence),
18  * contract, or otherwise, unless required by applicable law (such as deliberate
19  * and grossly negligent acts) or agreed to in writing, shall any Contributor be
20  * liable for any damages, including any direct, indirect, special, incidental,
21  * or consequential damages of any character arising as a result of this License or
22  * out of the use or inability to use the software (including but not limited to damages
23  * for loss of goodwill, work stoppage, computer failure or malfunction, or any and
24  * all other commercial damages or losses), even if such Contributor has been advised
25  * of the possibility of such damages.
26  */
27 
28 #pragma once
29 
30 #include <EGL/egl.h>
31 #include <android/native_window.h>
32 
33 namespace Diligent
34 {
35 
36 class GLContext
37 {
38 public:
39  using NativeGLContextType = EGLContext;
40 
41  GLContext(const struct EngineGLCreateInfo& InitAttribs, struct DeviceCaps& DeviceCaps, const struct SwapChainDesc* pSCDesc);
42  ~GLContext();
43 
44  bool Init(ANativeWindow* window);
45 
46  void SwapBuffers(int SwapInterval);
47 
48  void UpdateScreenSize();
49 
50  bool Invalidate();
51 
52  void Suspend();
53  EGLint Resume(ANativeWindow* window);
54 
56 
57  int32_t GetScreenWidth() const { return screen_width_; }
58  int32_t GetScreenHeight() const { return screen_height_; }
59 
60 private:
61  //EGL configurations
62  ANativeWindow* window_ = nullptr;
63  EGLDisplay display_ = EGL_NO_DISPLAY;
64  EGLSurface surface_ = EGL_NO_SURFACE;
65  EGLContext context_ = EGL_NO_CONTEXT;
66  EGLConfig config_;
67 
68  const bool create_debug_context_;
69 
70  EGLint egl_major_version_ = 0;
71  EGLint egl_minor_version_ = 0;
72 
73  //Screen parameters
74  int32_t color_size_ = 0;
75  int32_t depth_size_ = 0;
76  int32_t major_version_ = 0;
77  int32_t minor_version_ = 0;
78  int32_t screen_width_ = 0;
79  int32_t screen_height_ = 0;
80 
81  EGLint min_swap_interval_ = 0;
82  EGLint max_swap_interval_ = 1;
83 
84  //Flags
85  bool gles_initialized_ = false;
86  bool egl_context_initialized_ = false;
87  bool context_valid_ = false;
88 
89  void InitGLES();
90  void Terminate();
91  bool InitEGLSurface();
92  bool InitEGLContext();
93  void AttachToCurrentEGLContext();
94  void FillDeviceCaps(DeviceCaps& DeviceCaps);
95 };
96 
97 } // namespace Diligent
Diligent::GLContext::NativeGLContextType
EGLContext NativeGLContextType
Definition: GLContextAndroid.hpp:39
Diligent::GLContext::Suspend
void Suspend()
Definition: GLContextAndroid.cpp:402
Diligent::GLContext::GetScreenWidth
int32_t GetScreenWidth() const
Definition: GLContextAndroid.hpp:57
Diligent::GLContext::GLContext
GLContext(const struct EngineGLCreateInfo &InitAttribs, struct DeviceCaps &DeviceCaps, const struct SwapChainDesc *pSCDesc)
Diligent::GLContext::Invalidate
bool Invalidate()
Definition: GLContextAndroid.cpp:413
Diligent::GLContext::Resume
EGLint Resume(ANativeWindow *window)
Definition: GLContextAndroid.cpp:363
Diligent::SwapChainDesc
Swap chain description.
Definition: GraphicsTypes.h:1347
Diligent::GLContext
Definition: GLContextAndroid.hpp:36
Diligent::EngineGLCreateInfo
Attributes of the OpenGL-based engine implementation.
Definition: GraphicsTypes.h:2015
Diligent::GLContext::GetCurrentNativeGLContext
NativeGLContextType GetCurrentNativeGLContext()
Definition: GLContextAndroid.cpp:207
Diligent::GLContext::UpdateScreenSize
void UpdateScreenSize()
Definition: GLContextAndroid.cpp:347
Diligent::DeviceCaps
Device capabilities.
Definition: GraphicsTypes.h:1833
Diligent::GLContext::SwapBuffers
void SwapBuffers(int SwapInterval)
Definition: GLContextAndroid.cpp:282
Diligent::GLContext::Init
bool Init(ANativeWindow *window)
Definition: GLContextAndroid.cpp:236
Diligent::GLContext::GetScreenHeight
int32_t GetScreenHeight() const
Definition: GLContextAndroid.hpp:58
Diligent::GLContext::~GLContext
~GLContext()
Definition: GLContextAndroid.cpp:277
Diligent
The library uses Direct3D-style math:
Definition: AdvancedMath.hpp:37