Add GLSurfaceView / external EGLContext support on Android by skipping the creation of BGFX's eglContext if g_bgfxAndroidWindow is set to NULL
This commit is contained in:
parent
62d2d744f9
commit
9e7e143f21
@ -178,6 +178,15 @@ EGL_IMPORT
|
||||
|
||||
m_eglLibrary = eglOpen();
|
||||
|
||||
|
||||
# if BX_PLATFORM_ANDROID
|
||||
if (!g_bgfxAndroidWindow)
|
||||
{
|
||||
BX_TRACE("androidSetWindow() was not called, assuming EGLContext and buffer-swapping are managed outside bgfx.");
|
||||
}
|
||||
else
|
||||
{
|
||||
# endif
|
||||
BX_UNUSED(_width, _height);
|
||||
EGLNativeDisplayType ndt = EGL_DEFAULT_DISPLAY;
|
||||
EGLNativeWindowType nwh = (EGLNativeWindowType)NULL;
|
||||
@ -257,7 +266,9 @@ EGL_IMPORT
|
||||
m_current = NULL;
|
||||
|
||||
eglSwapInterval(m_display, 0);
|
||||
|
||||
# if BX_PLATFORM_ANDROID
|
||||
}
|
||||
# endif
|
||||
# if BX_PLATFORM_EMSCRIPTEN
|
||||
emscripten_set_canvas_size(_width, _height);
|
||||
# endif // BX_PLATFORM_EMSCRIPTEN
|
||||
@ -267,12 +278,15 @@ EGL_IMPORT
|
||||
|
||||
void GlContext::destroy()
|
||||
{
|
||||
eglMakeCurrent(EGL_NO_DISPLAY, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
|
||||
eglDestroyContext(m_display, m_context);
|
||||
eglDestroySurface(m_display, m_surface);
|
||||
eglTerminate(m_display);
|
||||
m_context = NULL;
|
||||
|
||||
if (m_display)
|
||||
{
|
||||
eglMakeCurrent(EGL_NO_DISPLAY, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
|
||||
eglDestroyContext(m_display, m_context);
|
||||
eglDestroySurface(m_display, m_surface);
|
||||
eglTerminate(m_display);
|
||||
m_context = NULL;
|
||||
}
|
||||
|
||||
eglClose(m_eglLibrary);
|
||||
|
||||
# if BX_PLATFORM_RPI
|
||||
@ -283,14 +297,19 @@ EGL_IMPORT
|
||||
void GlContext::resize(uint32_t _width, uint32_t _height, uint32_t _flags)
|
||||
{
|
||||
BX_UNUSED(_width, _height);
|
||||
|
||||
# if BX_PLATFORM_ANDROID
|
||||
EGLint format;
|
||||
eglGetConfigAttrib(m_display, m_config, EGL_NATIVE_VISUAL_ID, &format);
|
||||
ANativeWindow_setBuffersGeometry(g_bgfxAndroidWindow, _width, _height, format);
|
||||
if (m_display)
|
||||
{
|
||||
EGLint format;
|
||||
eglGetConfigAttrib(m_display, m_config, EGL_NATIVE_VISUAL_ID, &format);
|
||||
ANativeWindow_setBuffersGeometry(g_bgfxAndroidWindow, _width, _height, format);
|
||||
}
|
||||
# endif // BX_PLATFORM_ANDROID
|
||||
|
||||
bool vsync = !!(_flags&BGFX_RESET_VSYNC);
|
||||
eglSwapInterval(m_display, vsync ? 1 : 0);
|
||||
if (m_display)
|
||||
eglSwapInterval(m_display, vsync ? 1 : 0);
|
||||
}
|
||||
|
||||
bool GlContext::isSwapChainSupported()
|
||||
@ -317,7 +336,8 @@ EGL_IMPORT
|
||||
|
||||
if (NULL == _swapChain)
|
||||
{
|
||||
eglSwapBuffers(m_display, m_surface);
|
||||
if (m_display)
|
||||
eglSwapBuffers(m_display, m_surface);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -333,7 +353,8 @@ EGL_IMPORT
|
||||
|
||||
if (NULL == _swapChain)
|
||||
{
|
||||
eglMakeCurrent(m_display, m_surface, m_surface, m_context);
|
||||
if (m_display)
|
||||
eglMakeCurrent(m_display, m_surface, m_surface, m_context);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user