glamor: Fix screen_x/screen_y handling for compositing.
It's not an offset from pixmap coords to composited pixmap coords, it's an offset from screen-relative window drawable coords to composited pixmap coords.
This commit is contained in:
		
							parent
							
								
									5360b1e8bb
								
							
						
					
					
						commit
						be82a06242
					
				|  | @ -41,9 +41,8 @@ glamor_copy_n_to_n_copypixels(DrawablePtr src, | ||||||
| 			      int dx, | 			      int dx, | ||||||
| 			      int dy) | 			      int dy) | ||||||
| { | { | ||||||
|     PixmapPtr src_pixmap = glamor_get_drawable_pixmap(src); |  | ||||||
|     PixmapPtr dst_pixmap = glamor_get_drawable_pixmap(dst); |     PixmapPtr dst_pixmap = glamor_get_drawable_pixmap(dst); | ||||||
|     int i; |     int x_off, y_off, i; | ||||||
| 
 | 
 | ||||||
|     if (src != dst) { |     if (src != dst) { | ||||||
| 	glamor_fallback("glamor_copy_n_to_n_copypixels(): src != dest\n"); | 	glamor_fallback("glamor_copy_n_to_n_copypixels(): src != dest\n"); | ||||||
|  | @ -74,12 +73,14 @@ glamor_copy_n_to_n_copypixels(DrawablePtr src, | ||||||
|     glMatrixMode(GL_PROJECTION); |     glMatrixMode(GL_PROJECTION); | ||||||
|     glLoadIdentity(); |     glLoadIdentity(); | ||||||
| 
 | 
 | ||||||
|  |     glamor_get_drawable_deltas(dst, dst_pixmap, &x_off, &y_off); | ||||||
|  | 
 | ||||||
|     for (i = 0; i < nbox; i++) { |     for (i = 0; i < nbox; i++) { | ||||||
| 	int flip_y1 = dst_pixmap->drawable.height - 1 - box[i].y2; | 	int flip_y1 = dst_pixmap->drawable.height - 1 - box[i].y2 + y_off; | ||||||
| 	glRasterPos2i(box[i].x1 - dst_pixmap->screen_x, | 	glRasterPos2i(box[i].x1 + x_off, | ||||||
| 		      flip_y1 - dst_pixmap->screen_x); | 		      flip_y1); | ||||||
| 	glCopyPixels(box[i].x1 + dx - src_pixmap->screen_x, | 	glCopyPixels(box[i].x1 + dx + x_off, | ||||||
| 		     flip_y1 - dy - src_pixmap->screen_y, | 		     flip_y1 - dy, | ||||||
| 		     box[i].x2 - box[i].x1, | 		     box[i].x2 - box[i].x1, | ||||||
| 		     box[i].y2 - box[i].y1, | 		     box[i].y2 - box[i].y1, | ||||||
| 		     GL_COLOR); | 		     GL_COLOR); | ||||||
|  | @ -104,6 +105,7 @@ glamor_copy_n_to_n_textured(DrawablePtr src, | ||||||
|     int i; |     int i; | ||||||
|     float vertices[4][2], texcoords[4][2]; |     float vertices[4][2], texcoords[4][2]; | ||||||
|     glamor_pixmap_private *src_pixmap_priv; |     glamor_pixmap_private *src_pixmap_priv; | ||||||
|  |     int src_x_off, src_y_off, dst_x_off, dst_y_off; | ||||||
| 
 | 
 | ||||||
|     src_pixmap_priv = glamor_get_pixmap_private(src_pixmap); |     src_pixmap_priv = glamor_get_pixmap_private(src_pixmap); | ||||||
| 
 | 
 | ||||||
|  | @ -126,6 +128,11 @@ glamor_copy_n_to_n_textured(DrawablePtr src, | ||||||
| 	    goto fail; | 	    goto fail; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     glamor_get_drawable_deltas(dst, dst_pixmap, &dst_x_off, &dst_y_off); | ||||||
|  |     glamor_get_drawable_deltas(src, src_pixmap, &src_x_off, &src_y_off); | ||||||
|  |     dx += src_x_off; | ||||||
|  |     dy += src_y_off; | ||||||
|  | 
 | ||||||
|     glActiveTexture(GL_TEXTURE0); |     glActiveTexture(GL_TEXTURE0); | ||||||
|     glBindTexture(GL_TEXTURE_2D, src_pixmap_priv->tex); |     glBindTexture(GL_TEXTURE_2D, src_pixmap_priv->tex); | ||||||
|     glEnable(GL_TEXTURE_2D); |     glEnable(GL_TEXTURE_2D); | ||||||
|  | @ -143,14 +150,14 @@ glamor_copy_n_to_n_textured(DrawablePtr src, | ||||||
|     glUseProgramObjectARB(glamor_priv->finish_access_prog); |     glUseProgramObjectARB(glamor_priv->finish_access_prog); | ||||||
| 
 | 
 | ||||||
|     for (i = 0; i < nbox; i++) { |     for (i = 0; i < nbox; i++) { | ||||||
| 	vertices[0][0] = v_from_x_coord_x(dst_pixmap, box[i].x1); | 	vertices[0][0] = v_from_x_coord_x(dst_pixmap, box[i].x1 + dst_x_off); | ||||||
| 	vertices[0][1] = v_from_x_coord_y(dst_pixmap, box[i].y1); | 	vertices[0][1] = v_from_x_coord_y(dst_pixmap, box[i].y1 + dst_y_off); | ||||||
| 	vertices[1][0] = v_from_x_coord_x(dst_pixmap, box[i].x2); | 	vertices[1][0] = v_from_x_coord_x(dst_pixmap, box[i].x2 + dst_x_off); | ||||||
| 	vertices[1][1] = v_from_x_coord_y(dst_pixmap, box[i].y1); | 	vertices[1][1] = v_from_x_coord_y(dst_pixmap, box[i].y1 + dst_y_off); | ||||||
| 	vertices[2][0] = v_from_x_coord_x(dst_pixmap, box[i].x2); | 	vertices[2][0] = v_from_x_coord_x(dst_pixmap, box[i].x2 + dst_x_off); | ||||||
| 	vertices[2][1] = v_from_x_coord_y(dst_pixmap, box[i].y2); | 	vertices[2][1] = v_from_x_coord_y(dst_pixmap, box[i].y2 + dst_y_off); | ||||||
| 	vertices[3][0] = v_from_x_coord_x(dst_pixmap, box[i].x1); | 	vertices[3][0] = v_from_x_coord_x(dst_pixmap, box[i].x1 + dst_x_off); | ||||||
| 	vertices[3][1] = v_from_x_coord_y(dst_pixmap, box[i].y2); | 	vertices[3][1] = v_from_x_coord_y(dst_pixmap, box[i].y2 + dst_y_off); | ||||||
| 
 | 
 | ||||||
| 	texcoords[0][0] = t_from_x_coord_x(src_pixmap, box[i].x1 + dx); | 	texcoords[0][0] = t_from_x_coord_x(src_pixmap, box[i].x1 + dx); | ||||||
| 	texcoords[0][1] = t_from_x_coord_y(src_pixmap, box[i].y1 + dy); | 	texcoords[0][1] = t_from_x_coord_y(src_pixmap, box[i].y1 + dy); | ||||||
|  |  | ||||||
|  | @ -52,6 +52,27 @@ glamor_get_drawable_location(const DrawablePtr drawable) | ||||||
| 	return 'f'; | 	return 'f'; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | /**
 | ||||||
|  |  * Sets the offsets to add to coordinates to make them address the same bits in | ||||||
|  |  * the backing drawable. These coordinates are nonzero only for redirected | ||||||
|  |  * windows. | ||||||
|  |  */ | ||||||
|  | void | ||||||
|  | glamor_get_drawable_deltas(DrawablePtr drawable, PixmapPtr pixmap, | ||||||
|  | 			   int *x, int *y) | ||||||
|  | { | ||||||
|  | #ifdef COMPOSITE | ||||||
|  |     if (drawable->type == DRAWABLE_WINDOW) { | ||||||
|  | 	*x = -pixmap->screen_x; | ||||||
|  | 	*y = -pixmap->screen_y; | ||||||
|  | 	return; | ||||||
|  |     } | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  |     *x = 0; | ||||||
|  |     *y = 0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| Bool | Bool | ||||||
| glamor_set_destination_pixmap(PixmapPtr pixmap) | glamor_set_destination_pixmap(PixmapPtr pixmap) | ||||||
| { | { | ||||||
|  |  | ||||||
|  | @ -41,12 +41,15 @@ glamor_fill(DrawablePtr drawable, | ||||||
| 	    int height) | 	    int height) | ||||||
| { | { | ||||||
|     PixmapPtr dst_pixmap = glamor_get_drawable_pixmap(drawable); |     PixmapPtr dst_pixmap = glamor_get_drawable_pixmap(drawable); | ||||||
|  |     int x_off, y_off; | ||||||
|  | 
 | ||||||
|  |     glamor_get_drawable_deltas(drawable, dst_pixmap, &x_off, &y_off); | ||||||
| 
 | 
 | ||||||
|     switch (gc->fillStyle) { |     switch (gc->fillStyle) { | ||||||
|     case FillSolid: |     case FillSolid: | ||||||
| 	glamor_solid(dst_pixmap, | 	glamor_solid(dst_pixmap, | ||||||
| 		     x - dst_pixmap->screen_x, | 		     x + x_off, | ||||||
| 		     y - dst_pixmap->screen_y, | 		     y + y_off, | ||||||
| 		     width, | 		     width, | ||||||
| 		     height, | 		     height, | ||||||
| 		     gc->alu, | 		     gc->alu, | ||||||
|  | @ -57,28 +60,28 @@ glamor_fill(DrawablePtr drawable, | ||||||
|     case FillOpaqueStippled: |     case FillOpaqueStippled: | ||||||
| 	glamor_stipple(dst_pixmap, | 	glamor_stipple(dst_pixmap, | ||||||
| 		       gc->stipple, | 		       gc->stipple, | ||||||
| 		       x - dst_pixmap->screen_x, | 		       x+ x_off, | ||||||
| 		       y - dst_pixmap->screen_y, | 		       y + y_off, | ||||||
| 		       width, | 		       width, | ||||||
| 		       height, | 		       height, | ||||||
| 		       gc->alu, | 		       gc->alu, | ||||||
| 		       gc->planemask, | 		       gc->planemask, | ||||||
| 		       gc->fgPixel, | 		       gc->fgPixel, | ||||||
| 		       gc->bgPixel, | 		       gc->bgPixel, | ||||||
| 		       gc->patOrg.x - dst_pixmap->screen_x, | 		       gc->patOrg.x + x_off, | ||||||
| 		       gc->patOrg.y - dst_pixmap->screen_y); | 		       gc->patOrg.y + y_off); | ||||||
| 	break; | 	break; | ||||||
|     case FillTiled: |     case FillTiled: | ||||||
| 	glamor_tile(dst_pixmap, | 	glamor_tile(dst_pixmap, | ||||||
| 		    gc->tile.pixmap, | 		    gc->tile.pixmap, | ||||||
| 		    x - dst_pixmap->screen_x, | 		    x + x_off, | ||||||
| 		    y - dst_pixmap->screen_y, | 		    y + y_off, | ||||||
| 		    width, | 		    width, | ||||||
| 		    height, | 		    height, | ||||||
| 		    gc->alu, | 		    gc->alu, | ||||||
| 		    gc->planemask, | 		    gc->planemask, | ||||||
| 		    gc->patOrg.x - dst_pixmap->screen_y, | 		    gc->patOrg.x, | ||||||
| 		    gc->patOrg.y - dst_pixmap->screen_y); | 		    gc->patOrg.y); | ||||||
| 	break; | 	break; | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -55,6 +55,7 @@ glamor_get_spans(DrawablePtr drawable, | ||||||
|     GLenum format, type; |     GLenum format, type; | ||||||
|     int i, j; |     int i, j; | ||||||
|     uint8_t *temp_dst = NULL, *readpixels_dst = (uint8_t *)dst; |     uint8_t *temp_dst = NULL, *readpixels_dst = (uint8_t *)dst; | ||||||
|  |     int x_off, y_off; | ||||||
| 
 | 
 | ||||||
|     goto fail; |     goto fail; | ||||||
| 
 | 
 | ||||||
|  | @ -86,9 +87,11 @@ glamor_get_spans(DrawablePtr drawable, | ||||||
|     if (!glamor_set_destination_pixmap(pixmap)) |     if (!glamor_set_destination_pixmap(pixmap)) | ||||||
| 	goto fail; | 	goto fail; | ||||||
| 
 | 
 | ||||||
|  |     glamor_get_drawable_deltas(drawable, pixmap, &x_off, &y_off); | ||||||
|  | 
 | ||||||
|     for (i = 0; i < count; i++) { |     for (i = 0; i < count; i++) { | ||||||
| 	glReadPixels(points[i].x - pixmap->screen_x, | 	glReadPixels(points[i].x + x_off, | ||||||
| 		     points[i].y - pixmap->screen_y, | 		     points[i].y + y_off, | ||||||
| 		     widths[i], | 		     widths[i], | ||||||
| 		     1, | 		     1, | ||||||
| 		     format, type, | 		     format, type, | ||||||
|  |  | ||||||
|  | @ -200,25 +200,25 @@ glamor_fallback(char *format, ...) | ||||||
| static inline float | static inline float | ||||||
| v_from_x_coord_x(PixmapPtr pixmap, int x) | v_from_x_coord_x(PixmapPtr pixmap, int x) | ||||||
| { | { | ||||||
|     return (float)(x - pixmap->screen_x) / pixmap->drawable.width * 2.0 - 1.0; |     return (float)x / pixmap->drawable.width * 2.0 - 1.0; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static inline float | static inline float | ||||||
| v_from_x_coord_y(PixmapPtr pixmap, int y) | v_from_x_coord_y(PixmapPtr pixmap, int y) | ||||||
| { | { | ||||||
|     return (float)(y - pixmap->screen_y) / pixmap->drawable.height * -2.0 + 1.0; |     return (float)y / pixmap->drawable.height * -2.0 + 1.0; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static inline float | static inline float | ||||||
| t_from_x_coord_x(PixmapPtr pixmap, int x) | t_from_x_coord_x(PixmapPtr pixmap, int x) | ||||||
| { | { | ||||||
|     return (float)(x - pixmap->screen_x) / pixmap->drawable.width; |     return (float)x / pixmap->drawable.width; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static inline float | static inline float | ||||||
| t_from_x_coord_y(PixmapPtr pixmap, int y) | t_from_x_coord_y(PixmapPtr pixmap, int y) | ||||||
| { | { | ||||||
|     return 1.0 - (float)(y - pixmap->screen_y) / pixmap->drawable.height; |     return 1.0 - (float)y / pixmap->drawable.height; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /* glamor.c */ | /* glamor.c */ | ||||||
|  | @ -254,6 +254,8 @@ Bool glamor_prepare_access_gc(GCPtr gc); | ||||||
| void glamor_finish_access_gc(GCPtr gc); | void glamor_finish_access_gc(GCPtr gc); | ||||||
| void glamor_init_finish_access_shaders(ScreenPtr screen); | void glamor_init_finish_access_shaders(ScreenPtr screen); | ||||||
| const Bool glamor_get_drawable_location(const DrawablePtr drawable); | const Bool glamor_get_drawable_location(const DrawablePtr drawable); | ||||||
|  | void glamor_get_drawable_deltas(DrawablePtr drawable, PixmapPtr pixmap, | ||||||
|  | 				int *x, int *y); | ||||||
| Bool glamor_create_gc(GCPtr gc); | Bool glamor_create_gc(GCPtr gc); | ||||||
| void glamor_stipple(PixmapPtr pixmap, PixmapPtr stipple, | void glamor_stipple(PixmapPtr pixmap, PixmapPtr stipple, | ||||||
| 		    int x, int y, int width, int height, | 		    int x, int y, int width, int height, | ||||||
|  |  | ||||||
|  | @ -244,6 +244,7 @@ glamor_put_image(DrawablePtr drawable, GCPtr gc, int depth, int x, int y, | ||||||
|     int nbox; |     int nbox; | ||||||
|     int bpp = drawable->bitsPerPixel; |     int bpp = drawable->bitsPerPixel; | ||||||
|     int src_stride = PixmapBytePad(w, drawable->depth); |     int src_stride = PixmapBytePad(w, drawable->depth); | ||||||
|  |     int x_off, y_off; | ||||||
| 
 | 
 | ||||||
|     goto fail; |     goto fail; | ||||||
| 
 | 
 | ||||||
|  | @ -297,6 +298,8 @@ glamor_put_image(DrawablePtr drawable, GCPtr gc, int depth, int x, int y, | ||||||
|     x += drawable->x; |     x += drawable->x; | ||||||
|     y += drawable->y; |     y += drawable->y; | ||||||
| 
 | 
 | ||||||
|  |     glamor_get_drawable_deltas(drawable, pixmap, &x_off, &y_off); | ||||||
|  | 
 | ||||||
|     glPixelStorei(GL_UNPACK_ALIGNMENT, 1); |     glPixelStorei(GL_UNPACK_ALIGNMENT, 1); | ||||||
|     glPixelStorei(GL_UNPACK_ROW_LENGTH, src_stride * 8 / bpp); |     glPixelStorei(GL_UNPACK_ROW_LENGTH, src_stride * 8 / bpp); | ||||||
|     if (bpp == 1) |     if (bpp == 1) | ||||||
|  | @ -325,7 +328,7 @@ glamor_put_image(DrawablePtr drawable, GCPtr gc, int depth, int x, int y, | ||||||
| 	    continue; | 	    continue; | ||||||
| 
 | 
 | ||||||
| 	src = bits + (y1 - y) * src_stride + (x1 - x) * (bpp / 8); | 	src = bits + (y1 - y) * src_stride + (x1 - x) * (bpp / 8); | ||||||
| 	glRasterPos2i(x1 - pixmap->screen_x, y1 - pixmap->screen_y); | 	glRasterPos2i(x1 + x_off, y1 + y_off); | ||||||
| 	glDrawPixels(x2 - x1, | 	glDrawPixels(x2 - x1, | ||||||
| 		     y2 - y1, | 		     y2 - y1, | ||||||
| 		     format, type, | 		     format, type, | ||||||
|  |  | ||||||
|  | @ -533,6 +533,7 @@ glamor_composite_with_shader(CARD8 op, | ||||||
|     float vertices[4][2], source_texcoords[4][2], mask_texcoords[4][2]; |     float vertices[4][2], source_texcoords[4][2], mask_texcoords[4][2]; | ||||||
|     int i; |     int i; | ||||||
|     BoxPtr box; |     BoxPtr box; | ||||||
|  |     int dst_x_off, dst_y_off; | ||||||
| 
 | 
 | ||||||
|     memset(&key, 0, sizeof(key)); |     memset(&key, 0, sizeof(key)); | ||||||
|     if (!source->pDrawable) { |     if (!source->pDrawable) { | ||||||
|  | @ -673,16 +674,33 @@ glamor_composite_with_shader(CARD8 op, | ||||||
| 	glEnableClientState(GL_TEXTURE_COORD_ARRAY); | 	glEnableClientState(GL_TEXTURE_COORD_ARRAY); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     glamor_get_drawable_deltas(dest->pDrawable, dest_pixmap, | ||||||
|  | 			       &dst_x_off, &dst_y_off); | ||||||
|  |     if (source_pixmap) { | ||||||
|  | 	int dx, dy; | ||||||
|  | 
 | ||||||
|  | 	glamor_get_drawable_deltas(source->pDrawable, source_pixmap, &dx, &dy); | ||||||
|  | 	x_source += dx; | ||||||
|  | 	y_source += dy; | ||||||
|  |     } | ||||||
|  |     if (mask_pixmap) { | ||||||
|  | 	int dx, dy; | ||||||
|  | 
 | ||||||
|  | 	glamor_get_drawable_deltas(mask->pDrawable, mask_pixmap, &dx, &dy); | ||||||
|  | 	x_mask += dx; | ||||||
|  | 	y_mask += dy; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     box = REGION_RECTS(®ion); |     box = REGION_RECTS(®ion); | ||||||
|     for (i = 0; i < REGION_NUM_RECTS(®ion); i++) { |     for (i = 0; i < REGION_NUM_RECTS(®ion); i++) { | ||||||
| 	vertices[0][0] = v_from_x_coord_x(dest_pixmap, box[i].x1); | 	vertices[0][0] = v_from_x_coord_x(dest_pixmap, box[i].x1 + dst_x_off); | ||||||
| 	vertices[0][1] = v_from_x_coord_y(dest_pixmap, box[i].y1); | 	vertices[0][1] = v_from_x_coord_y(dest_pixmap, box[i].y1 + dst_y_off); | ||||||
| 	vertices[1][0] = v_from_x_coord_x(dest_pixmap, box[i].x2); | 	vertices[1][0] = v_from_x_coord_x(dest_pixmap, box[i].x2 + dst_x_off); | ||||||
| 	vertices[1][1] = v_from_x_coord_y(dest_pixmap, box[i].y1); | 	vertices[1][1] = v_from_x_coord_y(dest_pixmap, box[i].y1 + dst_y_off); | ||||||
| 	vertices[2][0] = v_from_x_coord_x(dest_pixmap, box[i].x2); | 	vertices[2][0] = v_from_x_coord_x(dest_pixmap, box[i].x2 + dst_x_off); | ||||||
| 	vertices[2][1] = v_from_x_coord_y(dest_pixmap, box[i].y2); | 	vertices[2][1] = v_from_x_coord_y(dest_pixmap, box[i].y2 + dst_y_off); | ||||||
| 	vertices[3][0] = v_from_x_coord_x(dest_pixmap, box[i].x1); | 	vertices[3][0] = v_from_x_coord_x(dest_pixmap, box[i].x1 + dst_x_off); | ||||||
| 	vertices[3][1] = v_from_x_coord_y(dest_pixmap, box[i].y2); | 	vertices[3][1] = v_from_x_coord_y(dest_pixmap, box[i].y2 + dst_y_off); | ||||||
| 
 | 
 | ||||||
| 	if (key.source != SHADER_SOURCE_SOLID) { | 	if (key.source != SHADER_SOURCE_SOLID) { | ||||||
| 	    int tx1 = box[i].x1 + x_source - x_dest; | 	    int tx1 = box[i].x1 + x_source - x_dest; | ||||||
|  |  | ||||||
|  | @ -42,6 +42,7 @@ glamor_set_spans(DrawablePtr drawable, GCPtr gc, char *src, | ||||||
|     int wmax = 0; |     int wmax = 0; | ||||||
|     RegionPtr clip = fbGetCompositeClip(gc); |     RegionPtr clip = fbGetCompositeClip(gc); | ||||||
|     BoxRec *pbox; |     BoxRec *pbox; | ||||||
|  |     int x_off, y_off; | ||||||
| 
 | 
 | ||||||
|     goto fail; |     goto fail; | ||||||
| 
 | 
 | ||||||
|  | @ -82,6 +83,9 @@ glamor_set_spans(DrawablePtr drawable, GCPtr gc, char *src, | ||||||
|     glamor_set_alu(gc->alu); |     glamor_set_alu(gc->alu); | ||||||
|     if (!glamor_set_planemask(dest_pixmap, gc->planemask)) |     if (!glamor_set_planemask(dest_pixmap, gc->planemask)) | ||||||
| 	goto fail; | 	goto fail; | ||||||
|  | 
 | ||||||
|  |     glamor_get_drawable_deltas(drawable, dest_pixmap, &x_off, &y_off); | ||||||
|  | 
 | ||||||
|     for (i = 0; i < n; i++) { |     for (i = 0; i < n; i++) { | ||||||
| 	if (temp_src) { | 	if (temp_src) { | ||||||
| 	    for (j = 0; j < widths[i]; j++) { | 	    for (j = 0; j < widths[i]; j++) { | ||||||
|  | @ -98,12 +102,12 @@ glamor_set_spans(DrawablePtr drawable, GCPtr gc, char *src, | ||||||
| 	    if (pbox->y1 > points[i].y) | 	    if (pbox->y1 > points[i].y) | ||||||
| 		break; | 		break; | ||||||
| 	    glScissor(pbox->x1, | 	    glScissor(pbox->x1, | ||||||
| 		      points[i].y - dest_pixmap->screen_y, | 		      points[i].y + y_off, | ||||||
| 		      pbox->x2 - pbox->x1, | 		      pbox->x2 - pbox->x1, | ||||||
| 		      1); | 		      1); | ||||||
| 	    glEnable(GL_SCISSOR_TEST); | 	    glEnable(GL_SCISSOR_TEST); | ||||||
| 	    glRasterPos2i(points[i].x - dest_pixmap->screen_x, | 	    glRasterPos2i(points[i].x + x_off, | ||||||
| 			  points[i].y - dest_pixmap->screen_y); | 			  points[i].y + y_off); | ||||||
| 	    glDrawPixels(widths[i], | 	    glDrawPixels(widths[i], | ||||||
| 			 1, | 			 1, | ||||||
| 			 format, type, | 			 format, type, | ||||||
|  |  | ||||||
|  | @ -92,10 +92,10 @@ glamor_tile(PixmapPtr pixmap, PixmapPtr tile, | ||||||
|     int x2 = x + width; |     int x2 = x + width; | ||||||
|     int y1 = y; |     int y1 = y; | ||||||
|     int y2 = y + height; |     int y2 = y + height; | ||||||
|     int tile_x1 = tile_x - tile->screen_x; |     int tile_x1 = tile_x; | ||||||
|     int tile_x2 = tile_x - tile->screen_x + width; |     int tile_x2 = tile_x + width; | ||||||
|     int tile_y1 = tile_y - tile->screen_y; |     int tile_y1 = tile_y; | ||||||
|     int tile_y2 = tile_y - tile->screen_y + height; |     int tile_y2 = tile_y + height; | ||||||
|     glamor_pixmap_private *tile_priv = glamor_get_pixmap_private(tile); |     glamor_pixmap_private *tile_priv = glamor_get_pixmap_private(tile); | ||||||
| 
 | 
 | ||||||
|     if (glamor_priv->tile_prog == 0) { |     if (glamor_priv->tile_prog == 0) { | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue