[cairo-commit] glitz/src glitz.c, 1.6, 1.7 glitz.h, 1.7, 1.8 glitz_agl_surface.c, 1.6, 1.7 glitz_glx_info.c, 1.4, 1.5 glitz_glx_surface.c, 1.7, 1.8 glitz_glxext.h, 1.3, 1.4 glitz_glxint.h, 1.6, 1.7 glitz_programmatic.c, 1.4, 1.5 glitz_surface.c, 1.8, 1.9 glitz_texture.c, 1.4, 1.5 glitz_util.c, 1.3, 1.4 glitzint.h, 1.11, 1.12

David Reveman commit at pdx.freedesktop.org
Wed May 12 17:47:34 PDT 2004


Committed by: davidr

Update of /cvs/cairo/glitz/src
In directory pdx:/tmp/cvs-serv30558/src

Modified Files:
	glitz.c glitz.h glitz_agl_surface.c glitz_glx_info.c 
	glitz_glx_surface.c glitz_glxext.h glitz_glxint.h 
	glitz_programmatic.c glitz_surface.c glitz_texture.c 
	glitz_util.c glitzint.h 
Log Message:
Added copy area operation

Index: glitz.c
===================================================================
RCS file: /cvs/cairo/glitz/src/glitz.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -C2 -d -r1.6 -r1.7
*** a/glitz.c	10 May 2004 15:14:39 -0000	1.6
--- b/glitz.c	13 May 2004 00:47:32 -0000	1.7
***************
*** 589,593 ****
    clip.y1 = y_dst;
    clip.x2 = clip.x1 + width;
!   clip.y2 = clip.y1 + height;  
    
    gl->scissor (clip.x1, dst->height - (clip.y1 + height), width, height);
--- 589,593 ----
    clip.y1 = y_dst;
    clip.x2 = clip.x1 + width;
!   clip.y2 = clip.y1 + height;
    
    gl->scissor (clip.x1, dst->height - (clip.y1 + height), width, height);
***************
*** 875,876 ****
--- 875,985 ----
      glitz_surface_destroy (intermediate);
  }
