glamor: Give setspans the same format support as getspans.
This commit is contained in:
parent
d9eef95c74
commit
c70ce72fd7
|
@ -37,13 +37,30 @@ glamor_set_spans(DrawablePtr drawable, GCPtr gc, char *src,
|
||||||
{
|
{
|
||||||
PixmapPtr dest_pixmap = glamor_get_drawable_pixmap(drawable);
|
PixmapPtr dest_pixmap = glamor_get_drawable_pixmap(drawable);
|
||||||
GLenum format, type;
|
GLenum format, type;
|
||||||
int i;
|
uint8_t *temp_src = NULL, *drawpixels_src = (uint8_t *)src;
|
||||||
|
int i, j;
|
||||||
|
int wmax = 0;
|
||||||
|
|
||||||
|
for (i = 0 ; i < n; i++) {
|
||||||
|
if (wmax < widths[i])
|
||||||
|
wmax = widths[i];
|
||||||
|
}
|
||||||
|
|
||||||
switch (drawable->depth) {
|
switch (drawable->depth) {
|
||||||
|
case 1:
|
||||||
|
temp_src = xalloc(wmax);
|
||||||
|
format = GL_ALPHA;
|
||||||
|
type = GL_UNSIGNED_BYTE;
|
||||||
|
drawpixels_src = temp_src;
|
||||||
|
break;
|
||||||
case 8:
|
case 8:
|
||||||
format = GL_ALPHA;
|
format = GL_ALPHA;
|
||||||
type = GL_UNSIGNED_BYTE;
|
type = GL_UNSIGNED_BYTE;
|
||||||
|
break;
|
||||||
case 24:
|
case 24:
|
||||||
|
format = GL_RGB;
|
||||||
|
type = GL_UNSIGNED_BYTE;
|
||||||
|
break;
|
||||||
case 32:
|
case 32:
|
||||||
format = GL_BGRA;
|
format = GL_BGRA;
|
||||||
type = GL_UNSIGNED_INT_8_8_8_8_REV;
|
type = GL_UNSIGNED_INT_8_8_8_8_REV;
|
||||||
|
@ -56,12 +73,26 @@ glamor_set_spans(DrawablePtr drawable, GCPtr gc, char *src,
|
||||||
if (!glamor_set_destination_pixmap(dest_pixmap))
|
if (!glamor_set_destination_pixmap(dest_pixmap))
|
||||||
return;
|
return;
|
||||||
for (i = 0; i < n; i++) {
|
for (i = 0; i < n; i++) {
|
||||||
|
if (temp_src) {
|
||||||
|
for (j = 0; j < widths[i]; j++) {
|
||||||
|
if (src[j / 8] & (1 << (j % 8)))
|
||||||
|
temp_src[j] = 0xff;
|
||||||
|
else
|
||||||
|
temp_src[j] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
glRasterPos2i(points[i].x - dest_pixmap->screen_x,
|
glRasterPos2i(points[i].x - dest_pixmap->screen_x,
|
||||||
points[i].y - dest_pixmap->screen_y);
|
points[i].y - dest_pixmap->screen_y);
|
||||||
glDrawPixels(widths[i],
|
glDrawPixels(widths[i],
|
||||||
1,
|
1,
|
||||||
format, type,
|
format, type,
|
||||||
src);
|
drawpixels_src);
|
||||||
src += PixmapBytePad(widths[i], drawable->depth);
|
if (temp_src) {
|
||||||
|
src += PixmapBytePad(widths[i], drawable->depth);
|
||||||
|
} else {
|
||||||
|
drawpixels_src += PixmapBytePad(widths[i], drawable->depth);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
xfree(temp_src);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user