EGLDisplay display;
EGLSurface mSurface;
bool initializeGLContext(){
// display
{
std::vector<EGLAttrib> displayAttributes;
displayAttributes.push_back(EGL_PLATFORM_ANGLE_TYPE_OPENGL_ANGLE);
displayAttributes.push_back(EGL_PLATFORM_ANGLE_TYPE_DEFAULT_ANGLE);
displayAttributes.push_back(EGL_PLATFORM_ANGLE_MAX_VERSION_MAJOR_ANGLE);
displayAttributes.push_back(EGL_DONT_CARE);
displayAttributes.push_back(EGL_PLATFORM_ANGLE_MAX_VERSION_MINOR_ANGLE);
displayAttributes.push_back(EGL_DONT_CARE);
displayAttributes.push_back(EGL_NONE);
display = eglGetPlatformDisplay(EGL_PLATFORM_ANGLE_ANGLE,
reinterpret_cast<void *>(0),
&displayAttributes[0]);
if (eglGetError() != EGL_SUCCESS)
{
std::cerr << "Error on eglGetPlatformDisplay.\n";
return false;
}
EGLint mEGLMajorVersion = 0;
EGLint mEGLMinorVersion = 0;
if (eglInitialize(display, &mEGLMajorVersion, &mEGLMinorVersion) == EGL_FALSE)
{
return false;
}
const char *displayExtensions = eglQueryString(display, EGL_EXTENSIONS);
std::cout << "egl init: " << mEGLMajorVersion << "." << mEGLMinorVersion << " exts=" << displayExtensions << "\n";
}
//surface
EGLConfig mConfig;
{
EGLint numConfigs = 0;
eglGetConfigs(display, nullptr, 0, &numConfigs);
std::vector<EGLConfig> allConfigs(numConfigs);
eglGetConfigs(display, allConfigs.data(), static_cast<EGLint>(allConfigs.size()), &numConfigs);
mConfig = allConfigs[0];
{
PrintConfigAttributes(display, mConfig);
}
std::vector<EGLint> surfaceAttributes;
surfaceAttributes.push_back(EGL_NONE);
std::cout << "try config=" << mConfig << " win="<< [mView layer] << "\n";
mSurface = eglCreateWindowSurface(display, mConfig, [mView layer], &surfaceAttributes[0]);
if (eglGetError() != EGL_SUCCESS || (mSurface == EGL_NO_SURFACE))
{
return false;
}
}
// context
EGLContext mContext;
{
eglBindAPI(EGL_OPENGL_ES_API);
if (eglGetError() != EGL_SUCCESS)
{
std::cerr << "Error on eglBindAPI.\n";
return false;
}
std::vector<EGLint> contextAttributes{
EGL_CONTEXT_MAJOR_VERSION, 3,
EGL_CONTEXT_MINOR_VERSION, 1};
contextAttributes.push_back(EGL_NONE);
mContext = eglCreateContext(display, mConfig, EGL_NO_CONTEXT, &contextAttributes[0]);
EGLint err_code = eglGetError();
if (err_code != EGL_SUCCESS) {
std::cerr << "Error on eglCreateContext.\n";
std::cout << eglErrorString(err_code) << "\n";
return false;
}
}
if (eglMakeCurrent(display, mSurface, mSurface, mContext) == EGL_FALSE || eglGetError() != EGL_SUCCESS)
{
std::cerr << "Error during eglMakeCurrent.\n";
return false;
}
auto sss = glGetString(GL_VERSION);
std::cout << sss << "\n";
return true;
}