+ 
+ void
+ glitz_copy_area (glitz_surface_t *src,
+                  glitz_surface_t *dst,
+                  int x_src,
+                  int y_src,
+                  int width,
+                  int height,
+                  int x_dst,
+                  int y_dst)
+ {
+   glitz_bounding_box_t box, src_box, dst_box;
+   int status;
+   
+   if (SURFACE_PROGRAMMATIC (dst) || SURFACE_PROGRAMMATIC (src))
+     return;
+ 
+   box.x1 = x_src;
+   box.y1 = y_src;
+   box.x2 = box.x1 + width;
+   box.y2 = box.y1 + height;
+ 
+   src_box.x1 = src_box.y1 = 0;
+   src_box.x2 = src->width;
+   src_box.y2 = src->height;
+ 
+   glitz_intersect_bounding_box (&box, &src_box, &src_box);
+ 
+   box.x1 = x_dst;
+   box.y1 = y_dst;
+   box.x2 = box.x1 + (src_box.x2 - src_box.x1);
+   box.y2 = box.y1 + (src_box.y2 - src_box.y1);
+ 
+   dst_box.x1 = dst_box.y1 = 0;
+   dst_box.x2 = dst->width;
+   dst_box.y2 = dst->height;
+ 
+   glitz_intersect_bounding_box (&box, &dst_box, &dst_box);
+ 
+   x_src = src_box.x1;
+   y_src = src_box.y1;
+   width = dst_box.x2 - dst_box.x1;
+   height = dst_box.y2 - dst_box.y1;
+   x_dst = dst_box.x1;
+   y_dst = dst_box.y1;
+ 
+   if (width <= 0 || height <= 0) {
+     glitz_surface_status_add (dst, GLITZ_STATUS_BAD_COORDINATE_MASK);
+     return;
+   }
+ 
+   status = 0;
+   if (glitz_surface_try_push_current (dst,
+                                       GLITZ_CN_SURFACE_DRAWABLE_CURRENT)) {
+     if (src != dst)
+       status = glitz_surface_make_current_read (src);
+     else
+       status = 1;
+ 
+     if (status) {
+       if (src->format->doublebuffer)
+         dst->gl->read_buffer (GLITZ_GL_BACK);
+       if (dst->format->doublebuffer)
+         dst->gl->draw_buffer (GLITZ_GL_BACK);
+       
+       dst->gl->disable (GLITZ_GL_SCISSOR_TEST);
+       dst->gl->disable (GLITZ_GL_DITHER);    
+       glitz_set_operator (dst->gl, GLITZ_OPERATOR_SRC);
+       
+       dst->gl->pixel_zoom (1.0, 1.0);
+       glitz_set_raster_pos (dst->gl, x_dst, dst->height - (y_dst + height));
+       dst->gl->copy_pixels (x_src, src->height - (y_src + height),
+                             width, height, GLITZ_GL_COLOR);
+     } else
+       glitz_composite (GLITZ_OPERATOR_SRC, src, NULL, dst,
+                        x_src, y_src, 0, 0, x_dst, y_dst, width, height);
+     status = 1;
+     glitz_surface_pop_current (dst);
+   }
+ 
+   if (!status) {
+     if (glitz_surface_try_push_current (src,
+                                         GLITZ_CN_SURFACE_DRAWABLE_CURRENT)) {
+       glitz_texture_copy_surface (&dst->texture, src,
+                                   &dst_box, x_src, y_src);
+       status = 1;
+     }
+     glitz_surface_pop_current (src);
+   }
+ 
+   if (!status) {
+     int rowstride, bytes_per_pixel;
+     char *pixel_buf;
+     
+     bytes_per_pixel = MAX ((dst->format->bpp / 8), (src->format->bpp / 8));
+     
+     rowstride = width * bytes_per_pixel;
+     rowstride = (rowstride + 3) & -4;
+     pixel_buf = malloc (height * rowstride);
+     if (!pixel_buf) {
+       glitz_surface_status_add (dst, GLITZ_STATUS_NO_MEMORY_MASK);
+       return;
+     }
+     glitz_surface_read_pixels (src, x_src, y_src, width, height, pixel_buf);
+     glitz_surface_draw_pixels (dst, x_dst, y_dst, width, height, pixel_buf);
+   }
+   
+   glitz_surface_dirty (dst, &dst_box);
+ }

Index: glitz.h
===================================================================
RCS file: /cvs/cairo/glitz/src/glitz.h,v
retrieving revision 1.7
retrieving revision 1.8
diff -C2 -d -r1.7 -r1.8
*** a/glitz.h	11 May 2004 08:56:08 -0000	1.7
--- b/glitz.h	13 May 2004 00:47:32 -0000	1.8
***************
*** 499,502 ****
--- 499,512 ----
                   int width,
                   int height);
+ 
+ void
+ glitz_copy_area (glitz_surface_t *src,
+                  glitz_surface_t *dst,
+                  int x_src,
+                  int y_src,
+                  int width,
+                  int height,
+                  int x_dst,
+                  int y_dst);
    
  #if defined(__cplusplus) || defined(c_plusplus)

Index: glitz_agl_surface.c
===================================================================
RCS file: /cvs/cairo/glitz/src/glitz_agl_surface.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -C2 -d -r1.6 -r1.7
*** a/glitz_agl_surface.c	10 May 2004 15:14:39 -0000	1.6
--- b/glitz_agl_surface.c	13 May 2004 00:47:32 -0000	1.7
***************
*** 87,90 ****
--- 87,96 ----
  }
  
+ static glitz_bool_t
+ _glitz_agl_surface_make_current_read (void *abstract_surface)
+ {
+   return 0;
+ }
+ 
  static const struct glitz_surface_backend glitz_agl_surface_backend = {
    _glitz_agl_surface_create_similar,
***************
*** 94,98 ****
    _glitz_agl_surface_get_texture,
    _glitz_agl_surface_update_size,
!   _glitz_agl_surface_flush
  };
  
--- 100,105 ----
    _glitz_agl_surface_get_texture,
    _glitz_agl_surface_update_size,
!   _glitz_agl_surface_flush,
!   _glitz_agl_surface_make_current_read
  };
  
***************
*** 108,112 ****
      } else 
        glitz_texture_copy_surface (&surface->base.texture, &surface->base,
!                                   &surface->base.dirty_box);
      
      surface->base.hint_mask &= ~GLITZ_INT_HINT_DIRTY_MASK;
