コード例 #1
0
ファイル: xdg-surface.c プロジェクト: Hummer12007/wlc
static void
xdg_cb_surface_set_app_id(struct wl_client *client, struct wl_resource *resource, const char *app_id)
{
   (void)client;
   wlc_view_set_app_id_ptr(convert_from_wlc_handle((wlc_handle)wl_resource_get_user_data(resource), "view"), app_id);
}
コード例 #2
0
ファイル: gles2.c プロジェクト: boogerlad/wlc
static bool
egl_attach(struct ctx *context, struct wlc_context *ectx, struct wlc_surface *surface, struct wlc_buffer *buffer, EGLint format)
{
   assert(context && surface && buffer);

   if (!context->api.glEGLImageTargetTexture2DOES) {
      if (!has_extension(context, "GL_OES_EGL_image_external") ||
          !(context->api.glEGLImageTargetTexture2DOES = wlc_context_get_proc_address(ectx, "glEGLImageTargetTexture2DOES"))) {
         wlc_log(WLC_LOG_WARN, "No GL_OES_EGL_image_external available");
         return false;
      }
      assert(context->api.glEGLImageTargetTexture2DOES);
   }

   buffer->legacy_buffer = convert_to_wl_resource(buffer, "buffer");
   wlc_context_query_buffer(ectx, buffer->legacy_buffer, EGL_WIDTH, (EGLint*)&buffer->size.w);
   wlc_context_query_buffer(ectx, buffer->legacy_buffer, EGL_HEIGHT, (EGLint*)&buffer->size.h);
   wlc_context_query_buffer(ectx, buffer->legacy_buffer, EGL_WAYLAND_Y_INVERTED_WL, (EGLint*)&buffer->y_inverted);

   GLuint num_planes;
   GLenum target = GL_TEXTURE_2D;
   switch (format) {
      case EGL_TEXTURE_RGB:
      case EGL_TEXTURE_RGBA:
      default:
         num_planes = 1;
         surface->format = SURFACE_RGBA;
         break;
      case 0x31DA:
         num_planes = 1;
         surface->format = SURFACE_EGL;
         target = GL_TEXTURE_EXTERNAL_OES;
         break;
      case EGL_TEXTURE_Y_UV_WL:
         num_planes = 2;
         surface->format = SURFACE_Y_UV;
         break;
      case EGL_TEXTURE_Y_U_V_WL:
         num_planes = 3;
         surface->format = SURFACE_Y_U_V;
         break;
      case EGL_TEXTURE_Y_XUXV_WL:
         num_planes = 2;
         surface->format = SURFACE_Y_XUXV;
         break;
   }

   struct wlc_view *view;
   if ((view = convert_from_wlc_handle(surface->view, "view")) && view->x11.id)
      surface->format = wlc_x11_window_get_surface_format(&view->x11);

   if (num_planes > 3) {
      wlc_log(WLC_LOG_WARN, "planes > 3 in egl surfaces not supported, nor should be possible");
      return false;
   }

   surface_flush_images(ectx, surface);
   surface_gen_textures(surface, num_planes);

   for (GLuint i = 0; i < num_planes; ++i) {
      EGLint attribs[] = { EGL_WAYLAND_PLANE_WL, i, EGL_NONE };
      if (!(surface->images[i] = wlc_context_create_image(ectx, EGL_WAYLAND_BUFFER_WL, buffer->legacy_buffer, attribs)))
         return false;

      GL_CALL(glActiveTexture(GL_TEXTURE0 + i));
      GL_CALL(glBindTexture(target, surface->textures[i]));
      GL_CALL(context->api.glEGLImageTargetTexture2DOES(target, surface->images[i]));
   }

   return true;
}
コード例 #3
0
ファイル: xdg-surface.c プロジェクト: Hummer12007/wlc
static void
xdg_cb_surface_set_title(struct wl_client *client, struct wl_resource *resource, const char *title)
{
   (void)client;
   wlc_view_set_title_ptr(convert_from_wlc_handle((wlc_handle)wl_resource_get_user_data(resource), "view"), title, strlen(title));
}