Bool fakeMapFramebuffer (KdScreenInfo *screen) { FakeScrPriv *scrpriv = screen->driver; KdPointerMatrix m; FakePriv *priv = screen->card->driver; scrpriv->shadow = FALSE; KdComputePointerMatrix (&m, scrpriv->randr, screen->width, screen->height); KdSetPointerMatrix (&m); priv->bytes_per_line = ((screen->width * screen->fb.bitsPerPixel + 31) >> 5) << 2; free(priv->base); priv->base = malloc (priv->bytes_per_line * screen->height); if (scrpriv->shadow) { if (!KdShadowFbAlloc (screen, scrpriv->randr & (RR_Rotate_90|RR_Rotate_270))) return FALSE; } else { screen->fb.byteStride = priv->bytes_per_line; screen->fb.pixelStride = (priv->bytes_per_line * 8/ screen->fb.bitsPerPixel); screen->fb.frameBuffer = (CARD8 *) (priv->base); } return TRUE; }
Bool sdlMapFramebuffer (KdScreenInfo *screen) { SdlDriver *driver = screen->driver; KdPointerMatrix m; if (driver->randr != RR_Rotate_0) driver->shadow = TRUE; else driver->shadow = FALSE; KdComputePointerMatrix (&m, driver->randr, screen->width, screen->height); KdSetPointerMatrix (&m); screen->width = driver->screen->w; screen->height = driver->screen->h; printf("%s: shadow %d\n", __func__, driver->shadow); if (driver->shadow) { if (!KdShadowFbAlloc (screen, driver->randr & (RR_Rotate_90|RR_Rotate_270))) return FALSE; } else { screen->fb.byteStride = driver->screen->pitch; screen->fb.pixelStride = driver->screen->w; screen->fb.frameBuffer = (CARD8 *) (driver->screen->pixels); } return TRUE; }
Bool ephyrMapFramebuffer(KdScreenInfo * screen) { EphyrScrPriv *scrpriv = screen->driver; EphyrPriv *priv = screen->card->driver; KdPointerMatrix m; int buffer_height; EPHYR_LOG("screen->width: %d, screen->height: %d index=%d", screen->width, screen->height, screen->mynum); /* * Use the rotation last applied to ourselves (in the Xephyr case the fb * coordinate system moves independently of the pointer coordiante system). */ KdComputePointerMatrix(&m, ephyrRandr, screen->width, screen->height); KdSetPointerMatrix(&m); buffer_height = ephyrBufferHeight(screen); priv->base = hostx_screen_init(screen, screen->x, screen->y, screen->width, screen->height, buffer_height, &priv->bytes_per_line, &screen->fb.bitsPerPixel); if ((scrpriv->randr & RR_Rotate_0) && !(scrpriv->randr & RR_Reflect_All)) { scrpriv->shadow = FALSE; screen->fb.byteStride = priv->bytes_per_line; screen->fb.pixelStride = screen->width; screen->fb.frameBuffer = (CARD8 *) (priv->base); } else { /* Rotated/Reflected so we need to use shadow fb */ scrpriv->shadow = TRUE; EPHYR_LOG("allocing shadow"); KdShadowFbAlloc(screen, scrpriv->randr & (RR_Rotate_90 | RR_Rotate_270)); } return TRUE; }