wineandroid: Implement wglMakeContextCurrentARB.

Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Alexandre Julliard 2017-06-23 09:19:05 +02:00
parent a3eda7257c
commit f5a512498b
1 changed files with 49 additions and 0 deletions

View File

@ -330,6 +330,51 @@ static struct wgl_context *android_wglCreateContextAttribsARB( HDC hdc, struct w
return create_context( hdc, share, egl_attribs );
}
/***********************************************************************
* android_wglMakeContextCurrentARB
*/
static BOOL android_wglMakeContextCurrentARB( HDC draw_hdc, HDC read_hdc, struct wgl_context *ctx )
{
BOOL ret = FALSE;
struct gl_drawable *draw_gl, *read_gl = NULL;
EGLSurface draw_surface, read_surface;
HWND draw_hwnd;
TRACE( "%p %p %p\n", draw_hdc, read_hdc, ctx );
if (!ctx)
{
p_eglMakeCurrent( display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT );
NtCurrentTeb()->glContext = NULL;
return TRUE;
}
draw_hwnd = WindowFromDC( draw_hdc );
if ((draw_gl = get_gl_drawable( draw_hwnd, draw_hdc )))
{
read_gl = get_gl_drawable( WindowFromDC( read_hdc ), read_hdc );
draw_surface = draw_gl->surface ? draw_gl->surface : draw_gl->pbuffer;
read_surface = read_gl->surface ? read_gl->surface : read_gl->pbuffer;
TRACE( "%p/%p context %p surface %p/%p\n",
draw_hdc, read_hdc, ctx->context, draw_surface, read_surface );
ret = p_eglMakeCurrent( display, draw_surface, read_surface, ctx->context );
if (ret)
{
ctx->surface = draw_gl->surface;
ctx->hwnd = draw_hwnd;
ctx->refresh = FALSE;
NtCurrentTeb()->glContext = ctx;
goto done;
}
}
SetLastError( ERROR_INVALID_HANDLE );
done:
release_gl_drawable( read_gl );
release_gl_drawable( draw_gl );
return ret;
}
/***********************************************************************
* android_wglSetPixelFormatWINE
*/
@ -556,6 +601,10 @@ static void init_extensions(void)
register_extension("WGL_ARB_extensions_string");
egl_funcs.ext.p_wglGetExtensionsStringARB = android_wglGetExtensionsStringARB;
register_extension("WGL_ARB_make_current_read");
egl_funcs.ext.p_wglGetCurrentReadDCARB = (void *)1; /* never called */
egl_funcs.ext.p_wglMakeContextCurrentARB = android_wglMakeContextCurrentARB;
register_extension("WGL_EXT_extensions_string");
egl_funcs.ext.p_wglGetExtensionsStringEXT = android_wglGetExtensionsStringEXT;