static EGLBoolean droid_query_surface(_EGLDriver *drv, _EGLDisplay *dpy, _EGLSurface *surf, EGLint attribute, EGLint *value) { struct dri2_egl_surface *dri2_surf = dri2_egl_surface(surf); switch (attribute) { case EGL_WIDTH: if (dri2_surf->base.Type == EGL_WINDOW_BIT && dri2_surf->window) { dri2_surf->window->query(dri2_surf->window, NATIVE_WINDOW_DEFAULT_WIDTH, value); return EGL_TRUE; } break; case EGL_HEIGHT: if (dri2_surf->base.Type == EGL_WINDOW_BIT && dri2_surf->window) { dri2_surf->window->query(dri2_surf->window, NATIVE_WINDOW_DEFAULT_HEIGHT, value); return EGL_TRUE; } break; default: break; } return _eglQuerySurface(drv, dpy, surf, attribute, value); }
EGLBoolean eglQuerySurface(EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint * value) { EGL_DEBUG("%s: %s\n", __FILE__, __func__); EGL_DLSYM(eglQuerySurface); return _eglQuerySurface(dpy, surface, attribute, value); }
/** * Function utilizes swrastGetDrawableInfo to get surface * geometry from x server and calls default query surface * implementation that returns the updated values. * * In case of errors we still return values that we currently * have. */ static EGLBoolean dri2_query_surface(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *surf, EGLint attribute, EGLint *value) { struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp); struct dri2_egl_surface *dri2_surf = dri2_egl_surface(surf); int x, y, w, h; __DRIdrawable *drawable = dri2_dpy->vtbl->get_dri_drawable(surf); switch (attribute) { case EGL_WIDTH: case EGL_HEIGHT: if (x11_get_drawable_info(drawable, &x, &y, &w, &h, dri2_surf)) { surf->Width = w; surf->Height = h; } break; default: break; } return _eglQuerySurface(drv, disp, surf, attribute, value); }