--- 115,121 ----
      } else 
        glitz_texture_copy_surface (&surface->base.texture, &surface->base,
!                                   &surface->base.dirty_box,
!                                   surface->base.dirty_box.x1,
!                                   surface->base.dirty_box.y1);
      
      surface->base.hint_mask &= ~GLITZ_INT_HINT_DIRTY_MASK;

Index: glitz_glx_info.c
===================================================================
RCS file: /cvs/cairo/glitz/src/glitz_glx_info.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -d -r1.4 -r1.5
*** a/glitz_glx_info.c	9 May 2004 20:54:51 -0000	1.4
--- b/glitz_glx_info.c	13 May 2004 00:47:32 -0000	1.5
***************
*** 133,136 ****
--- 133,138 ----
    info->glx.destroy_pbuffer = (glitz_glx_destroy_pbuffer_t)
      glitz_glx_get_proc_address (info, "glXDestroyPbuffer");
+   info->glx.make_context_current = (glitz_glx_make_context_current_t)
+     glitz_glx_get_proc_address (info, "glXMakeContextCurrent");
    
    info->glx.need_lookup = 0;

Index: glitz_glx_surface.c
===================================================================
RCS file: /cvs/cairo/glitz/src/glitz_glx_surface.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -C2 -d -r1.7 -r1.8
*** a/glitz_glx_surface.c	10 May 2004 15:14:39 -0000	1.7
--- b/glitz_glx_surface.c	13 May 2004 00:47:32 -0000	1.8
***************
*** 85,88 ****
--- 85,105 ----
  }
  
+ static glitz_bool_t
+ _glitz_glx_surface_make_current_read (void *abstract_surface)
+ {
+   glitz_glx_surface_t *surface = (glitz_glx_surface_t *) abstract_surface;
+   glitz_glx_static_proc_address_list_t *glx =
+     &surface->screen_info->display_info->thread_info->glx;
+ 
+   if (glx->make_context_current && surface->drawable)
+     return
+       glx->make_context_current (surface->screen_info->display_info->display,
+                                  glXGetCurrentDrawable (),
+                                  surface->drawable,
+                                  glXGetCurrentContext ());
+   else
+     return 0;
+ }
+ 
  static const struct glitz_surface_backend glitz_glx_surface_backend = {
    _glitz_glx_surface_create_similar,
***************
*** 92,96 ****
    _glitz_glx_surface_get_texture,
    _glitz_glx_surface_update_size,
!   _glitz_glx_surface_flush
  };
  
--- 109,114 ----
    _glitz_glx_surface_get_texture,
    _glitz_glx_surface_update_size,
!   _glitz_glx_surface_flush,
!   _glitz_glx_surface_make_current_read
  };
  
***************
*** 122,126 ****
    if (surface->base.hint_mask & GLITZ_INT_HINT_DIRTY_MASK) {
      glitz_texture_copy_surface (&surface->base.texture, &surface->base,
!                                 &surface->base.dirty_box);
      surface->base.hint_mask &= ~GLITZ_INT_HINT_DIRTY_MASK;
    }
--- 140,146 ----
    if (surface->base.hint_mask & GLITZ_INT_HINT_DIRTY_MASK) {
      glitz_texture_copy_surface (&surface->base.texture, &surface->base,
!                                 &surface->base.dirty_box,
!                                 surface->base.dirty_box.x1,
!                                 surface->base.dirty_box.y1);
      surface->base.hint_mask &= ~GLITZ_INT_HINT_DIRTY_MASK;
    }

Index: glitz_glxext.h
===================================================================
RCS file: /cvs/cairo/glitz/src/glitz_glxext.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -d -r1.3 -r1.4
*** a/glitz_glxext.h	9 May 2004 20:54:51 -0000	1.3
--- b/glitz_glxext.h	13 May 2004 00:47:32 -0000	1.4
***************
*** 106,109 ****
--- 106,111 ----
  typedef void (* glitz_glx_destroy_pbuffer_t)
       (Display *display, GLXPbuffer pbuffer);
