[egl] added fallback for platforms not supporting eglGetPlatformDisplay

This commit is contained in:
Geoffrey McRae 2020-01-17 11:50:00 +11:00
parent 406e22a681
commit 278d851c7c
3 changed files with 33 additions and 4 deletions

View File

@ -1 +1 @@
B1-96-g17e05c6fd5+1 B1-97-g406e22a681+1

View File

@ -367,11 +367,26 @@ bool egl_render_startup(void * opaque, SDL_Window * window)
return false; return false;
} }
const char *client_exts = eglQueryString(NULL, EGL_EXTENSIONS);
DEBUG_INFO("Supported extensions: %s", client_exts);
bool useNative = false;
if (strstr(client_exts, "EGL_KHR_platform_base") != NULL)
useNative = true;
DEBUG_INFO("use native: %s", useNative ? "true" : "false");
switch(wminfo.subsystem) switch(wminfo.subsystem)
{ {
case SDL_SYSWM_X11: case SDL_SYSWM_X11:
{ {
if (!useNative)
this->display = eglGetPlatformDisplay(EGL_PLATFORM_X11_KHR, wminfo.info.x11.display, NULL); this->display = eglGetPlatformDisplay(EGL_PLATFORM_X11_KHR, wminfo.info.x11.display, NULL);
else
{
EGLNativeDisplayType native = (EGLNativeDisplayType)wminfo.info.x11.display;
this->display = eglGetDisplay(native);
}
this->nativeWind = (EGLNativeWindowType)wminfo.info.x11.window; this->nativeWind = (EGLNativeWindowType)wminfo.info.x11.window;
break; break;
} }
@ -381,7 +396,13 @@ bool egl_render_startup(void * opaque, SDL_Window * window)
{ {
int width, height; int width, height;
SDL_GetWindowSize(window, &width, &height); SDL_GetWindowSize(window, &width, &height);
if (!useNative)
this->display = eglGetPlatformDisplay(EGL_PLATFORM_WAYLAND_KHR, wminfo.info.wl.display, NULL); this->display = eglGetPlatformDisplay(EGL_PLATFORM_WAYLAND_KHR, wminfo.info.wl.display, NULL);
else
{
EGLNativeDisplayType native = (EGLNativeDisplayType)wminfo.info.wl.display;
this->display = eglGetDisplay(native);
}
this->nativeWind = (EGLNativeWindowType)wl_egl_window_create(wminfo.info.wl.surface, width, height); this->nativeWind = (EGLNativeWindowType)wl_egl_window_create(wminfo.info.wl.surface, width, height);
break; break;
} }

View File

@ -34,6 +34,14 @@ FrameBuffer;
typedef bool (*FrameBufferReadFn)(void * opaque, const void * src, size_t size); typedef bool (*FrameBufferReadFn)(void * opaque, const void * src, size_t size);
/**
* Wait for the framebuffer to fill to the specified size
*/
static inline void framebuffer_wait(const FrameBuffer * frame, size_t size)
{
while(frame->wp != size) {}
}
/** /**
* Read data from the KVMFRFrame into the dst buffer * Read data from the KVMFRFrame into the dst buffer
*/ */