Beispiel #1
0
static void
osmesa_UnmapRenderbuffer(struct gl_context *ctx, struct gl_renderbuffer *rb)
{
   if (rb->ClassID == OSMESA_RENDERBUFFER_CLASS) {
      /* no-op */
   }
   else {
      _swrast_unmap_soft_renderbuffer(ctx, rb);
   }
}
Beispiel #2
0
/**
 * Called via ctx->Driver.UnmapRenderbuffer()
 */
void
xmesa_UnmapRenderbuffer(struct gl_context *ctx, struct gl_renderbuffer *rb)
{
    struct xmesa_renderbuffer *xrb = xmesa_renderbuffer(rb);

    if (xrb->Base.Base.ClassID == XMESA_RENDERBUFFER) {
        XImage *ximage = xrb->ximage;

        if (!ximage) {
            /* this must be a pixmap/window renderbuffer */
            assert(xrb->pixmap);
            assert(xrb->map_ximage);
            if (xrb->map_ximage) {
                if (xrb->map_mode & GL_MAP_WRITE_BIT) {
                    /* put modified ximage data back into the pixmap/window */
                    int y2 = rb->Height - xrb->map_y - xrb->map_h;
                    GC gc = XCreateGC(xrb->Parent->display, xrb->pixmap, 0, NULL);

                    XPutImage(xrb->Parent->display,
                              xrb->pixmap,              /* dest */
                              gc,
                              xrb->map_ximage,          /* source */
                              0, 0,                     /* src x, y */
                              xrb->map_x, y2,           /* dest x, y */
                              xrb->map_w, xrb->map_h);  /* size */

                    XFreeGC(xrb->Parent->display, gc);
                }
                XMesaDestroyImage(xrb->map_ximage);
                xrb->map_ximage = NULL;
            }
        }

        xrb->map_mode = 0x0;

        return;
    }

    /* otherwise, this is an ordinary malloc-based renderbuffer */
    _swrast_unmap_soft_renderbuffer(ctx, rb);
}
Beispiel #3
0
static void
sw_UnmapRenderbuffer(struct gl_context *ctx, struct gl_renderbuffer *rb)
{
   if (rb->ClassID== SW_FRONT_RENDERBUFFER_CLASS)
    {
        /* This is our front buffer */
        struct sw_front_renderbuffer* srb = (struct sw_front_renderbuffer*)rb;
        if(srb->write)
        {
            /* Copy the bits to our display */
            BitBlt(IntGetCurrentDC(),
                srb->x, srb->y, srb->w, srb->h,
                srb->hdcmem, srb->x, srb->y, SRCCOPY);
            srb->write = FALSE;
        }
        return;
    }
    
    if(rb->ClassID == SW_BACK_RENDERBUFFER_CLASS)
        return; /* nothing to do */
    
    /* Let mesa rasterizer take care of this */
    _swrast_unmap_soft_renderbuffer(ctx, rb);
}