예제 #1
0
static bool check_global_image_egl_image(GLuint global_image_id[2],
   GLeglImageOES image, CLIENT_THREAD_STATE_T *thread,
   bool render) /* else texture */
{
   CLIENT_PROCESS_STATE_T *process = CLIENT_GET_PROCESS_STATE();
   uint64_t id;
   uint32_t format, width, height;

   CLIENT_LOCK();
   id = process->inited ? khrn_global_image_map_lookup(&process->global_image_egl_images, (uint32_t)(uintptr_t)image) : 0;
   CLIENT_UNLOCK();
   if (!id) {
      return false;
   }
   global_image_id[0] = (GLuint)id;
   global_image_id[1] = (GLuint)(id >> 32);

   platform_get_global_image_info(global_image_id[0], global_image_id[1], &format, &width, &height);

   if (!(format & ((thread->opengl.context->type == OPENGL_ES_11) ?
      (render ? EGL_PIXEL_FORMAT_RENDER_GLES_BRCM : EGL_PIXEL_FORMAT_GLES_TEXTURE_BRCM) :
      (render ? EGL_PIXEL_FORMAT_RENDER_GLES2_BRCM : EGL_PIXEL_FORMAT_GLES2_TEXTURE_BRCM))) ||
      (width == 0) || (height == 0)) {
      return false;
   }

   /* format and max width/height checks done on server */

   return true;
}
CLIENT_PROCESS_STATE_T *client_egl_get_process_state(CLIENT_THREAD_STATE_T *thread, EGLDisplay dpy, EGLBoolean check_inited)
{
   if ((size_t)dpy == 1) {
      CLIENT_PROCESS_STATE_T *process = CLIENT_GET_PROCESS_STATE();

      if (check_inited && !process->inited) {
         thread->error = EGL_NOT_INITIALIZED;
         return NULL;
      } else
         return process;
   } else {
      thread->error = EGL_BAD_DISPLAY;
      return NULL;
   }
}