1/* 2 * Copyright 2013 The Android Open Source Project 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// GLContext.h 19//-------------------------------------------------------------------------------- 20#ifndef GLCONTEXT_H_ 21#define GLCONTEXT_H_ 22 23#include <EGL/egl.h> 24#include <GLES2/gl2.h> 25#include <android/log.h> 26 27#include "JNIHelper.h" 28 29namespace ndk_helper 30{ 31 32//-------------------------------------------------------------------------------- 33// Constants 34//-------------------------------------------------------------------------------- 35 36//-------------------------------------------------------------------------------- 37// Class 38//-------------------------------------------------------------------------------- 39 40/****************************************************************** 41 * OpenGL context handler 42 * The class handles OpenGL and EGL context based on Android activity life cycle 43 * The caller needs to call corresponding methods for each activity life cycle events as it's done in sample codes. 44 * 45 * Also the class initializes OpenGL ES3 when the compatible driver is installed in the device. 46 * getGLVersion() returns 3.0~ when the device supports OpenGLES3.0 47 * 48 * Thread safety: OpenGL context is expecting used within dedicated single thread, 49 * thus GLContext class is not designed as a thread-safe 50 */ 51class GLContext 52{ 53private: 54 //EGL configurations 55 ANativeWindow* window_; 56 EGLDisplay display_; 57 EGLSurface surface_; 58 EGLContext context_; 59 EGLConfig config_; 60 61 //Screen parameters 62 int32_t screen_width_; 63 int32_t screen_height_; 64 int32_t color_size_; 65 int32_t depth_size_; 66 67 //Flags 68 bool gles_initialized_; 69 bool egl_context_initialized_; 70 bool es3_supported_; 71 float gl_version_; 72 bool context_valid_; 73 74 void InitGLES(); 75 void Terminate(); 76 bool InitEGLSurface(); 77 bool InitEGLContext(); 78 79 GLContext( GLContext const& ); 80 void operator=( GLContext const& ); 81 GLContext(); 82 virtual ~GLContext(); 83public: 84 static GLContext* GetInstance() 85 { 86 //Singleton 87 static GLContext instance; 88 89 return &instance; 90 } 91 92 bool Init( ANativeWindow* window ); 93 EGLint Swap(); 94 bool Invalidate(); 95 96 void Suspend(); 97 EGLint Resume( ANativeWindow* window ); 98 99 int32_t GetScreenWidth() 100 { 101 return screen_width_; 102 } 103 int32_t GetScreenHeight() 104 { 105 return screen_height_; 106 } 107 108 int32_t GetBufferColorSize() 109 { 110 return color_size_; 111 } 112 int32_t GetBufferDepthSize() 113 { 114 return depth_size_; 115 } 116 float GetGLVersion() 117 { 118 return gl_version_; 119 } 120 bool CheckExtension( const char* extension ); 121}; 122 123} //namespace ndkHelper 124 125#endif /* GLCONTEXT_H_ */ 126