Ejemplo n.º 1
0
static boolean
fbdev_surface_present(struct native_surface *nsurf,
                      const struct native_present_control *ctrl)
{
   struct fbdev_surface *fbsurf = fbdev_surface(nsurf);
   struct fbdev_display *fbdpy = fbsurf->fbdpy;
   boolean ret = FALSE;

   if (ctrl->swap_interval)
      return FALSE;
   if (ctrl->natt != NATIVE_ATTACHMENT_BACK_LEFT)
      return FALSE;

   if (!fbdpy->assume_fixed_vinfo) {
      struct fb_var_screeninfo vinfo;

      memset(&vinfo, 0, sizeof(vinfo));
      if (ioctl(fbdpy->fd, FBIOGET_VSCREENINFO, &vinfo))
         return FALSE;

      /* present the surface */
      if (fbdev_surface_update_drawable(&fbsurf->base, &vinfo)) {
         ret = resource_surface_present(fbsurf->rsurf,
               ctrl->natt, (void *) &fbsurf->drawable);
      }

      fbsurf->width = vinfo.xres;
      fbsurf->height = vinfo.yres;

      if (resource_surface_set_size(fbsurf->rsurf,
               fbsurf->width, fbsurf->height)) {
         /* surface resized */
         fbsurf->sequence_number++;
         fbdpy->event_handler->invalid_surface(&fbdpy->base,
               &fbsurf->base, fbsurf->sequence_number);
      }
   }
   else {
      /* the drawable never changes */
      ret = resource_surface_present(fbsurf->rsurf,
            ctrl->natt, (void *) &fbsurf->drawable);
   }

   return ret;
}
Ejemplo n.º 2
0
static boolean
psl1ght_surface_flush_frontbuffer(struct native_surface *nsurf)
{
   struct psl1ght_surface *pssurf = psl1ght_surface(nsurf);

   if (!pssurf->is_current)
      return TRUE;

   return resource_surface_present(pssurf->rsurf,
         NATIVE_ATTACHMENT_FRONT_LEFT, NULL);
}
Ejemplo n.º 3
0
static boolean
ximage_surface_flush_frontbuffer(struct native_surface *nsurf)
{
   struct ximage_surface *xsurf = ximage_surface(nsurf);
   boolean ret;

   ret = resource_surface_present(xsurf->rsurf,
         NATIVE_ATTACHMENT_FRONT_LEFT, (void *) &xsurf->xdraw);
   /* force buffers to be updated in next validation call */
   ximage_surface_invalidate(&xsurf->base);

   return ret;
}
Ejemplo n.º 4
0
static boolean
ximage_surface_swap_buffers(struct native_surface *nsurf)
{
   struct ximage_surface *xsurf = ximage_surface(nsurf);
   boolean ret;

   ret = resource_surface_present(xsurf->rsurf,
         NATIVE_ATTACHMENT_BACK_LEFT, (void *) &xsurf->xdraw);

   resource_surface_swap_buffers(xsurf->rsurf,
         NATIVE_ATTACHMENT_FRONT_LEFT, NATIVE_ATTACHMENT_BACK_LEFT, TRUE);
   /* the front/back buffers have been swapped */
   ximage_surface_invalidate(&xsurf->base);

   return ret;
}
Ejemplo n.º 5
0
static boolean
gdi_surface_flush_frontbuffer(struct native_surface *nsurf)
{
   struct gdi_surface *gsurf = gdi_surface(nsurf);
   HDC hDC;
   boolean ret;

   hDC = GetDC(gsurf->hWnd);
   ret = resource_surface_present(gsurf->rsurf,
         NATIVE_ATTACHMENT_FRONT_LEFT, (void *) hDC);
   ReleaseDC(gsurf->hWnd, hDC);

   /* force buffers to be updated in next validation call */
   gdi_surface_invalidate(&gsurf->base);

   return ret;
}
Ejemplo n.º 6
0
static boolean
gdi_surface_swap_buffers(struct native_surface *nsurf)
{
   struct gdi_surface *gsurf = gdi_surface(nsurf);
   HDC hDC;
   boolean ret;

   hDC = GetDC(gsurf->hWnd);
   ret = resource_surface_present(gsurf->rsurf,
         NATIVE_ATTACHMENT_BACK_LEFT, (void *) hDC);
   ReleaseDC(gsurf->hWnd, hDC);

   resource_surface_swap_buffers(gsurf->rsurf,
         NATIVE_ATTACHMENT_FRONT_LEFT, NATIVE_ATTACHMENT_BACK_LEFT, TRUE);
   /* the front/back buffers have been swapped */
   gdi_surface_invalidate(&gsurf->base);

   return ret;
}
Ejemplo n.º 7
0
static boolean
psl1ght_surface_swap_buffers(struct native_surface *nsurf)
{
   struct psl1ght_surface *pssurf = psl1ght_surface(nsurf);
   struct psl1ght_display *psdpy = pssurf->psdpy;
   boolean ret = TRUE;

   if (pssurf->is_current) {
      ret = resource_surface_present(pssurf->rsurf,
            NATIVE_ATTACHMENT_BACK_LEFT, NULL);
   }

   resource_surface_swap_buffers(pssurf->rsurf,
         NATIVE_ATTACHMENT_FRONT_LEFT, NATIVE_ATTACHMENT_BACK_LEFT, FALSE);
   /* the front/back textures are swapped */
   pssurf->sequence_number++;
   psdpy->event_handler->invalid_surface(&psdpy->base,
         &pssurf->base, pssurf->sequence_number);

   return ret;
}