+ typedef Bool (* glitz_glx_make_context_current_t)
+      (Display *display, GLXDrawable draw, GLXDrawable read, GLXContext ctx);
  
  #ifndef GLX_ARB_multisample

Index: glitz_glxint.h
===================================================================
RCS file: /cvs/cairo/glitz/src/glitz_glxint.h,v
retrieving revision 1.6
retrieving revision 1.7
diff -C2 -d -r1.6 -r1.7
*** a/glitz_glxint.h	9 May 2004 20:54:51 -0000	1.6
--- b/glitz_glxint.h	13 May 2004 00:47:32 -0000	1.7
***************
*** 61,64 ****
--- 61,65 ----
    glitz_glx_create_pbuffer_t create_pbuffer;
    glitz_glx_destroy_pbuffer_t destroy_pbuffer;
+   glitz_glx_make_context_current_t make_context_current;
    glitz_bool_t need_lookup;
  } glitz_glx_static_proc_address_list_t;

Index: glitz_programmatic.c
===================================================================
RCS file: /cvs/cairo/glitz/src/glitz_programmatic.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -d -r1.4 -r1.5
*** a/glitz_programmatic.c	6 May 2004 14:55:03 -0000	1.4
--- b/glitz_programmatic.c	13 May 2004 00:47:32 -0000	1.5
***************
*** 90,97 ****
  
  static void
! _glitz_programmatic_surface_realize (void *abstract_surface) {}
  
  static void
! _glitz_programmatic_surface_show (void *abstract_surface) {}
  
  static const struct glitz_surface_backend
--- 90,103 ----
  
  static void
! _glitz_programmatic_surface_update_size (void *abstract_surface) {}
  
  static void
! _glitz_programmatic_surface_flush (void *abstract_surface) {}
! 
! static glitz_bool_t
! _glitz_programmatic_surface_make_current_read (void *abstract_surface)
! {
!   return 0;
! }
  
  static const struct glitz_surface_backend
***************
*** 102,107 ****
    _glitz_programmatic_surface_pop_current,
    _glitz_programmatic_surface_get_texture,
!   _glitz_programmatic_surface_realize,
!   _glitz_programmatic_surface_show
  };
  
--- 108,114 ----
    _glitz_programmatic_surface_pop_current,
    _glitz_programmatic_surface_get_texture,
!   _glitz_programmatic_surface_update_size,
!   _glitz_programmatic_surface_flush,
!   _glitz_programmatic_surface_make_current_read
  };
  
***************
*** 125,129 ****
    glitz_surface_init (&surface->base,
                        &glitz_programmatic_surface_backend,
!                       NULL, NULL, 1, 1, NULL, 0);
  
    surface->base.hint_mask |= GLITZ_HINT_PROGRAMMATIC_MASK;
--- 132,136 ----
    glitz_surface_init (&surface->base,
                        &glitz_programmatic_surface_backend,
!                       NULL, NULL, MAXSHORT, MAXSHORT, NULL, 0);
  
    surface->base.hint_mask |= GLITZ_HINT_PROGRAMMATIC_MASK;

Index: glitz_surface.c
===================================================================
RCS file: /cvs/cairo/glitz/src/glitz_surface.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -C2 -d -r1.8 -r1.9
*** a/glitz_surface.c	10 May 2004 21:00:31 -0000	1.8
--- b/glitz_surface.c	13 May 2004 00:47:32 -0000	1.9
***************
*** 58,62 ****
  
    if (surface->gl)
