Ejemplo n.º 1
0
// Get the attribute value for the specified rendering context.
EGLBoolean eglQueryContext(EGLDisplay dpy, EGLContext ctx, EGLint attribute,
                           EGLint* value) {
  EGL_API_ENTRY("%p, %p, 0x%x, %p", dpy, ctx, attribute, value);
  EglDisplayImpl* display = EglDisplayImpl::GetDisplay(dpy);
  if (display == NULL || display->IsInitialized() == false) {
    SetError(EGL_BAD_DISPLAY);
    return EGL_FALSE;
  }
  ContextPtr context = display->GetContexts().Get(ctx);
  if (context == NULL) {
    SetError(EGL_BAD_CONTEXT);
    return EGL_FALSE;
  }

  switch (attribute) {
    case EGL_CONFIG_ID:
      return display->GetConfigAttribute(context->config, attribute, value);
    case EGL_CONTEXT_CLIENT_TYPE:
      *value = EGL_OPENGL_ES_API;
      return EGL_TRUE;
    case EGL_CONTEXT_CLIENT_VERSION:
      *value = context->GetVersion();
      return EGL_TRUE;
    case EGL_RENDER_BUFFER:
      if (context->GetSurface() == NULL)
        *value = EGL_NONE;
      else
        *value = EGL_BACK_BUFFER;  // single buffer not supported
      return EGL_TRUE;
    case EGL_ARC_UNDERLYING_CONTEXT: {
      NativeContext* native = context->GetNativeContext();
      *value = reinterpret_cast<EGLint>(Native::GetUnderlyingContext(native));
      return EGL_TRUE;
    }
    default:
      ALOGE("Unsupported attribute: %x", attribute);
      SetError(EGL_BAD_ATTRIBUTE);
      return EGL_FALSE;
  }
}