!     glitz_texture_init (gl, &surface->texture,
                          width, height,
                          glitz_get_gl_format_from_bpp (format->bpp),
--- 58,62 ----
  
    if (surface->gl)
!     glitz_texture_init (&surface->texture,
                          width, height,
                          glitz_get_gl_format_from_bpp (format->bpp),
***************
*** 156,162 ****
  }
  
! static glitz_bool_t
! _glitz_surface_try_push_current (glitz_surface_t *surface,
!                                  glitz_constraint_t constraint)
  {
    if (!surface->backend->push_current (surface, constraint))
--- 156,162 ----
  }
  
! glitz_bool_t
! glitz_surface_try_push_current (glitz_surface_t *surface,
!                                 glitz_constraint_t constraint)
  {
    if (!surface->backend->push_current (surface, constraint))
***************
*** 423,450 ****
  slim_hidden_def(glitz_surface_update_size);
  
- static void
- _glitz_set_raster_pos (glitz_gl_proc_address_list_t *gl,
-                        int x,
-                        int y)
- {
-   gl->push_attrib (GLITZ_GL_TRANSFORM_BIT | GLITZ_GL_VIEWPORT_BIT);
-   gl->matrix_mode (GLITZ_GL_PROJECTION);
-   gl->push_matrix ();
-   gl->load_identity ();
-   gl->matrix_mode (GLITZ_GL_MODELVIEW);
-   gl->push_matrix ();
-   gl->load_identity ();
-   gl->depth_range (0, 1);
-   gl->viewport (-1, -1, 2, 2);
-   
-   gl->raster_pos_2d (0, 0);
-   gl->bitmap (0, 0, 1, 1, x, y, NULL);
-   
-   gl->pop_matrix ();
-   gl->matrix_mode (GLITZ_GL_PROJECTION);
-   gl->pop_matrix ();
-   gl->pop_attrib ();
- }
- 
  void
  glitz_surface_flush (glitz_surface_t *surface,
--- 423,426 ----
***************
*** 474,478 ****
          glitz_set_operator (surface->gl, GLITZ_OPERATOR_SRC);
  
!         _glitz_set_raster_pos (surface->gl, x, surface->height - (y + height));
          surface->gl->copy_pixels (x, surface->height - (y + height),
                                    width, height, GLITZ_GL_COLOR);
--- 450,454 ----
          glitz_set_operator (surface->gl, GLITZ_OPERATOR_SRC);
  
!         glitz_set_raster_pos (surface->gl, x, surface->height - (y + height));
          surface->gl->copy_pixels (x, surface->height - (y + height),
                                    width, height, GLITZ_GL_COLOR);
***************
*** 487,490 ****
--- 463,472 ----
  slim_hidden_def(glitz_surface_flush);
  
+ glitz_bool_t
+ glitz_surface_make_current_read (glitz_surface_t *surface)
+ {
+   return surface->backend->make_current_read (surface);
+ }
+ 
  void
  glitz_surface_dirty (glitz_surface_t *surface,
***************
*** 583,588 ****
       copy the part we want, not very efficient. We only want to read the
       area requested. I think it can be fixed with glPixelStore parameters. */
!   if (_glitz_surface_try_push_current (surface,
!                                        GLITZ_CN_SURFACE_DRAWABLE_CURRENT)) {
  
      if (format == GLITZ_GL_LUMINANCE_ALPHA)
--- 565,570 ----
       copy the part we want, not very efficient. We only want to read the
       area requested. I think it can be fixed with glPixelStore parameters. */
!   if (glitz_surface_try_push_current (surface,
!                                       GLITZ_CN_SURFACE_DRAWABLE_CURRENT)) {
  
      if (format == GLITZ_GL_LUMINANCE_ALPHA)
***************
*** 655,659 ****
      free (pixel_buf);
  }
- slim_hidden_def(glitz_surface_read_pixels);
  
  void
--- 637,640 ----
***************
*** 665,669 ****
                             char *pixels)
  {
!   unsigned char *pixel_buf = NULL;
    glitz_gl_enum_t format, type;
    int bytes_per_pixel;
--- 646,650 ----
                             char *pixels)
  {
!   char *pixel_buf = NULL;
    glitz_gl_enum_t format, type;
    int bytes_per_pixel;
***************
*** 684,689 ****
  
    drawable =
!     _glitz_surface_try_push_current (surface,
!                                      GLITZ_CN_SURFACE_DRAWABLE_CURRENT);
    
    if (format == GLITZ_GL_LUMINANCE_ALPHA) {
--- 665,670 ----
  
    drawable =
!     glitz_surface_try_push_current (surface,
!                                     GLITZ_CN_SURFACE_DRAWABLE_CURRENT);
    
    if (format == GLITZ_GL_LUMINANCE_ALPHA) {
***************
*** 731,738 ****
      if (format == GLITZ_GL_LUMINANCE_ALPHA) {
        surface->gl->pixel_zoom (1.0, 1.0);
!       _glitz_set_raster_pos (surface->gl, x, surface->height - y - height);
      } else {
        surface->gl->pixel_zoom (1.0, -1.0);
!       _glitz_set_raster_pos (surface->gl, x, surface->height - y);
      }
  
--- 712,719 ----
      if (format == GLITZ_GL_LUMINANCE_ALPHA) {
        surface->gl->pixel_zoom (1.0, 1.0);
!       glitz_set_raster_pos (surface->gl, x, surface->height - y - height);
      } else {
        surface->gl->pixel_zoom (1.0, -1.0);
!       glitz_set_raster_pos (surface->gl, x, surface->height - y);
      }
  
***************
*** 762,766 ****
      free (pixel_buf);
  }
- slim_hidden_def(glitz_surface_draw_pixels);
  
  void
--- 743,746 ----

Index: glitz_texture.c
===================================================================
RCS file: /cvs/cairo/glitz/src/glitz_texture.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -d -r1.4 -r1.5
*** a/glitz_texture.c	10 May 2004 15:14:39 -0000	1.4
--- b/glitz_texture.c	13 May 2004 00:47:32 -0000	1.5
***************
*** 49,54 ****
  
  void
! glitz_texture_init (glitz_gl_proc_address_list_t *gl,
!                     glitz_texture_t *texture,
                      unsigned int width,
                      unsigned int height,
--- 49,53 ----
  
  void
! glitz_texture_init (glitz_texture_t *texture,
                      unsigned int width,
                      unsigned int height,
***************
*** 215,220 ****
  glitz_texture_copy_surface (glitz_texture_t *texture,
                              glitz_surface_t *surface,
!                             glitz_bounding_box_t *box)
  {
    glitz_surface_push_current (surface, GLITZ_CN_SURFACE_DRAWABLE_CURRENT);
    
--- 214,223 ----
  glitz_texture_copy_surface (glitz_texture_t *texture,
                              glitz_surface_t *surface,
!                             glitz_bounding_box_t *box,
!                             int x_src,
!                             int y_src)
  {
+   int x_dst, y_dst, width, height;
+   
    glitz_surface_push_current (surface, GLITZ_CN_SURFACE_DRAWABLE_CURRENT);
    
***************
*** 224,237 ****
      _glitz_texture_allocate (surface->gl, texture);
  
!   if (box->x1 < 0) box->x1 = 0;
!   if (box->y1 < 0) box->y1 = 0;
!   if (box->x2 > surface->width) box->x2 = surface->width;
!   if (box->y2 > surface->height) box->y2 = surface->height;
! 
    surface->gl->copy_tex_sub_image_2d (texture->target, 0,
!                                       box->x1, box->y1,
!                                       box->x1, box->y1,
!                                       box->x2 - box->x1,
!                                       box->y2 - box->y1);
    
    surface->gl->flush ();
--- 227,244 ----
      _glitz_texture_allocate (surface->gl, texture);
  
!   if (x_src < 0) x_src = 0;
!   if (y_src < 0) y_src = 0;
!   
!   x_dst = (box->x1 > 0)? box->x1: 0;
!   y_dst = (box->y1 > 0)? box->y1: 0;
!   width = (box->x2 < (int) texture->width)?
!     box->x2 - x_dst: (int) texture->width - x_dst;
!   height = (box->x2 < (int) texture->height)?
!     box->y2 - y_dst: (int) texture->height - y_dst;
!   
    surface->gl->copy_tex_sub_image_2d (texture->target, 0,
!                                       x_dst, y_dst,
!                                       x_src, y_src,
!                                       width, height);
    
    surface->gl->flush ();

Index: glitz_util.c
===================================================================
RCS file: /cvs/cairo/glitz/src/glitz_util.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -d -r1.3 -r1.4
*** a/glitz_util.c	10 May 2004 15:14:40 -0000	1.3
--- b/glitz_util.c	13 May 2004 00:47:32 -0000	1.4
***************
*** 191,192 ****
--- 191,216 ----
    *value = x;
  }
+ 
+ void
+ glitz_set_raster_pos (glitz_gl_proc_address_list_t *gl,
+                       int x,
+                       int y)
+ {
+   gl->push_attrib (GLITZ_GL_TRANSFORM_BIT | GLITZ_GL_VIEWPORT_BIT);
+   gl->matrix_mode (GLITZ_GL_PROJECTION);
+   gl->push_matrix ();
+   gl->load_identity ();
+   gl->matrix_mode (GLITZ_GL_MODELVIEW);
+   gl->push_matrix ();
+   gl->load_identity ();
+   gl->depth_range (0, 1);
+   gl->viewport (-1, -1, 2, 2);
+   
+   gl->raster_pos_2d (0, 0);
+   gl->bitmap (0, 0, 1, 1, x, y, NULL);
+   
+   gl->pop_matrix ();
+   gl->matrix_mode (GLITZ_GL_PROJECTION);
+   gl->pop_matrix ();
+   gl->pop_attrib ();
+ }

Index: glitzint.h
===================================================================
RCS file: /cvs/cairo/glitz/src/glitzint.h,v
retrieving revision 1.11
retrieving revision 1.12
diff -C2 -d -r1.11 -r1.12
*** a/glitzint.h	11 May 2004 08:48:53 -0000	1.11
--- b/glitzint.h	13 May 2004 00:47:32 -0000	1.12
***************
*** 272,275 ****
--- 272,278 ----
    void
    (*flush) (void *surface);
+ 
+   glitz_bool_t
+   (*make_current_read) (void *surface);
  } glitz_surface_backend_t;
  
***************
*** 448,453 ****
  
  void
! glitz_texture_init (glitz_gl_proc_address_list_t *gl,
!                     glitz_texture_t *texture,
                      unsigned int width,
                      unsigned int height,
--- 451,460 ----
  
  void
! glitz_set_raster_pos (glitz_gl_proc_address_list_t *gl,
!                       int x,
!                       int y);
! 
! void
! glitz_texture_init (glitz_texture_t *texture,
                      unsigned int width,
                      unsigned int height,
***************
*** 480,484 ****
  glitz_texture_copy_surface (glitz_texture_t *texture,
                              glitz_surface_t *surface,
!                             glitz_bounding_box_t *box);
  
  void
--- 487,493 ----
  glitz_texture_copy_surface (glitz_texture_t *texture,
                              glitz_surface_t *surface,
!                             glitz_bounding_box_t *box,
!                             int x_src,
!                             int y_src);
  
  void
***************
*** 511,517 ****
--- 520,533 ----
                              glitz_constraint_t constraint);
  
+ extern glitz_bool_t __internal_linkage
+ glitz_surface_try_push_current (glitz_surface_t *surface,
+                                 glitz_constraint_t constraint);
+ 
  void
  glitz_surface_pop_current (glitz_surface_t *surface);
  
+ extern glitz_bool_t __internal_linkage
+ glitz_surface_make_current_read (glitz_surface_t *surface);
+ 
  extern void __internal_linkage
  glitz_surface_bounds (glitz_surface_t *surface,
***************
*** 605,609 ****
                         glitz_surface_t *dst);
  
! extern void __internal_linkage
  glitz_programs_fini (glitz_gl_proc_address_list_t *gl,
                       glitz_programs_t *programs);
--- 621,625 ----
                         glitz_surface_t *dst);
  
! void
  glitz_programs_fini (glitz_gl_proc_address_list_t *gl,
                       glitz_programs_t *programs);
***************
*** 742,747 ****
  slim_hidden_proto(glitz_surface_update_size)
  slim_hidden_proto(glitz_surface_flush)
- slim_hidden_proto(glitz_surface_read_pixels)
- slim_hidden_proto(glitz_surface_draw_pixels)
  slim_hidden_proto(glitz_surface_get_status)
  slim_hidden_proto(glitz_surface_get_gl_texture)
--- 758,761 ----
***************
*** 768,772 ****
  slim_hidden_proto(glitz_color_range_put_back_data)
  slim_hidden_proto(glitz_color_range_set_filter)
! slim_hidden_proto(glitz_color_range_set_extend)     
  
  #endif /* GLITZINT_H_INCLUDED */
--- 782,786 ----
  slim_hidden_proto(glitz_color_range_put_back_data)
  slim_hidden_proto(glitz_color_range_set_filter)
! slim_hidden_proto(glitz_color_range_set_extend)
  
  #endif /* GLITZINT_H_INCLUDED */





More information about the cairo-commit mailing list