*/
#include "glxheader.h"
-#include "main/colormac.h"
#include "main/context.h"
-#include "main/depth.h"
-#include "main/drawpix.h"
-#include "main/extensions.h"
#include "main/macros.h"
#include "main/imports.h"
#include "main/mtypes.h"
-#include "main/state.h"
#include "xmesaP.h"
#include "swrast/swrast.h"
* generate BadMatch errors if the drawable isn't mapped.
*/
-#ifndef XFree86Server
static int caught_xgetimage_error = 0;
static int (*old_xerror_handler)( XMesaDisplay *dpy, XErrorEvent *ev );
static unsigned long xgetimage_serial;
/* return 0=no error, 1=error caught */
return caught_xgetimage_error;
}
-#endif
/*
XMesaDrawable d, int x, int y )
{
unsigned long p;
-#ifndef XFree86Server
XMesaImage *pixel = NULL;
int error;
if (pixel) {
XMesaDestroyImage( pixel );
}
-#else
- (*dpy->GetImage)(d, x, y, 1, 1, ZPixmap, ~0L, (pointer)&p);
-#endif
return p;
}
*
* The function naming convention is:
*
- * [put|get]_[mono]_[row|values]_[format]_[pixmap|ximage]
+ * [put|get]_[row|values]_[format]_[pixmap|ximage]
*
* New functions optimized for specific cases can be added without too much
* trouble. An example might be the 24-bit TrueColor mode 8A8R8G8B which is
#define PUT_ROW_ARGS \
- GLcontext *ctx, \
+ struct gl_context *ctx, \
struct gl_renderbuffer *rb, \
GLuint n, GLint x, GLint y, \
const void *values, const GLubyte mask[]
#define RGB_SPAN_ARGS \
- GLcontext *ctx, \
+ struct gl_context *ctx, \
struct gl_renderbuffer *rb, \
GLuint n, GLint x, GLint y, \
const void *values, const GLubyte mask[]
}
-/*
- * Write a span of PF_TRUECOLOR pixels to a pixmap.
- */
-static void put_row_rgb_TRUECOLOR_pixmap( RGB_SPAN_ARGS )
-{
- const GLubyte (*rgb)[3] = (const GLubyte (*)[3]) values;
- const XMesaContext xmesa = XMESA_CONTEXT(ctx);
- GET_XRB(xrb);
- XMesaDisplay *dpy = xmesa->xm_visual->display;
- XMesaDrawable buffer = xrb->drawable;
- XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
- register GLuint i;
- y = YFLIP(xrb, y);
- if (mask) {
- for (i=0;i<n;i++,x++) {
- if (mask[i]) {
- unsigned long p;
- PACK_TRUECOLOR( p, rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP] );
- XMesaSetForeground( dpy, gc, p );
- XMesaDrawPoint( dpy, buffer, gc, (int) x, (int) y );
- }
- }
- }
- else {
- /* draw all pixels */
- XMesaImage *rowimg = XMESA_BUFFER(ctx->DrawBuffer)->rowimage;
- for (i=0;i<n;i++) {
- unsigned long p;
- PACK_TRUECOLOR( p, rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP] );
- XMesaPutPixel( rowimg, i, 0, p );
- }
- XMesaPutImage( dpy, buffer, gc, rowimg, 0, 0, x, y, n, 1 );
- }
-}
-
/*
* Write a span of PF_TRUEDITHER pixels to a pixmap.
*/
}
-/*
- * Write a span of PF_TRUEDITHER pixels to a pixmap (no alpha).
- */
-static void put_row_rgb_TRUEDITHER_pixmap( RGB_SPAN_ARGS )
-{
- const GLubyte (*rgb)[3] = (const GLubyte (*)[3]) values;
- const XMesaContext xmesa = XMESA_CONTEXT(ctx);
- GET_XRB(xrb);
- XMesaDisplay *dpy = xmesa->xm_visual->display;
- XMesaDrawable buffer = xrb->drawable;
- XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
- register GLuint i;
- y = YFLIP(xrb, y);
- if (mask) {
- for (i=0;i<n;i++,x++) {
- if (mask[i]) {
- unsigned long p;
- PACK_TRUEDITHER(p, x, y, rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP]);
- XMesaSetForeground( dpy, gc, p );
- XMesaDrawPoint( dpy, buffer, gc, (int) x, (int) y );
- }
- }
- }
- else {
- XMesaImage *rowimg = XMESA_BUFFER(ctx->DrawBuffer)->rowimage;
- for (i=0;i<n;i++) {
- unsigned long p;
- PACK_TRUEDITHER(p, x+i, y, rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP]);
- XMesaPutPixel( rowimg, i, 0, p );
- }
- XMesaPutImage( dpy, buffer, gc, rowimg, 0, 0, x, y, n, 1 );
- }
-}
-
-
/*
* Write a span of PF_8A8B8G8R pixels to a pixmap.
*/
}
-/*
- * Write a span of PF_8A8B8G8R pixels to a pixmap (no alpha).
- */
-static void put_row_rgb_8A8B8G8R_pixmap( RGB_SPAN_ARGS )
-{
- const GLubyte (*rgb)[3] = (const GLubyte (*)[3]) values;
- const XMesaContext xmesa = XMESA_CONTEXT(ctx);
- GET_XRB(xrb);
- XMesaDisplay *dpy = xmesa->xm_visual->display;
- XMesaDrawable buffer = xrb->drawable;
- XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
- register GLuint i;
- y = YFLIP(xrb, y);
- if (mask) {
- for (i=0;i<n;i++,x++) {
- if (mask[i]) {
- XMesaSetForeground( dpy, gc,
- PACK_8B8G8R(rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP]) );
- XMesaDrawPoint( dpy, buffer, gc, (int) x, (int) y );
- }
- }
- }
- else {
- /* draw all pixels */
- XMesaImage *rowimg = XMESA_BUFFER(ctx->DrawBuffer)->rowimage;
- register GLuint *ptr4 = (GLuint *) rowimg->data;
- for (i=0;i<n;i++) {
- *ptr4++ = PACK_8B8G8R(rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP]);
- }
- XMesaPutImage( dpy, buffer, gc, rowimg, 0, 0, x, y, n, 1 );
- }
-}
-
/*
* Write a span of PF_8A8R8G8B pixels to a pixmap.
*/
}
-/*
- * Write a span of PF_8A8R8G8B pixels to a pixmap (no alpha).
- */
-static void put_row_rgb_8A8R8G8B_pixmap( RGB_SPAN_ARGS )
-{
- const GLubyte (*rgb)[3] = (const GLubyte (*)[3]) values;
- const XMesaContext xmesa = XMESA_CONTEXT(ctx);
- GET_XRB(xrb);
- XMesaDisplay *dpy = xmesa->xm_visual->display;
- XMesaDrawable buffer = xrb->drawable;
- XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
- register GLuint i;
- y = YFLIP(xrb, y);
- if (mask) {
- for (i=0;i<n;i++,x++) {
- if (mask[i]) {
- XMesaSetForeground( dpy, gc,
- PACK_8R8G8B(rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP]) );
- XMesaDrawPoint( dpy, buffer, gc, (int) x, (int) y );
- }
- }
- }
- else {
- /* draw all pixels */
- XMesaImage *rowimg = XMESA_BUFFER(ctx->DrawBuffer)->rowimage;
- register GLuint *ptr4 = (GLuint *) rowimg->data;
- for (i=0;i<n;i++) {
- *ptr4++ = PACK_8R8G8B(rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP]);
- }
- XMesaPutImage( dpy, buffer, gc, rowimg, 0, 0, x, y, n, 1 );
- }
-}
/*
* Write a span of PF_8R8G8B pixels to a pixmap.
if (mask) {
for (i=0;i<n;i++,x++) {
if (mask[i]) {
+#if 1
+ /*
+ * XXX Something funny is going on here.
+ * If we're drawing into a window that uses a depth 32 TrueColor
+ * visual, we see the right pixels on screen, but when we read
+ * them back with XGetImage() we get random colors.
+ * The alternative code below which uses XPutImage() instead
+ * seems to mostly fix the problem, but not always.
+ * We don't normally create windows with this visual, but glean
+ * does and we're seeing some failures there.
+ */
XMesaSetForeground( dpy, gc, PACK_8R8G8B( rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] ));
XMesaDrawPoint( dpy, buffer, gc, (int) x, (int) y );
+#else
+ /* This code works more often, but not always */
+ XMesaImage *rowimg = XMESA_BUFFER(ctx->DrawBuffer)->rowimage;
+ GLuint *ptr4 = (GLuint *) rowimg->data;
+ *ptr4 = PACK_8R8G8B( rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] );
+ XMesaPutImage( dpy, buffer, gc, rowimg, 0, 0, x, y, 1, 1 );
+#endif
}
}
}
}
+
/*
- * Write a span of PF_8R8G8B pixels to a pixmap (no alpha).
+ * Write a span of PF_5R6G5B pixels to a pixmap.
*/
-static void put_row_rgb_8R8G8B_pixmap( RGB_SPAN_ARGS )
+static void put_row_5R6G5B_pixmap( PUT_ROW_ARGS )
{
- const GLubyte (*rgb)[3] = (const GLubyte (*)[3]) values;
+ const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
const XMesaContext xmesa = XMESA_CONTEXT(ctx);
GET_XRB(xrb);
XMesaDisplay *dpy = xmesa->xm_visual->display;
if (mask) {
for (i=0;i<n;i++,x++) {
if (mask[i]) {
- XMesaSetForeground( dpy, gc, PACK_8R8G8B( rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP] ));
+ XMesaSetForeground( dpy, gc, PACK_5R6G5B( rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] ));
XMesaDrawPoint( dpy, buffer, gc, (int) x, (int) y );
}
}
else {
/* draw all pixels */
XMesaImage *rowimg = XMESA_BUFFER(ctx->DrawBuffer)->rowimage;
- register GLuint *ptr4 = (GLuint *) rowimg->data;
+ register GLushort *ptr2 = (GLushort *) rowimg->data;
for (i=0;i<n;i++) {
- *ptr4++ = PACK_8R8G8B( rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP] );
+ ptr2[i] = PACK_5R6G5B( rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] );
}
XMesaPutImage( dpy, buffer, gc, rowimg, 0, 0, x, y, n, 1 );
}
}
+
/*
- * Write a span of PF_8R8G8B24 pixels to a pixmap (no alpha).
+ * Write a span of PF_DITHER_5R6G5B pixels to a pixmap.
*/
-static void put_row_rgb_8R8G8B24_pixmap( RGB_SPAN_ARGS )
+static void put_row_DITHER_5R6G5B_pixmap( PUT_ROW_ARGS )
{
- const GLubyte (*rgb)[3] = (const GLubyte (*)[3]) values;
+ const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
const XMesaContext xmesa = XMESA_CONTEXT(ctx);
GET_XRB(xrb);
XMesaDisplay *dpy = xmesa->xm_visual->display;
XMesaDrawable buffer = xrb->drawable;
XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
+ register GLuint i;
y = YFLIP(xrb, y);
if (mask) {
- register GLuint i;
for (i=0;i<n;i++,x++) {
if (mask[i]) {
- XMesaSetForeground( dpy, gc,
- PACK_8R8G8B( rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP] ));
+ unsigned long p;
+ PACK_TRUEDITHER(p, x, y, rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP]);
+ XMesaSetForeground( dpy, gc, p );
XMesaDrawPoint( dpy, buffer, gc, (int) x, (int) y );
}
}
else {
/* draw all pixels */
XMesaImage *rowimg = XMESA_BUFFER(ctx->DrawBuffer)->rowimage;
- register GLuint *ptr4 = (GLuint *) rowimg->data;
- register GLuint pixel;
- static const GLuint shift[4] = {0, 8, 16, 24};
- unsigned w = n;
- register GLuint i = 0;
- while (w > 3) {
- pixel = 0;
- pixel |= rgb[i][BCOMP]/* << shift[0]*/;
- pixel |= rgb[i][GCOMP] << shift[1];
- pixel |= rgb[i++][RCOMP] << shift[2];
- pixel |= rgb[i][BCOMP] <<shift[3];
- *ptr4++ = pixel;
-
- pixel = 0;
- pixel |= rgb[i][GCOMP]/* << shift[0]*/;
- pixel |= rgb[i++][RCOMP] << shift[1];
- pixel |= rgb[i][BCOMP] << shift[2];
- pixel |= rgb[i][GCOMP] << shift[3];
- *ptr4++ = pixel;
-
- pixel = 0;
- pixel |= rgb[i++][RCOMP]/* << shift[0]*/;
- pixel |= rgb[i][BCOMP] << shift[1];
- pixel |= rgb[i][GCOMP] << shift[2];
- pixel |= rgb[i++][RCOMP] << shift[3];
- *ptr4++ = pixel;
- w -= 4;
- }
- switch (w) {
- case 3:
- pixel = 0;
- pixel |= rgb[i][BCOMP]/* << shift[0]*/;
- pixel |= rgb[i][GCOMP] << shift[1];
- pixel |= rgb[i++][RCOMP] << shift[2];
- pixel |= rgb[i][BCOMP] << shift[3];
- *ptr4++ = pixel;
- pixel = 0;
- pixel |= rgb[i][GCOMP]/* << shift[0]*/;
- pixel |= rgb[i++][RCOMP] << shift[1];
- pixel |= rgb[i][BCOMP] << shift[2];
- pixel |= rgb[i][GCOMP] << shift[3];
- *ptr4++ = pixel;
- pixel = *ptr4;
- pixel &= 0xffffff00;
- pixel |= rgb[i++][RCOMP]/* << shift[0]*/;
- *ptr4++ = pixel;
- break;
- case 2:
- pixel = 0;
- pixel |= rgb[i][BCOMP]/* << shift[0]*/;
- pixel |= rgb[i][GCOMP] << shift[1];
- pixel |= rgb[i++][RCOMP] << shift[2];
- pixel |= rgb[i][BCOMP] << shift[3];
- *ptr4++ = pixel;
- pixel = *ptr4;
- pixel &= 0xffff0000;
- pixel |= rgb[i][GCOMP]/* << shift[0]*/;
- pixel |= rgb[i++][RCOMP] << shift[1];
- *ptr4++ = pixel;
- break;
- case 1:
- pixel = *ptr4;
- pixel &= 0xff000000;
- pixel |= rgb[i][BCOMP]/* << shift[0]*/;
- pixel |= rgb[i][GCOMP] << shift[1];
- pixel |= rgb[i++][RCOMP] << shift[2];
- *ptr4++ = pixel;
- break;
- case 0:
- break;
+ register GLushort *ptr2 = (GLushort *) rowimg->data;
+ for (i=0;i<n;i++) {
+ PACK_TRUEDITHER( ptr2[i], x+i, y, rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] );
}
XMesaPutImage( dpy, buffer, gc, rowimg, 0, 0, x, y, n, 1 );
}
/*
- * Write a span of PF_5R6G5B pixels to a pixmap.
+ * Write a span of PF_TRUECOLOR pixels to an XImage.
*/
-static void put_row_5R6G5B_pixmap( PUT_ROW_ARGS )
+static void put_row_TRUECOLOR_ximage( PUT_ROW_ARGS )
{
const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
const XMesaContext xmesa = XMESA_CONTEXT(ctx);
GET_XRB(xrb);
- XMesaDisplay *dpy = xmesa->xm_visual->display;
- XMesaDrawable buffer = xrb->drawable;
- XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
+ XMesaImage *img = xrb->ximage;
register GLuint i;
y = YFLIP(xrb, y);
if (mask) {
for (i=0;i<n;i++,x++) {
if (mask[i]) {
- XMesaSetForeground( dpy, gc, PACK_5R6G5B( rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] ));
- XMesaDrawPoint( dpy, buffer, gc, (int) x, (int) y );
+ unsigned long p;
+ PACK_TRUECOLOR( p, rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] );
+ XMesaPutPixel( img, x, y, p );
}
}
}
else {
/* draw all pixels */
- XMesaImage *rowimg = XMESA_BUFFER(ctx->DrawBuffer)->rowimage;
- register GLushort *ptr2 = (GLushort *) rowimg->data;
- for (i=0;i<n;i++) {
- ptr2[i] = PACK_5R6G5B( rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] );
+ for (i=0;i<n;i++,x++) {
+ unsigned long p;
+ PACK_TRUECOLOR( p, rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] );
+ XMesaPutPixel( img, x, y, p );
}
- XMesaPutImage( dpy, buffer, gc, rowimg, 0, 0, x, y, n, 1 );
}
}
/*
- * Write a span of PF_DITHER_5R6G5B pixels to a pixmap.
+ * Write a span of PF_TRUEDITHER pixels to an XImage.
*/
-static void put_row_DITHER_5R6G5B_pixmap( PUT_ROW_ARGS )
+static void put_row_TRUEDITHER_ximage( PUT_ROW_ARGS )
{
const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
const XMesaContext xmesa = XMESA_CONTEXT(ctx);
GET_XRB(xrb);
- XMesaDisplay *dpy = xmesa->xm_visual->display;
- XMesaDrawable buffer = xrb->drawable;
- XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
+ XMesaImage *img = xrb->ximage;
register GLuint i;
y = YFLIP(xrb, y);
if (mask) {
if (mask[i]) {
unsigned long p;
PACK_TRUEDITHER(p, x, y, rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP]);
- XMesaSetForeground( dpy, gc, p );
- XMesaDrawPoint( dpy, buffer, gc, (int) x, (int) y );
+ XMesaPutPixel( img, x, y, p );
}
}
}
else {
/* draw all pixels */
- XMesaImage *rowimg = XMESA_BUFFER(ctx->DrawBuffer)->rowimage;
- register GLushort *ptr2 = (GLushort *) rowimg->data;
- for (i=0;i<n;i++) {
- PACK_TRUEDITHER( ptr2[i], x+i, y, rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] );
+ for (i=0;i<n;i++,x++) {
+ unsigned long p;
+ PACK_TRUEDITHER(p, x, y, rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP]);
+ XMesaPutPixel( img, x, y, p );
}
- XMesaPutImage( dpy, buffer, gc, rowimg, 0, 0, x, y, n, 1 );
}
}
/*
- * Write a span of PF_5R6G5B pixels to a pixmap (no alpha).
+ * Write a span of PF_8A8B8G8R-format pixels to an ximage.
*/
-static void put_row_rgb_5R6G5B_pixmap( RGB_SPAN_ARGS )
+static void put_row_8A8B8G8R_ximage( PUT_ROW_ARGS )
{
- const GLubyte (*rgb)[3] = (const GLubyte (*)[3]) values;
- const XMesaContext xmesa = XMESA_CONTEXT(ctx);
+ const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
GET_XRB(xrb);
- XMesaDisplay *dpy = xmesa->xm_visual->display;
- XMesaDrawable buffer = xrb->drawable;
- XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
register GLuint i;
- y = YFLIP(xrb, y);
+ register GLuint *ptr = PIXEL_ADDR4(xrb, x, y);
+ (void) ctx;
if (mask) {
- for (i=0;i<n;i++,x++) {
+ for (i=0;i<n;i++) {
if (mask[i]) {
- XMesaSetForeground( dpy, gc, PACK_5R6G5B( rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP] ));
- XMesaDrawPoint( dpy, buffer, gc, (int) x, (int) y );
+ ptr[i] = PACK_8A8B8G8R( rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP], rgba[i][ACOMP] );
}
}
}
else {
/* draw all pixels */
- XMesaImage *rowimg = XMESA_BUFFER(ctx->DrawBuffer)->rowimage;
- register GLushort *ptr2 = (GLushort *) rowimg->data;
for (i=0;i<n;i++) {
- ptr2[i] = PACK_5R6G5B( rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP] );
+ ptr[i] = PACK_8A8B8G8R( rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP], rgba[i][ACOMP] );
}
- XMesaPutImage( dpy, buffer, gc, rowimg, 0, 0, x, y, n, 1 );
}
}
/*
- * Write a span of PF_DITHER_5R6G5B pixels to a pixmap (no alpha).
+ * Write a span of PF_8A8R8G8B-format pixels to an ximage.
*/
-static void put_row_rgb_DITHER_5R6G5B_pixmap( RGB_SPAN_ARGS )
+static void put_row_8A8R8G8B_ximage( PUT_ROW_ARGS )
{
- const GLubyte (*rgb)[3] = (const GLubyte (*)[3]) values;
- const XMesaContext xmesa = XMESA_CONTEXT(ctx);
+ const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
GET_XRB(xrb);
- XMesaDisplay *dpy = xmesa->xm_visual->display;
- XMesaDrawable buffer = xrb->drawable;
- XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
register GLuint i;
- y = YFLIP(xrb, y);
+ register GLuint *ptr = PIXEL_ADDR4(xrb, x, y);
if (mask) {
- for (i=0;i<n;i++,x++) {
+ for (i=0;i<n;i++) {
if (mask[i]) {
- unsigned long p;
- PACK_TRUEDITHER(p, x, y, rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP]);
- XMesaSetForeground( dpy, gc, p );
- XMesaDrawPoint( dpy, buffer, gc, (int) x, (int) y );
+ ptr[i] = PACK_8A8R8G8B( rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP], rgba[i][ACOMP] );
}
}
}
else {
/* draw all pixels */
- XMesaImage *rowimg = XMESA_BUFFER(ctx->DrawBuffer)->rowimage;
- register GLushort *ptr2 = (GLushort *) rowimg->data;
for (i=0;i<n;i++) {
- PACK_TRUEDITHER( ptr2[i], x+i, y, rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP] );
+ ptr[i] = PACK_8A8R8G8B( rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP], rgba[i][ACOMP] );
}
- XMesaPutImage( dpy, buffer, gc, rowimg, 0, 0, x, y, n, 1 );
}
}
/*
- * Write a span of PF_DITHER pixels to a pixmap.
+ * Write a span of PF_8R8G8B-format pixels to an ximage.
*/
-static void put_row_DITHER_pixmap( PUT_ROW_ARGS )
+static void put_row_8R8G8B_ximage( PUT_ROW_ARGS )
{
const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
- const XMesaContext xmesa = XMESA_CONTEXT(ctx);
GET_XRB(xrb);
- XMesaDisplay *dpy = xmesa->xm_visual->display;
- XMesaDrawable buffer = xrb->drawable;
- XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
- register GLuint i;
- XDITHER_SETUP(y);
- y = YFLIP(xrb, y);
- if (mask) {
- for (i=0;i<n;i++,x++) {
- if (mask[i]) {
- XMesaSetForeground( dpy, gc, XDITHER(x, rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP]) );
- XMesaDrawPoint( dpy, buffer, gc, (int) x, (int) y );
- }
- }
- }
- else {
- /* draw all pixels */
- XMesaImage *rowimg = XMESA_BUFFER(ctx->DrawBuffer)->rowimage;
- for (i=0;i<n;i++) {
- XMesaPutPixel( rowimg, i, 0, XDITHER(x+i, rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP]) );
- }
- XMesaPutImage( dpy, buffer, gc, rowimg, 0, 0, x, y, n, 1 );
- }
-}
-
-
-/*
- * Write a span of PF_DITHER pixels to a pixmap (no alpha).
- */
-static void put_row_rgb_DITHER_pixmap( RGB_SPAN_ARGS )
-{
- const GLubyte (*rgb)[3] = (const GLubyte (*)[3]) values;
- const XMesaContext xmesa = XMESA_CONTEXT(ctx);
- GET_XRB(xrb);
- XMesaDisplay *dpy = xmesa->xm_visual->display;
- XMesaDrawable buffer = xrb->drawable;
- XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
- register GLuint i;
- XDITHER_SETUP(y);
- y = YFLIP(xrb, y);
- if (mask) {
- for (i=0;i<n;i++,x++) {
- if (mask[i]) {
- XMesaSetForeground( dpy, gc, XDITHER(x, rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP]) );
- XMesaDrawPoint( dpy, buffer, gc, (int) x, (int) y );
- }
- }
- }
- else {
- /* draw all pixels */
- XMesaImage *rowimg = XMESA_BUFFER(ctx->DrawBuffer)->rowimage;
- for (i=0;i<n;i++) {
- XMesaPutPixel( rowimg, i, 0, XDITHER(x+i, rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP]) );
- }
- XMesaPutImage( dpy, buffer, gc, rowimg, 0, 0, x, y, n, 1 );
- }
-}
-
-
-/*
- * Write a span of PF_1BIT pixels to a pixmap.
- */
-static void put_row_1BIT_pixmap( PUT_ROW_ARGS )
-{
- const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
- const XMesaContext xmesa = XMESA_CONTEXT(ctx);
- GET_XRB(xrb);
- XMesaDisplay *dpy = xmesa->xm_visual->display;
- XMesaDrawable buffer = xrb->drawable;
- XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
register GLuint i;
- SETUP_1BIT;
- y = YFLIP(xrb, y);
+ register GLuint *ptr = PIXEL_ADDR4(xrb, x, y);
if (mask) {
- for (i=0;i<n;i++,x++) {
- if (mask[i]) {
- XMesaSetForeground( dpy, gc,
- DITHER_1BIT( x, y, rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] ) );
- XMesaDrawPoint( dpy, buffer, gc, (int) x, (int) y );
- }
- }
- }
- else {
- /* draw all pixels */
- XMesaImage *rowimg = XMESA_BUFFER(ctx->DrawBuffer)->rowimage;
for (i=0;i<n;i++) {
- XMesaPutPixel( rowimg, i, 0,
- DITHER_1BIT( x+i, y, rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] ) );
- }
- XMesaPutImage( dpy, buffer, gc, rowimg, 0, 0, x, y, n, 1 );
- }
-}
-
-
-/*
- * Write a span of PF_1BIT pixels to a pixmap (no alpha).
- */
-static void put_row_rgb_1BIT_pixmap( RGB_SPAN_ARGS )
-{
- const GLubyte (*rgb)[3] = (const GLubyte (*)[3]) values;
- const XMesaContext xmesa = XMESA_CONTEXT(ctx);
- GET_XRB(xrb);
- XMesaDisplay *dpy = xmesa->xm_visual->display;
- XMesaDrawable buffer = xrb->drawable;
- XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
- register GLuint i;
- SETUP_1BIT;
- y = YFLIP(xrb, y);
- if (mask) {
- for (i=0;i<n;i++,x++) {
if (mask[i]) {
- XMesaSetForeground( dpy, gc,
- DITHER_1BIT(x, y, rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP]) );
- XMesaDrawPoint( dpy, buffer, gc, (int) x, (int) y );
+ ptr[i] = PACK_8R8G8B(rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP]);
}
}
}
else {
- /* draw all pixels */
- XMesaImage *rowimg = XMESA_BUFFER(ctx->DrawBuffer)->rowimage;
for (i=0;i<n;i++) {
- XMesaPutPixel( rowimg, i, 0,
- DITHER_1BIT(x+i, y, rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP]) );
+ ptr[i] = PACK_8R8G8B(rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP]);
}
- XMesaPutImage( dpy, buffer, gc, rowimg, 0, 0, x, y, n, 1 );
}
}
/*
- * Write a span of PF_HPCR pixels to a pixmap.
+ * Write a span of PF_8R8G8B24-format pixels to an ximage.
*/
-static void put_row_HPCR_pixmap( PUT_ROW_ARGS )
+static void put_row_8R8G8B24_ximage( PUT_ROW_ARGS )
{
const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
- const XMesaContext xmesa = XMESA_CONTEXT(ctx);
GET_XRB(xrb);
- XMesaDisplay *dpy = xmesa->xm_visual->display;
- XMesaDrawable buffer = xrb->drawable;
- XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
register GLuint i;
- y = YFLIP(xrb, y);
+ register GLubyte *ptr = (GLubyte *) PIXEL_ADDR3(xrb, x, y );
if (mask) {
- for (i=0;i<n;i++,x++) {
- if (mask[i]) {
- XMesaSetForeground( dpy, gc,
- DITHER_HPCR( x, y, rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] ) );
- XMesaDrawPoint( dpy, buffer, gc, (int) x, (int) y );
- }
- }
- }
- else {
- XMesaImage *rowimg = XMESA_BUFFER(ctx->DrawBuffer)->rowimage;
- register GLubyte *ptr = (GLubyte *) XMESA_BUFFER(ctx->DrawBuffer)->rowimage->data;
for (i=0;i<n;i++) {
- ptr[i] = DITHER_HPCR( (x+i), y, rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] );
- }
- XMesaPutImage( dpy, buffer, gc, rowimg, 0, 0, x, y, n, 1 );
- }
-}
-
-
-/*
- * Write a span of PF_HPCR pixels to a pixmap (no alpha).
- */
-static void put_row_rgb_HPCR_pixmap( RGB_SPAN_ARGS )
-{
- const GLubyte (*rgb)[3] = (const GLubyte (*)[3]) values;
- const XMesaContext xmesa = XMESA_CONTEXT(ctx);
- GET_XRB(xrb);
- XMesaDisplay *dpy = xmesa->xm_visual->display;
- XMesaDrawable buffer = xrb->drawable;
- XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
- register GLuint i;
- y = YFLIP(xrb, y);
- if (mask) {
- for (i=0;i<n;i++,x++) {
if (mask[i]) {
- XMesaSetForeground( dpy, gc,
- DITHER_HPCR(x, y, rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP]) );
- XMesaDrawPoint( dpy, buffer, gc, (int) x, (int) y );
+ GLuint *ptr4 = (GLuint *) ptr;
+ register GLuint pixel = *ptr4;
+ switch (3 & (int)(ptr - (GLubyte*)ptr4)) {
+ case 0:
+ pixel &= 0xff000000;
+ pixel |= rgba[i][BCOMP];
+ pixel |= rgba[i][GCOMP] << 8;
+ pixel |= rgba[i][RCOMP] << 16;
+ *ptr4 = pixel;
+ break;
+ case 3:
+ pixel &= 0x00ffffff;
+ pixel |= rgba[i][BCOMP] << 24;
+ *ptr4++ = pixel;
+ pixel = *ptr4 & 0xffff0000;
+ pixel |= rgba[i][GCOMP];
+ pixel |= rgba[i][RCOMP] << 8;
+ *ptr4 = pixel;
+ break;
+ case 2:
+ pixel &= 0x0000ffff;
+ pixel |= rgba[i][BCOMP] << 16;
+ pixel |= rgba[i][GCOMP] << 24;
+ *ptr4++ = pixel;
+ pixel = *ptr4 & 0xffffff00;
+ pixel |= rgba[i][RCOMP];
+ *ptr4 = pixel;
+ break;
+ case 1:
+ pixel &= 0x000000ff;
+ pixel |= rgba[i][BCOMP] << 8;
+ pixel |= rgba[i][GCOMP] << 16;
+ pixel |= rgba[i][RCOMP] << 24;
+ *ptr4 = pixel;
+ break;
+ }
}
+ ptr += 3;
}
}
else {
- XMesaImage *rowimg = XMESA_BUFFER(ctx->DrawBuffer)->rowimage;
- register GLubyte *ptr = (GLubyte *) XMESA_BUFFER(ctx->DrawBuffer)->rowimage->data;
- for (i=0;i<n;i++) {
- ptr[i] = DITHER_HPCR( (x+i), y, rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP] );
- }
- XMesaPutImage( dpy, buffer, gc, rowimg, 0, 0, x, y, n, 1 );
- }
-}
-
-/*
- * Write a span of PF_LOOKUP pixels to a pixmap.
- */
-static void put_row_LOOKUP_pixmap( PUT_ROW_ARGS )
-{
- const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
- const XMesaContext xmesa = XMESA_CONTEXT(ctx);
- GET_XRB(xrb);
- XMesaDisplay *dpy = xmesa->xm_visual->display;
- XMesaDrawable buffer = xrb->drawable;
- XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
- register GLuint i;
- LOOKUP_SETUP;
- y = YFLIP(xrb, y);
- if (mask) {
- for (i=0;i<n;i++,x++) {
- if (mask[i]) {
- XMesaSetForeground( dpy, gc, LOOKUP( rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] ) );
- XMesaDrawPoint( dpy, buffer, gc, (int) x, (int) y );
- }
+ /* write all pixels */
+ int w = n;
+ GLuint *ptr4 = (GLuint *) ptr;
+ register GLuint pixel = *ptr4;
+ int index = (int)(ptr - (GLubyte *)ptr4);
+ register GLuint i = 0;
+ switch (index) {
+ case 0:
+ break;
+ case 1:
+ pixel &= 0x00ffffff;
+ pixel |= rgba[i][BCOMP] << 24;
+ *ptr4++ = pixel;
+ pixel = *ptr4 & 0xffff0000;
+ pixel |= rgba[i][GCOMP];
+ pixel |= rgba[i++][RCOMP] << 8;
+ *ptr4 = pixel;
+ if (0 == --w)
+ break;
+ case 2:
+ pixel &= 0x0000ffff;
+ pixel |= rgba[i][BCOMP] << 16;
+ pixel |= rgba[i][GCOMP] << 24;
+ *ptr4++ = pixel;
+ pixel = *ptr4 & 0xffffff00;
+ pixel |= rgba[i++][RCOMP];
+ *ptr4 = pixel;
+ if (0 == --w)
+ break;
+ case 3:
+ pixel &= 0x000000ff;
+ pixel |= rgba[i][BCOMP] << 8;
+ pixel |= rgba[i][GCOMP] << 16;
+ pixel |= rgba[i++][RCOMP] << 24;
+ *ptr4++ = pixel;
+ if (0 == --w)
+ break;
+ break;
}
- }
- else {
- XMesaImage *rowimg = XMESA_BUFFER(ctx->DrawBuffer)->rowimage;
- for (i=0;i<n;i++) {
- XMesaPutPixel( rowimg, i, 0, LOOKUP(rgba[i][RCOMP],rgba[i][GCOMP],rgba[i][BCOMP]) );
+ while (w > 3) {
+ pixel = rgba[i][BCOMP];
+ pixel |= rgba[i][GCOMP] << 8;
+ pixel |= rgba[i++][RCOMP] << 16;
+ pixel |= rgba[i][BCOMP] << 24;
+ *ptr4++ = pixel;
+ pixel = rgba[i][GCOMP];
+ pixel |= rgba[i++][RCOMP] << 8;
+ pixel |= rgba[i][BCOMP] << 16;
+ pixel |= rgba[i][GCOMP] << 24;
+ *ptr4++ = pixel;
+ pixel = rgba[i++][RCOMP];
+ pixel |= rgba[i][BCOMP] << 8;
+ pixel |= rgba[i][GCOMP] << 16;
+ pixel |= rgba[i++][RCOMP] << 24;
+ *ptr4++ = pixel;
+ w -= 4;
}
- XMesaPutImage( dpy, buffer, gc, rowimg, 0, 0, x, y, n, 1 );
- }
-}
-
-
-/*
- * Write a span of PF_LOOKUP pixels to a pixmap (no alpha).
- */
-static void put_row_rgb_LOOKUP_pixmap( RGB_SPAN_ARGS )
-{
- const GLubyte (*rgb)[3] = (const GLubyte (*)[3]) values;
- const XMesaContext xmesa = XMESA_CONTEXT(ctx);
- GET_XRB(xrb);
- XMesaDisplay *dpy = xmesa->xm_visual->display;
- XMesaDrawable buffer = xrb->drawable;
- XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
- register GLuint i;
- LOOKUP_SETUP;
- y = YFLIP(xrb, y);
- if (mask) {
- for (i=0;i<n;i++,x++) {
- if (mask[i]) {
- XMesaSetForeground( dpy, gc, LOOKUP( rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP] ) );
- XMesaDrawPoint( dpy, buffer, gc, (int) x, (int) y );
- }
- }
- }
- else {
- XMesaImage *rowimg = XMESA_BUFFER(ctx->DrawBuffer)->rowimage;
- for (i=0;i<n;i++) {
- XMesaPutPixel( rowimg, i, 0, LOOKUP(rgb[i][RCOMP],rgb[i][GCOMP],rgb[i][BCOMP]) );
- }
- XMesaPutImage( dpy, buffer, gc, rowimg, 0, 0, x, y, n, 1 );
- }
-}
-
-
-/*
- * Write a span of PF_GRAYSCALE pixels to a pixmap.
- */
-static void put_row_GRAYSCALE_pixmap( PUT_ROW_ARGS )
-{
- const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
- const XMesaContext xmesa = XMESA_CONTEXT(ctx);
- GET_XRB(xrb);
- XMesaDisplay *dpy = xmesa->xm_visual->display;
- XMesaDrawable buffer = xrb->drawable;
- XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
- register GLuint i;
- y = YFLIP(xrb, y);
- if (mask) {
- for (i=0;i<n;i++,x++) {
- if (mask[i]) {
- XMesaSetForeground( dpy, gc, GRAY_RGB( rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] ) );
- XMesaDrawPoint( dpy, buffer, gc, (int) x, (int) y );
- }
- }
- }
- else {
- XMesaImage *rowimg = XMESA_BUFFER(ctx->DrawBuffer)->rowimage;
- for (i=0;i<n;i++) {
- XMesaPutPixel( rowimg, i, 0, GRAY_RGB(rgba[i][RCOMP],rgba[i][GCOMP],rgba[i][BCOMP]) );
- }
- XMesaPutImage( dpy, buffer, gc, rowimg, 0, 0, x, y, n, 1 );
- }
-}
-
-
-/*
- * Write a span of PF_GRAYSCALE pixels to a pixmap (no alpha).
- */
-static void put_row_rgb_GRAYSCALE_pixmap( RGB_SPAN_ARGS )
-{
- const GLubyte (*rgb)[3] = (const GLubyte (*)[3]) values;
- const XMesaContext xmesa = XMESA_CONTEXT(ctx);
- GET_XRB(xrb);
- XMesaDisplay *dpy = xmesa->xm_visual->display;
- XMesaDrawable buffer = xrb->drawable;
- XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
- register GLuint i;
- y = YFLIP(xrb, y);
- if (mask) {
- for (i=0;i<n;i++,x++) {
- if (mask[i]) {
- XMesaSetForeground( dpy, gc, GRAY_RGB( rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP] ) );
- XMesaDrawPoint( dpy, buffer, gc, (int) x, (int) y );
- }
- }
- }
- else {
- XMesaImage *rowimg = XMESA_BUFFER(ctx->DrawBuffer)->rowimage;
- for (i=0;i<n;i++) {
- XMesaPutPixel( rowimg, i, 0, GRAY_RGB(rgb[i][RCOMP],rgb[i][GCOMP],rgb[i][BCOMP]) );
- }
- XMesaPutImage( dpy, buffer, gc, rowimg, 0, 0, x, y, n, 1 );
- }
-}
-
-/*
- * Write a span of PF_TRUECOLOR pixels to an XImage.
- */
-static void put_row_TRUECOLOR_ximage( PUT_ROW_ARGS )
-{
- const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
- const XMesaContext xmesa = XMESA_CONTEXT(ctx);
- GET_XRB(xrb);
- XMesaImage *img = xrb->ximage;
- register GLuint i;
- y = YFLIP(xrb, y);
- if (mask) {
- for (i=0;i<n;i++,x++) {
- if (mask[i]) {
- unsigned long p;
- PACK_TRUECOLOR( p, rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] );
- XMesaPutPixel( img, x, y, p );
- }
- }
- }
- else {
- /* draw all pixels */
- for (i=0;i<n;i++,x++) {
- unsigned long p;
- PACK_TRUECOLOR( p, rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] );
- XMesaPutPixel( img, x, y, p );
- }
- }
-}
-
-
-/*
- * Write a span of PF_TRUECOLOR pixels to an XImage (no alpha).
- */
-static void put_row_rgb_TRUECOLOR_ximage( RGB_SPAN_ARGS )
-{
- const GLubyte (*rgb)[3] = (const GLubyte (*)[3]) values;
- const XMesaContext xmesa = XMESA_CONTEXT(ctx);
- GET_XRB(xrb);
- XMesaImage *img = xrb->ximage;
- register GLuint i;
- y = YFLIP(xrb, y);
- if (mask) {
- for (i=0;i<n;i++,x++) {
- if (mask[i]) {
- unsigned long p;
- PACK_TRUECOLOR( p, rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP] );
- XMesaPutPixel( img, x, y, p );
- }
- }
- }
- else {
- /* draw all pixels */
- for (i=0;i<n;i++,x++) {
- unsigned long p;
- PACK_TRUECOLOR( p, rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP] );
- XMesaPutPixel( img, x, y, p );
- }
- }
-}
-
-
-/*
- * Write a span of PF_TRUEDITHER pixels to an XImage.
- */
-static void put_row_TRUEDITHER_ximage( PUT_ROW_ARGS )
-{
- const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
- const XMesaContext xmesa = XMESA_CONTEXT(ctx);
- GET_XRB(xrb);
- XMesaImage *img = xrb->ximage;
- register GLuint i;
- y = YFLIP(xrb, y);
- if (mask) {
- for (i=0;i<n;i++,x++) {
- if (mask[i]) {
- unsigned long p;
- PACK_TRUEDITHER(p, x, y, rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP]);
- XMesaPutPixel( img, x, y, p );
- }
- }
- }
- else {
- /* draw all pixels */
- for (i=0;i<n;i++,x++) {
- unsigned long p;
- PACK_TRUEDITHER(p, x, y, rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP]);
- XMesaPutPixel( img, x, y, p );
- }
- }
-}
-
-
-/*
- * Write a span of PF_TRUEDITHER pixels to an XImage (no alpha).
- */
-static void put_row_rgb_TRUEDITHER_ximage( RGB_SPAN_ARGS )
-{
- const GLubyte (*rgb)[3] = (const GLubyte (*)[3]) values;
- const XMesaContext xmesa = XMESA_CONTEXT(ctx);
- GET_XRB(xrb);
- XMesaImage *img = xrb->ximage;
- register GLuint i;
- y = YFLIP(xrb, y);
- if (mask) {
- for (i=0;i<n;i++,x++) {
- if (mask[i]) {
- unsigned long p;
- PACK_TRUEDITHER(p, x, y, rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP]);
- XMesaPutPixel( img, x, y, p );
- }
- }
- }
- else {
- /* draw all pixels */
- for (i=0;i<n;i++,x++) {
- unsigned long p;
- PACK_TRUEDITHER(p, x, y, rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP]);
- XMesaPutPixel( img, x, y, p );
- }
- }
-}
-
-
-/*
- * Write a span of PF_8A8B8G8R-format pixels to an ximage.
- */
-static void put_row_8A8B8G8R_ximage( PUT_ROW_ARGS )
-{
- const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
- GET_XRB(xrb);
- register GLuint i;
- register GLuint *ptr = PIXEL_ADDR4(xrb, x, y);
- (void) ctx;
- if (mask) {
- for (i=0;i<n;i++) {
- if (mask[i]) {
- ptr[i] = PACK_8A8B8G8R( rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP], rgba[i][ACOMP] );
- }
- }
- }
- else {
- /* draw all pixels */
- for (i=0;i<n;i++) {
- ptr[i] = PACK_8A8B8G8R( rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP], rgba[i][ACOMP] );
- }
- }
-}
-
-
-/*
- * Write a span of PF_8A8B8G8R-format pixels to an ximage (no alpha).
- */
-static void put_row_rgb_8A8B8G8R_ximage( RGB_SPAN_ARGS )
-{
- const GLubyte (*rgb)[3] = (const GLubyte (*)[3]) values;
- GET_XRB(xrb);
- register GLuint i;
- register GLuint *ptr = PIXEL_ADDR4(xrb, x, y);
- if (mask) {
- for (i=0;i<n;i++) {
- if (mask[i]) {
- ptr[i] = PACK_8A8B8G8R( rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP], 255 );
- }
- }
- }
- else {
- /* draw all pixels */
- for (i=0;i<n;i++) {
- ptr[i] = PACK_8A8B8G8R( rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP], 255 );
- }
- }
-}
-
-/*
- * Write a span of PF_8A8R8G8B-format pixels to an ximage.
- */
-static void put_row_8A8R8G8B_ximage( PUT_ROW_ARGS )
-{
- const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
- GET_XRB(xrb);
- register GLuint i;
- register GLuint *ptr = PIXEL_ADDR4(xrb, x, y);
- if (mask) {
- for (i=0;i<n;i++) {
- if (mask[i]) {
- ptr[i] = PACK_8A8R8G8B( rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP], rgba[i][ACOMP] );
- }
- }
- }
- else {
- /* draw all pixels */
- for (i=0;i<n;i++) {
- ptr[i] = PACK_8A8R8G8B( rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP], rgba[i][ACOMP] );
- }
- }
-}
-
-
-/*
- * Write a span of PF_8A8R8G8B-format pixels to an ximage (no alpha).
- */
-static void put_row_rgb_8A8R8G8B_ximage( RGB_SPAN_ARGS )
-{
- const GLubyte (*rgb)[3] = (const GLubyte (*)[3]) values;
- GET_XRB(xrb);
- register GLuint i;
- register GLuint *ptr = PIXEL_ADDR4(xrb, x, y);
- if (mask) {
- for (i=0;i<n;i++) {
- if (mask[i]) {
- ptr[i] = PACK_8A8R8G8B( rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP], 255 );
- }
- }
- }
- else {
- /* draw all pixels */
- for (i=0;i<n;i++) {
- ptr[i] = PACK_8A8R8G8B( rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP], 255 );
- }
- }
-}
-
-
-/*
- * Write a span of PF_8R8G8B-format pixels to an ximage.
- */
-static void put_row_8R8G8B_ximage( PUT_ROW_ARGS )
-{
- const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
- GET_XRB(xrb);
- register GLuint i;
- register GLuint *ptr = PIXEL_ADDR4(xrb, x, y);
- if (mask) {
- for (i=0;i<n;i++) {
- if (mask[i]) {
- ptr[i] = PACK_8R8G8B(rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP]);
- }
- }
- }
- else {
- for (i=0;i<n;i++) {
- ptr[i] = PACK_8R8G8B(rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP]);
- }
- }
-}
-
-
-/*
- * Write a span of PF_8R8G8B24-format pixels to an ximage.
- */
-static void put_row_8R8G8B24_ximage( PUT_ROW_ARGS )
-{
- const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
- GET_XRB(xrb);
- register GLuint i;
- register GLubyte *ptr = (GLubyte *) PIXEL_ADDR3(xrb, x, y );
- if (mask) {
- for (i=0;i<n;i++) {
- if (mask[i]) {
- GLuint *ptr4 = (GLuint *) ptr;
- register GLuint pixel = *ptr4;
- switch (3 & (int)(ptr - (GLubyte*)ptr4)) {
- case 0:
- pixel &= 0xff000000;
- pixel |= rgba[i][BCOMP];
- pixel |= rgba[i][GCOMP] << 8;
- pixel |= rgba[i][RCOMP] << 16;
- *ptr4 = pixel;
- break;
- case 3:
- pixel &= 0x00ffffff;
- pixel |= rgba[i][BCOMP] << 24;
- *ptr4++ = pixel;
- pixel = *ptr4 & 0xffff0000;
- pixel |= rgba[i][GCOMP];
- pixel |= rgba[i][RCOMP] << 8;
- *ptr4 = pixel;
- break;
- case 2:
- pixel &= 0x0000ffff;
- pixel |= rgba[i][BCOMP] << 16;
- pixel |= rgba[i][GCOMP] << 24;
- *ptr4++ = pixel;
- pixel = *ptr4 & 0xffffff00;
- pixel |= rgba[i][RCOMP];
- *ptr4 = pixel;
- break;
- case 1:
- pixel &= 0x000000ff;
- pixel |= rgba[i][BCOMP] << 8;
- pixel |= rgba[i][GCOMP] << 16;
- pixel |= rgba[i][RCOMP] << 24;
- *ptr4 = pixel;
- break;
- }
- }
- ptr += 3;
- }
- }
- else {
- /* write all pixels */
- int w = n;
- GLuint *ptr4 = (GLuint *) ptr;
- register GLuint pixel = *ptr4;
- int index = (int)(ptr - (GLubyte *)ptr4);
- register GLuint i = 0;
- switch (index) {
- case 0:
- break;
- case 1:
- pixel &= 0x00ffffff;
- pixel |= rgba[i][BCOMP] << 24;
- *ptr4++ = pixel;
- pixel = *ptr4 & 0xffff0000;
- pixel |= rgba[i][GCOMP];
- pixel |= rgba[i++][RCOMP] << 8;
- *ptr4 = pixel;
- if (0 == --w)
- break;
- case 2:
- pixel &= 0x0000ffff;
- pixel |= rgba[i][BCOMP] << 16;
- pixel |= rgba[i][GCOMP] << 24;
- *ptr4++ = pixel;
- pixel = *ptr4 & 0xffffff00;
- pixel |= rgba[i++][RCOMP];
- *ptr4 = pixel;
- if (0 == --w)
- break;
- case 3:
- pixel &= 0x000000ff;
- pixel |= rgba[i][BCOMP] << 8;
- pixel |= rgba[i][GCOMP] << 16;
- pixel |= rgba[i++][RCOMP] << 24;
- *ptr4++ = pixel;
- if (0 == --w)
- break;
- break;
- }
- while (w > 3) {
- pixel = rgba[i][BCOMP];
- pixel |= rgba[i][GCOMP] << 8;
- pixel |= rgba[i++][RCOMP] << 16;
- pixel |= rgba[i][BCOMP] << 24;
- *ptr4++ = pixel;
- pixel = rgba[i][GCOMP];
- pixel |= rgba[i++][RCOMP] << 8;
- pixel |= rgba[i][BCOMP] << 16;
- pixel |= rgba[i][GCOMP] << 24;
- *ptr4++ = pixel;
- pixel = rgba[i++][RCOMP];
- pixel |= rgba[i][BCOMP] << 8;
- pixel |= rgba[i][GCOMP] << 16;
- pixel |= rgba[i++][RCOMP] << 24;
- *ptr4++ = pixel;
- w -= 4;
- }
- switch (w) {
- case 0:
- break;
- case 1:
- pixel = *ptr4 & 0xff000000;
- pixel |= rgba[i][BCOMP];
- pixel |= rgba[i][GCOMP] << 8;
- pixel |= rgba[i][RCOMP] << 16;
- *ptr4 = pixel;
- break;
- case 2:
- pixel = rgba[i][BCOMP];
- pixel |= rgba[i][GCOMP] << 8;
- pixel |= rgba[i++][RCOMP] << 16;
- pixel |= rgba[i][BCOMP] << 24;
- *ptr4++ = pixel;
- pixel = *ptr4 & 0xffff0000;
- pixel |= rgba[i][GCOMP];
- pixel |= rgba[i][RCOMP] << 8;
- *ptr4 = pixel;
- break;
- case 3:
- pixel = rgba[i][BCOMP];
- pixel |= rgba[i][GCOMP] << 8;
- pixel |= rgba[i++][RCOMP] << 16;
- pixel |= rgba[i][BCOMP] << 24;
- *ptr4++ = pixel;
- pixel = rgba[i][GCOMP];
- pixel |= rgba[i++][RCOMP] << 8;
- pixel |= rgba[i][BCOMP] << 16;
- pixel |= rgba[i][GCOMP] << 24;
- *ptr4++ = pixel;
- pixel = *ptr4 & 0xffffff00;
- pixel |= rgba[i][RCOMP];
- *ptr4 = pixel;
- break;
- }
- }
-}
-
-
-/*
- * Write a span of PF_8R8G8B-format pixels to an ximage (no alpha).
- */
-static void put_row_rgb_8R8G8B_ximage( RGB_SPAN_ARGS )
-{
- const GLubyte (*rgb)[3] = (const GLubyte (*)[3]) values;
- GET_XRB(xrb);
- register GLuint i;
- register GLuint *ptr = PIXEL_ADDR4(xrb, x, y);
- if (mask) {
- for (i=0;i<n;i++) {
- if (mask[i]) {
- ptr[i] = PACK_8R8G8B(rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP]);
- }
- }
- }
- else {
- /* draw all pixels */
- for (i=0;i<n;i++) {
- ptr[i] = PACK_8R8G8B(rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP]);
- }
- }
-}
-
-
-/*
- * Write a span of PF_8R8G8B24-format pixels to an ximage (no alpha).
- */
-static void put_row_rgb_8R8G8B24_ximage( RGB_SPAN_ARGS )
-{
- const GLubyte (*rgb)[3] = (const GLubyte (*)[3]) values;
- GET_XRB(xrb);
- register GLuint i;
- register GLubyte *ptr = (GLubyte *) PIXEL_ADDR3(xrb, x, y);
- if (mask) {
- for (i=0;i<n;i++) {
- if (mask[i]) {
- *ptr++ = rgb[i][BCOMP];
- *ptr++ = rgb[i][GCOMP];
- *ptr++ = rgb[i][RCOMP];
- }
- else {
- ptr += 3;
- }
- }
- }
- else {
- /* draw all pixels */
- for (i=0;i<n;i++) {
- *ptr++ = rgb[i][BCOMP];
- *ptr++ = rgb[i][GCOMP];
- *ptr++ = rgb[i][RCOMP];
- }
- }
-}
-
-
-/*
- * Write a span of PF_5R6G5B-format pixels to an ximage.
- */
-static void put_row_5R6G5B_ximage( PUT_ROW_ARGS )
-{
- const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
- GET_XRB(xrb);
- register GLuint i;
- register GLushort *ptr = PIXEL_ADDR2(xrb, x, y);
- if (mask) {
- for (i=0;i<n;i++) {
- if (mask[i]) {
- ptr[i] = PACK_5R6G5B( rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] );
- }
- }
- }
- else {
- /* draw all pixels */
-#if defined(__i386__) /* word stores don't have to be on 4-byte boundaries */
- GLuint *ptr32 = (GLuint *) ptr;
- GLuint extraPixel = (n & 1);
- n -= extraPixel;
- for (i = 0; i < n; i += 2) {
- GLuint p0, p1;
- p0 = PACK_5R6G5B(rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP]);
- p1 = PACK_5R6G5B(rgba[i+1][RCOMP], rgba[i+1][GCOMP], rgba[i+1][BCOMP]);
- *ptr32++ = (p1 << 16) | p0;
- }
- if (extraPixel) {
- ptr[n] = PACK_5R6G5B(rgba[n][RCOMP], rgba[n][GCOMP], rgba[n][BCOMP]);
- }
-#else
- for (i = 0; i < n; i++) {
- ptr[i] = PACK_5R6G5B(rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP]);
- }
-#endif
- }
-}
-
-
-/*
- * Write a span of PF_DITHER_5R6G5B-format pixels to an ximage.
- */
-static void put_row_DITHER_5R6G5B_ximage( PUT_ROW_ARGS )
-{
- const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
- GET_XRB(xrb);
- const XMesaContext xmesa = XMESA_CONTEXT(ctx);
- register GLuint i;
- register GLushort *ptr = PIXEL_ADDR2(xrb, x, y);
- const GLint y2 = YFLIP(xrb, y);
- if (mask) {
- for (i=0;i<n;i++,x++) {
- if (mask[i]) {
- PACK_TRUEDITHER( ptr[i], x, y2, rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] );
- }
- }
- }
- else {
- /* draw all pixels */
-#if defined(__i386__) /* word stores don't have to be on 4-byte boundaries */
- GLuint *ptr32 = (GLuint *) ptr;
- GLuint extraPixel = (n & 1);
- n -= extraPixel;
- for (i = 0; i < n; i += 2, x += 2) {
- GLuint p0, p1;
- PACK_TRUEDITHER( p0, x, y2, rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] );
- PACK_TRUEDITHER( p1, x+1, y2, rgba[i+1][RCOMP], rgba[i+1][GCOMP], rgba[i+1][BCOMP] );
- *ptr32++ = (p1 << 16) | p0;
- }
- if (extraPixel) {
- PACK_TRUEDITHER( ptr[n], x+n, y2, rgba[n][RCOMP], rgba[n][GCOMP], rgba[n][BCOMP]);
- }
-#else
- for (i = 0; i < n; i++, x++) {
- PACK_TRUEDITHER( ptr[i], x, y2, rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP]);
- }
-#endif
- }
-}
-
-
-/*
- * Write a span of PF_5R6G5B-format pixels to an ximage (no alpha).
- */
-static void put_row_rgb_5R6G5B_ximage( RGB_SPAN_ARGS )
-{
- const GLubyte (*rgb)[3] = (const GLubyte (*)[3]) values;
- GET_XRB(xrb);
- register GLuint i;
- register GLushort *ptr = PIXEL_ADDR2(xrb, x, y);
- if (mask) {
- for (i=0;i<n;i++) {
- if (mask[i]) {
- ptr[i] = PACK_5R6G5B( rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP] );
- }
- }
- }
- else {
- /* draw all pixels */
-#if defined(__i386__) /* word stores don't have to be on 4-byte boundaries */
- GLuint *ptr32 = (GLuint *) ptr;
- GLuint extraPixel = (n & 1);
- n -= extraPixel;
- for (i = 0; i < n; i += 2) {
- GLuint p0, p1;
- p0 = PACK_5R6G5B(rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP]);
- p1 = PACK_5R6G5B(rgb[i+1][RCOMP], rgb[i+1][GCOMP], rgb[i+1][BCOMP]);
- *ptr32++ = (p1 << 16) | p0;
- }
- if (extraPixel) {
- ptr[n] = PACK_5R6G5B(rgb[n][RCOMP], rgb[n][GCOMP], rgb[n][BCOMP]);
- }
-#else
- for (i=0;i<n;i++) {
- ptr[i] = PACK_5R6G5B( rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP] );
- }
-#endif
- }
-}
-
-
-/*
- * Write a span of PF_DITHER_5R6G5B-format pixels to an ximage (no alpha).
- */
-static void put_row_rgb_DITHER_5R6G5B_ximage( RGB_SPAN_ARGS )
-{
- const GLubyte (*rgb)[3] = (const GLubyte (*)[3]) values;
- GET_XRB(xrb);
- const XMesaContext xmesa = XMESA_CONTEXT(ctx);
- register GLuint i;
- register GLushort *ptr = PIXEL_ADDR2(xrb, x, y );
- if (mask) {
- for (i=0;i<n;i++,x++) {
- if (mask[i]) {
- PACK_TRUEDITHER( ptr[i], x, y, rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP] );
- }
- }
- }
- else {
- /* draw all pixels */
-#if defined(__i386__) /* word stores don't have to be on 4-byte boundaries */
- GLuint *ptr32 = (GLuint *) ptr;
- GLuint extraPixel = (n & 1);
- n -= extraPixel;
- for (i = 0; i < n; i += 2, x += 2) {
- GLuint p0, p1;
- PACK_TRUEDITHER( p0, x, y, rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP] );
- PACK_TRUEDITHER( p1, x+1, y, rgb[i+1][RCOMP], rgb[i+1][GCOMP], rgb[i+1][BCOMP] );
- *ptr32++ = (p1 << 16) | p0;
- }
- if (extraPixel) {
- PACK_TRUEDITHER( ptr[n], x+n, y, rgb[n][RCOMP], rgb[n][GCOMP], rgb[n][BCOMP]);
- }
-#else
- for (i=0;i<n;i++,x++) {
- PACK_TRUEDITHER( ptr[i], x, y, rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP] );
- }
-#endif
- }
-}
-
-
-/*
- * Write a span of PF_DITHER pixels to an XImage.
- */
-static void put_row_DITHER_ximage( PUT_ROW_ARGS )
-{
- const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
- GET_XRB(xrb);
- XMesaImage *img = xrb->ximage;
- register GLuint i;
- int yy = YFLIP(xrb, y);
- XDITHER_SETUP(yy);
- if (mask) {
- for (i=0;i<n;i++,x++) {
- if (mask[i]) {
- XMesaPutPixel( img, x, yy, XDITHER( x, rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] ) );
- }
- }
- }
- else {
- /* draw all pixels */
- for (i=0;i<n;i++,x++) {
- XMesaPutPixel( img, x, yy, XDITHER( x, rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] ) );
- }
- }
-}
-
-
-/*
- * Write a span of PF_DITHER pixels to an XImage (no alpha).
- */
-static void put_row_rgb_DITHER_ximage( RGB_SPAN_ARGS )
-{
- const GLubyte (*rgb)[3] = (const GLubyte (*)[3]) values;
- GET_XRB(xrb);
- XMesaImage *img = xrb->ximage;
- register GLuint i;
- int yy = YFLIP(xrb, y);
- XDITHER_SETUP(yy);
- if (mask) {
- for (i=0;i<n;i++,x++) {
- if (mask[i]) {
- XMesaPutPixel( img, x, yy, XDITHER( x, rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP] ) );
- }
- }
- }
- else {
- /* draw all pixels */
- for (i=0;i<n;i++,x++) {
- XMesaPutPixel( img, x, yy, XDITHER( x, rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP] ) );
- }
- }
-}
-
-
-
-/*
- * Write a span of 8-bit PF_DITHER pixels to an XImage.
- */
-static void put_row_DITHER8_ximage( PUT_ROW_ARGS )
-{
- const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
- GET_XRB(xrb);
- register GLuint i;
- register GLubyte *ptr = PIXEL_ADDR1(xrb, x, y);
- XDITHER_SETUP(y);
- if (mask) {
- for (i=0;i<n;i++,x++) {
- if (mask[i]) {
- ptr[i] = (GLubyte) XDITHER( x, rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] );
- }
- }
- }
- else {
- for (i=0;i<n;i++,x++) {
- ptr[i] = (GLubyte) XDITHER( x, rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] );
- }
- }
-}
-
-
-static void put_row_rgb_DITHER8_ximage( RGB_SPAN_ARGS )
-{
- const GLubyte (*rgb)[3] = (const GLubyte (*)[3]) values;
- GET_XRB(xrb);
- register GLuint i;
- register GLubyte *ptr = PIXEL_ADDR1(xrb, x, y);
- XDITHER_SETUP(y);
- if (mask) {
- for (i=0;i<n;i++,x++) {
- if (mask[i]) {
- ptr[i] = (GLubyte) XDITHER( x, rgb[i][0], rgb[i][1], rgb[i][2] );
- }
- }
- }
- else {
- const GLubyte *data = (GLubyte *) rgb;
- for (i=0;i<n;i++,x++) {
- /*ptr[i] = XDITHER( x, rgb[i][0], rgb[i][1], rgb[i][2] );*/
- ptr[i] = (GLubyte) XDITHER( x, data[i+i+i], data[i+i+i+1], data[i+i+i+2] );
- }
- }
-}
-
-
-
-/*
- * Write a span of PF_1BIT pixels to an XImage.
- */
-static void put_row_1BIT_ximage( PUT_ROW_ARGS )
-{
- const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
- const XMesaContext xmesa = XMESA_CONTEXT(ctx);
- GET_XRB(xrb);
- XMesaImage *img = xrb->ximage;
- register GLuint i;
- SETUP_1BIT;
- y = YFLIP(xrb, y);
- if (mask) {
- for (i=0;i<n;i++,x++) {
- if (mask[i]) {
- XMesaPutPixel(img, x, y, DITHER_1BIT(x, y, rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP]));
- }
- }
- }
- else {
- for (i=0;i<n;i++,x++) {
- XMesaPutPixel( img, x, y, DITHER_1BIT(x, y, rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP]) );
- }
- }
-}
-
-
-/*
- * Write a span of PF_1BIT pixels to an XImage (no alpha).
- */
-static void put_row_rgb_1BIT_ximage( RGB_SPAN_ARGS )
-{
- const GLubyte (*rgb)[3] = (const GLubyte (*)[3]) values;
- const XMesaContext xmesa = XMESA_CONTEXT(ctx);
- GET_XRB(xrb);
- XMesaImage *img = xrb->ximage;
- register GLuint i;
- SETUP_1BIT;
- y = YFLIP(xrb, y);
- if (mask) {
- for (i=0;i<n;i++,x++) {
- if (mask[i]) {
- XMesaPutPixel(img, x, y, DITHER_1BIT(x, y, rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP]));
- }
- }
- }
- else {
- for (i=0;i<n;i++,x++) {
- XMesaPutPixel( img, x, y, DITHER_1BIT(x, y, rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP]) );
- }
- }
-}
-
-
-/*
- * Write a span of PF_HPCR pixels to an XImage.
- */
-static void put_row_HPCR_ximage( PUT_ROW_ARGS )
-{
- const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
- GET_XRB(xrb);
- const XMesaContext xmesa = XMESA_CONTEXT(ctx);
- register GLuint i;
- register GLubyte *ptr = PIXEL_ADDR1(xrb, x, y);
- if (mask) {
- for (i=0;i<n;i++,x++) {
- if (mask[i]) {
- ptr[i] = DITHER_HPCR( x, y, rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] );
- }
- }
- }
- else {
- /* draw all pixels */
- for (i=0;i<n;i++,x++) {
- ptr[i] = DITHER_HPCR( x, y, rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] );
- }
- }
-}
-
-
-/*
- * Write a span of PF_HPCR pixels to an XImage (no alpha).
- */
-static void put_row_rgb_HPCR_ximage( RGB_SPAN_ARGS )
-{
- const GLubyte (*rgb)[3] = (const GLubyte (*)[3]) values;
- GET_XRB(xrb);
- const XMesaContext xmesa = XMESA_CONTEXT(ctx);
- register GLuint i;
- register GLubyte *ptr = PIXEL_ADDR1(xrb, x, y);
- if (mask) {
- for (i=0;i<n;i++,x++) {
- if (mask[i]) {
- ptr[i] = DITHER_HPCR( x, y, rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP] );
- }
- }
- }
- else {
- /* draw all pixels */
- for (i=0;i<n;i++,x++) {
- ptr[i] = DITHER_HPCR( x, y, rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP] );
- }
- }
-}
-
-
-/*
- * Write a span of PF_LOOKUP pixels to an XImage.
- */
-static void put_row_LOOKUP_ximage( PUT_ROW_ARGS )
-{
- const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
- GET_XRB(xrb);
- XMesaImage *img = xrb->ximage;
- register GLuint i;
- LOOKUP_SETUP;
- y = YFLIP(xrb, y);
- if (mask) {
- for (i=0;i<n;i++,x++) {
- if (mask[i]) {
- XMesaPutPixel( img, x, y, LOOKUP( rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] ) );
- }
- }
- }
- else {
- /* draw all pixels */
- for (i=0;i<n;i++,x++) {
- XMesaPutPixel( img, x, y, LOOKUP( rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] ) );
- }
- }
-}
-
-
-/*
- * Write a span of PF_LOOKUP pixels to an XImage (no alpha).
- */
-static void put_row_rgb_LOOKUP_ximage( RGB_SPAN_ARGS )
-{
- const GLubyte (*rgb)[3] = (const GLubyte (*)[3]) values;
- GET_XRB(xrb);
- XMesaImage *img = xrb->ximage;
- register GLuint i;
- LOOKUP_SETUP;
- y = YFLIP(xrb, y);
- if (mask) {
- for (i=0;i<n;i++,x++) {
- if (mask[i]) {
- XMesaPutPixel( img, x, y, LOOKUP( rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP] ) );
- }
- }
- }
- else {
- /* draw all pixels */
- for (i=0;i<n;i++,x++) {
- XMesaPutPixel( img, x, y, LOOKUP( rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP] ) );
- }
- }
-}
-
-
-/*
- * Write a span of 8-bit PF_LOOKUP pixels to an XImage.
- */
-static void put_row_LOOKUP8_ximage( PUT_ROW_ARGS )
-{
- const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
- GET_XRB(xrb);
- register GLuint i;
- register GLubyte *ptr = PIXEL_ADDR1(xrb, x, y);
- LOOKUP_SETUP;
- if (mask) {
- for (i=0;i<n;i++,x++) {
- if (mask[i]) {
- ptr[i] = (GLubyte) LOOKUP( rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] );
- }
- }
- }
- else {
- /* draw all pixels */
- for (i=0;i<n;i++,x++) {
- ptr[i] = (GLubyte) LOOKUP( rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] );
- }
- }
-}
-
-
-static void put_row_rgb_LOOKUP8_ximage( RGB_SPAN_ARGS )
-{
- const GLubyte (*rgb)[3] = (const GLubyte (*)[3]) values;
- GET_XRB(xrb);
- register GLuint i;
- register GLubyte *ptr = PIXEL_ADDR1(xrb, x, y);
- LOOKUP_SETUP;
- if (mask) {
- for (i=0;i<n;i++,x++) {
- if (mask[i]) {
- ptr[i] = (GLubyte) LOOKUP( rgb[i][0], rgb[i][1], rgb[i][2] );
- }
- }
- }
- else {
- /* draw all pixels */
- const GLubyte *data = (GLubyte *) rgb;
- for (i=0;i<n;i++,x++) {
- /*ptr[i] = LOOKUP( rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] );*/
- ptr[i] = (GLubyte) LOOKUP( data[i+i+i], data[i+i+i+1], data[i+i+i+2] );
- }
- }
-}
-
-
-/*
- * Write a span of PF_GRAYSCALE pixels to an XImage.
- */
-static void put_row_GRAYSCALE_ximage( PUT_ROW_ARGS )
-{
- const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
- GET_XRB(xrb);
- XMesaImage *img = xrb->ximage;
- register GLuint i;
- y = YFLIP(xrb, y);
- if (mask) {
- for (i=0;i<n;i++,x++) {
- if (mask[i]) {
- XMesaPutPixel( img, x, y, GRAY_RGB( rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] ) );
- }
- }
- }
- else {
- /* draw all pixels */
- for (i=0;i<n;i++,x++) {
- XMesaPutPixel( img, x, y, GRAY_RGB( rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] ) );
- }
- }
-}
-
-
-/*
- * Write a span of PF_GRAYSCALE pixels to an XImage (no alpha).
- */
-static void put_row_rgb_GRAYSCALE_ximage( RGB_SPAN_ARGS )
-{
- const GLubyte (*rgb)[3] = (const GLubyte (*)[3]) values;
- GET_XRB(xrb);
- XMesaImage *img = xrb->ximage;
- register GLuint i;
- y = YFLIP(xrb, y);
- if (mask) {
- for (i=0;i<n;i++,x++) {
- if (mask[i]) {
- XMesaPutPixel( img, x, y, GRAY_RGB( rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP] ) );
- }
- }
- }
- else {
- /* draw all pixels */
- for (i=0;i<n;i++,x++) {
- XMesaPutPixel( img, x, y, GRAY_RGB( rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP] ) );
- }
- }
-}
-
-
-/*
- * Write a span of 8-bit PF_GRAYSCALE pixels to an XImage.
- */
-static void put_row_GRAYSCALE8_ximage( PUT_ROW_ARGS )
-{
- const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
- GET_XRB(xrb);
- register GLuint i;
- register GLubyte *ptr = PIXEL_ADDR1(xrb, x, y);
- if (mask) {
- for (i=0;i<n;i++) {
- if (mask[i]) {
- ptr[i] = (GLubyte) GRAY_RGB( rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] );
- }
- }
- }
- else {
- /* draw all pixels */
- for (i=0;i<n;i++) {
- ptr[i] = (GLubyte) GRAY_RGB( rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] );
- }
- }
-}
-
-
-/*
- * Write a span of 8-bit PF_GRAYSCALE pixels to an XImage (no alpha).
- */
-static void put_row_rgb_GRAYSCALE8_ximage( RGB_SPAN_ARGS )
-{
- const GLubyte (*rgb)[3] = (const GLubyte (*)[3]) values;
- GET_XRB(xrb);
- register GLuint i;
- register GLubyte *ptr = PIXEL_ADDR1(xrb, x, y);
- if (mask) {
- for (i=0;i<n;i++) {
- if (mask[i]) {
- ptr[i] = (GLubyte) GRAY_RGB( rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP] );
- }
- }
- }
- else {
- /* draw all pixels */
- for (i=0;i<n;i++) {
- ptr[i] = (GLubyte) GRAY_RGB( rgb[i][RCOMP], rgb[i][GCOMP], rgb[i][BCOMP] );
- }
- }
-}
-
-
-
-
-/**********************************************************************/
-/*** Write COLOR PIXEL functions ***/
-/**********************************************************************/
-
-
-#define PUT_VALUES_ARGS \
- GLcontext *ctx, struct gl_renderbuffer *rb, \
- GLuint n, const GLint x[], const GLint y[], \
- const void *values, const GLubyte mask[]
-
-
-/*
- * Write an array of PF_TRUECOLOR pixels to a pixmap.
- */
-static void put_values_TRUECOLOR_pixmap( PUT_VALUES_ARGS )
-{
- const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
- const XMesaContext xmesa = XMESA_CONTEXT(ctx);
- GET_XRB(xrb);
- XMesaDisplay *dpy = xmesa->xm_visual->display;
- XMesaDrawable buffer = xrb->drawable;
- XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
- register GLuint i;
- for (i=0;i<n;i++) {
- if (mask[i]) {
- unsigned long p;
- PACK_TRUECOLOR( p, rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] );
- XMesaSetForeground( dpy, gc, p );
- XMesaDrawPoint( dpy, buffer, gc, (int) x[i], (int) YFLIP(xrb, y[i]) );
- }
- }
-}
-
-
-/*
- * Write an array of PF_TRUEDITHER pixels to a pixmap.
- */
-static void put_values_TRUEDITHER_pixmap( PUT_VALUES_ARGS )
-{
- const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
- const XMesaContext xmesa = XMESA_CONTEXT(ctx);
- GET_XRB(xrb);
- XMesaDisplay *dpy = xmesa->xm_visual->display;
- XMesaDrawable buffer = xrb->drawable;
- XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
- register GLuint i;
- for (i=0;i<n;i++) {
- if (mask[i]) {
- unsigned long p;
- PACK_TRUEDITHER(p, x[i], y[i], rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP]);
- XMesaSetForeground( dpy, gc, p );
- XMesaDrawPoint( dpy, buffer, gc, (int) x[i], (int) YFLIP(xrb, y[i]) );
- }
- }
-}
-
-
-/*
- * Write an array of PF_8A8B8G8R pixels to a pixmap.
- */
-static void put_values_8A8B8G8R_pixmap( PUT_VALUES_ARGS )
-{
- const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
- const XMesaContext xmesa = XMESA_CONTEXT(ctx);
- GET_XRB(xrb);
- XMesaDisplay *dpy = xmesa->xm_visual->display;
- XMesaDrawable buffer = xrb->drawable;
- XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
- register GLuint i;
- for (i=0;i<n;i++) {
- if (mask[i]) {
- XMesaSetForeground( dpy, gc,
- PACK_8A8B8G8R( rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP], rgba[i][ACOMP] ));
- XMesaDrawPoint( dpy, buffer, gc, (int) x[i], (int) YFLIP(xrb, y[i]) );
- }
- }
-}
-
-/*
- * Write an array of PF_8A8R8G8B pixels to a pixmap.
- */
-static void put_values_8A8R8G8B_pixmap( PUT_VALUES_ARGS )
-{
- const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
- const XMesaContext xmesa = XMESA_CONTEXT(ctx);
- GET_XRB(xrb);
- XMesaDisplay *dpy = xmesa->xm_visual->display;
- XMesaDrawable buffer = xrb->drawable;
- XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
- register GLuint i;
- for (i=0;i<n;i++) {
- if (mask[i]) {
- XMesaSetForeground( dpy, gc,
- PACK_8A8R8G8B( rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP], rgba[i][ACOMP] ));
- XMesaDrawPoint( dpy, buffer, gc, (int) x[i], (int) YFLIP(xrb, y[i]) );
- }
- }
-}
-
-/*
- * Write an array of PF_8R8G8B pixels to a pixmap.
- */
-static void put_values_8R8G8B_pixmap( PUT_VALUES_ARGS )
-{
- const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
- const XMesaContext xmesa = XMESA_CONTEXT(ctx);
- GET_XRB(xrb);
- XMesaDisplay *dpy = xmesa->xm_visual->display;
- XMesaDrawable buffer = xrb->drawable;
- XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
- register GLuint i;
- for (i=0;i<n;i++) {
- if (mask[i]) {
- XMesaSetForeground( dpy, gc, PACK_8R8G8B( rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] ) );
- XMesaDrawPoint( dpy, buffer, gc, (int) x[i], (int) YFLIP(xrb, y[i]) );
- }
- }
-}
-
-
-/*
- * Write an array of PF_8R8G8B24 pixels to a pixmap.
- */
-static void put_values_8R8G8B24_pixmap( PUT_VALUES_ARGS )
-{
- const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
- const XMesaContext xmesa = XMESA_CONTEXT(ctx);
- GET_XRB(xrb);
- XMesaDisplay *dpy = xmesa->xm_visual->display;
- XMesaDrawable buffer = xrb->drawable;
- XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
- register GLuint i;
- for (i=0;i<n;i++) {
- if (mask[i]) {
- XMesaSetForeground( dpy, gc, PACK_8R8G8B( rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] ) );
- XMesaDrawPoint( dpy, buffer, gc, (int) x[i], (int) YFLIP(xrb, y[i]) );
- }
- }
-}
-
-
-/*
- * Write an array of PF_5R6G5B pixels to a pixmap.
- */
-static void put_values_5R6G5B_pixmap( PUT_VALUES_ARGS )
-{
- const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
- const XMesaContext xmesa = XMESA_CONTEXT(ctx);
- GET_XRB(xrb);
- XMesaDisplay *dpy = xmesa->xm_visual->display;
- XMesaDrawable buffer = xrb->drawable;
- XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
- register GLuint i;
- for (i=0;i<n;i++) {
- if (mask[i]) {
- XMesaSetForeground( dpy, gc, PACK_5R6G5B( rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] ) );
- XMesaDrawPoint( dpy, buffer, gc, (int) x[i], (int) YFLIP(xrb, y[i]) );
- }
- }
-}
-
-
-/*
- * Write an array of PF_DITHER_5R6G5B pixels to a pixmap.
- */
-static void put_values_DITHER_5R6G5B_pixmap( PUT_VALUES_ARGS )
-{
- const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
- const XMesaContext xmesa = XMESA_CONTEXT(ctx);
- GET_XRB(xrb);
- XMesaDisplay *dpy = xmesa->xm_visual->display;
- XMesaDrawable buffer = xrb->drawable;
- XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
- register GLuint i;
- for (i=0;i<n;i++) {
- if (mask[i]) {
- unsigned long p;
- PACK_TRUEDITHER(p, x[i], y[i], rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] );
- XMesaSetForeground( dpy, gc, p );
- XMesaDrawPoint( dpy, buffer, gc, (int) x[i], (int) YFLIP(xrb, y[i]) );
- }
- }
-}
-
-
-/*
- * Write an array of PF_DITHER pixels to a pixmap.
- */
-static void put_values_DITHER_pixmap( PUT_VALUES_ARGS )
-{
- const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
- const XMesaContext xmesa = XMESA_CONTEXT(ctx);
- GET_XRB(xrb);
- XMesaDisplay *dpy = xmesa->xm_visual->display;
- XMesaDrawable buffer = xrb->drawable;
- XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
- register GLuint i;
- DITHER_SETUP;
- for (i=0;i<n;i++) {
- if (mask[i]) {
- XMesaSetForeground( dpy, gc,
- DITHER(x[i], y[i], rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP]) );
- XMesaDrawPoint( dpy, buffer, gc, (int) x[i], (int) YFLIP(xrb, y[i]) );
- }
- }
-}
-
-
-/*
- * Write an array of PF_1BIT pixels to a pixmap.
- */
-static void put_values_1BIT_pixmap( PUT_VALUES_ARGS )
-{
- const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
- const XMesaContext xmesa = XMESA_CONTEXT(ctx);
- GET_XRB(xrb);
- XMesaDisplay *dpy = xmesa->xm_visual->display;
- XMesaDrawable buffer = xrb->drawable;
- XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
- register GLuint i;
- SETUP_1BIT;
- for (i=0;i<n;i++) {
- if (mask[i]) {
- XMesaSetForeground( dpy, gc,
- DITHER_1BIT( x[i], y[i], rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] ));
- XMesaDrawPoint( dpy, buffer, gc, (int) x[i], (int) YFLIP(xrb, y[i]) );
- }
- }
-}
-
-
-/*
- * Write an array of PF_HPCR pixels to a pixmap.
- */
-static void put_values_HPCR_pixmap( PUT_VALUES_ARGS )
-{
- const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
- const XMesaContext xmesa = XMESA_CONTEXT(ctx);
- GET_XRB(xrb);
- XMesaDisplay *dpy = xmesa->xm_visual->display;
- XMesaDrawable buffer = xrb->drawable;
- XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
- register GLuint i;
- for (i=0;i<n;i++) {
- if (mask[i]) {
- XMesaSetForeground( dpy, gc,
- DITHER_HPCR( x[i], y[i], rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] ));
- XMesaDrawPoint( dpy, buffer, gc, (int) x[i], (int) YFLIP(xrb, y[i]) );
- }
- }
-}
-
-
-/*
- * Write an array of PF_LOOKUP pixels to a pixmap.
- */
-static void put_values_LOOKUP_pixmap( PUT_VALUES_ARGS )
-{
- const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
- const XMesaContext xmesa = XMESA_CONTEXT(ctx);
- GET_XRB(xrb);
- XMesaDisplay *dpy = xmesa->xm_visual->display;
- XMesaDrawable buffer = xrb->drawable;
- XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
- register GLuint i;
- LOOKUP_SETUP;
- for (i=0;i<n;i++) {
- if (mask[i]) {
- XMesaSetForeground( dpy, gc, LOOKUP( rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] ) );
- XMesaDrawPoint( dpy, buffer, gc, (int) x[i], (int) YFLIP(xrb, y[i]) );
- }
- }
-}
-
-
-/*
- * Write an array of PF_GRAYSCALE pixels to a pixmap.
- */
-static void put_values_GRAYSCALE_pixmap( PUT_VALUES_ARGS )
-{
- const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
- const XMesaContext xmesa = XMESA_CONTEXT(ctx);
- GET_XRB(xrb);
- XMesaDisplay *dpy = xmesa->xm_visual->display;
- XMesaDrawable buffer = xrb->drawable;
- XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
- register GLuint i;
- for (i=0;i<n;i++) {
- if (mask[i]) {
- XMesaSetForeground( dpy, gc, GRAY_RGB( rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] ) );
- XMesaDrawPoint( dpy, buffer, gc, (int) x[i], (int) YFLIP(xrb, y[i]) );
- }
- }
-}
-
-
-/*
- * Write an array of PF_TRUECOLOR pixels to an ximage.
- */
-static void put_values_TRUECOLOR_ximage( PUT_VALUES_ARGS )
-{
- const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
- const XMesaContext xmesa = XMESA_CONTEXT(ctx);
- GET_XRB(xrb);
- XMesaImage *img = xrb->ximage;
- register GLuint i;
- for (i=0;i<n;i++) {
- if (mask[i]) {
- unsigned long p;
- PACK_TRUECOLOR( p, rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] );
- XMesaPutPixel( img, x[i], YFLIP(xrb, y[i]), p );
- }
- }
-}
-
-
-/*
- * Write an array of PF_TRUEDITHER pixels to an XImage.
- */
-static void put_values_TRUEDITHER_ximage( PUT_VALUES_ARGS )
-{
- const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
- const XMesaContext xmesa = XMESA_CONTEXT(ctx);
- GET_XRB(xrb);
- XMesaImage *img = xrb->ximage;
- register GLuint i;
- for (i=0;i<n;i++) {
- if (mask[i]) {
- unsigned long p;
- PACK_TRUEDITHER(p, x[i], y[i], rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP]);
- XMesaPutPixel( img, x[i], YFLIP(xrb, y[i]), p );
- }
- }
-}
-
-
-/*
- * Write an array of PF_8A8B8G8R pixels to an ximage.
- */
-static void put_values_8A8B8G8R_ximage( PUT_VALUES_ARGS )
-{
- const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
- GET_XRB(xrb);
- register GLuint i;
- for (i=0;i<n;i++) {
- if (mask[i]) {
- GLuint *ptr = PIXEL_ADDR4(xrb, x[i], y[i] );
- *ptr = PACK_8A8B8G8R( rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP], rgba[i][ACOMP] );
- }
- }
-}
-
-/*
- * Write an array of PF_8A8R8G8B pixels to an ximage.
- */
-static void put_values_8A8R8G8B_ximage( PUT_VALUES_ARGS )
-{
- const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
- GET_XRB(xrb);
- register GLuint i;
- for (i=0;i<n;i++) {
- if (mask[i]) {
- GLuint *ptr = PIXEL_ADDR4(xrb, x[i], y[i]);
- *ptr = PACK_8A8R8G8B( rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP], rgba[i][ACOMP] );
- }
- }
-}
-
-
-/*
- * Write an array of PF_8R8G8B pixels to an ximage.
- */
-static void put_values_8R8G8B_ximage( PUT_VALUES_ARGS )
-{
- const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
- GET_XRB(xrb);
- register GLuint i;
- for (i=0;i<n;i++) {
- if (mask[i]) {
- GLuint *ptr = PIXEL_ADDR4(xrb, x[i], y[i]);
- *ptr = PACK_8R8G8B( rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] );
- }
- }
-}
-
-
-/*
- * Write an array of PF_8R8G8B24 pixels to an ximage.
- */
-static void put_values_8R8G8B24_ximage( PUT_VALUES_ARGS )
-{
- const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
- GET_XRB(xrb);
- register GLuint i;
- for (i=0;i<n;i++) {
- if (mask[i]) {
- bgr_t *ptr = PIXEL_ADDR3(xrb, x[i], y[i] );
- ptr->r = rgba[i][RCOMP];
- ptr->g = rgba[i][GCOMP];
- ptr->b = rgba[i][BCOMP];
- }
- }
-}
-
-
-/*
- * Write an array of PF_5R6G5B pixels to an ximage.
- */
-static void put_values_5R6G5B_ximage( PUT_VALUES_ARGS )
-{
- const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
- GET_XRB(xrb);
- register GLuint i;
- for (i=0;i<n;i++) {
- if (mask[i]) {
- GLushort *ptr = PIXEL_ADDR2(xrb, x[i], y[i] );
- *ptr = PACK_5R6G5B( rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] );
- }
- }
-}
-
-
-/*
- * Write an array of PF_DITHER_5R6G5B pixels to an ximage.
- */
-static void put_values_DITHER_5R6G5B_ximage( PUT_VALUES_ARGS )
-{
- const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
- GET_XRB(xrb);
- const XMesaContext xmesa = XMESA_CONTEXT(ctx);
- register GLuint i;
- for (i=0;i<n;i++) {
- if (mask[i]) {
- GLushort *ptr = PIXEL_ADDR2(xrb, x[i], y[i] );
- PACK_TRUEDITHER( *ptr, x[i], y[i], rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] );
- }
- }
-}
-
-
-/*
- * Write an array of PF_DITHER pixels to an XImage.
- */
-static void put_values_DITHER_ximage( PUT_VALUES_ARGS )
-{
- const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
- GET_XRB(xrb);
- XMesaImage *img = xrb->ximage;
- register GLuint i;
- DITHER_SETUP;
- for (i=0;i<n;i++) {
- if (mask[i]) {
- XMesaPutPixel( img, x[i], YFLIP(xrb, y[i]),
- DITHER( x[i], y[i], rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] ) );
- }
- }
-}
-
-
-/*
- * Write an array of 8-bit PF_DITHER pixels to an XImage.
- */
-static void put_values_DITHER8_ximage( PUT_VALUES_ARGS )
-{
- const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
- GET_XRB(xrb);
- register GLuint i;
- DITHER_SETUP;
- for (i=0;i<n;i++) {
- if (mask[i]) {
- GLubyte *ptr = PIXEL_ADDR1(xrb, x[i], y[i]);
- *ptr = (GLubyte) DITHER( x[i], y[i], rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] );
- }
- }
-}
-
-
-/*
- * Write an array of PF_1BIT pixels to an XImage.
- */
-static void put_values_1BIT_ximage( PUT_VALUES_ARGS )
-{
- const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
- const XMesaContext xmesa = XMESA_CONTEXT(ctx);
- GET_XRB(xrb);
- XMesaImage *img = xrb->ximage;
- register GLuint i;
- SETUP_1BIT;
- for (i=0;i<n;i++) {
- if (mask[i]) {
- XMesaPutPixel( img, x[i], YFLIP(xrb, y[i]),
- DITHER_1BIT( x[i], y[i], rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] ));
- }
- }
-}
-
-
-/*
- * Write an array of PF_HPCR pixels to an XImage.
- */
-static void put_values_HPCR_ximage( PUT_VALUES_ARGS )
-{
- const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
- GET_XRB(xrb);
- const XMesaContext xmesa = XMESA_CONTEXT(ctx);
- register GLuint i;
- for (i=0;i<n;i++) {
- if (mask[i]) {
- GLubyte *ptr = PIXEL_ADDR1(xrb, x[i], y[i]);
- *ptr = (GLubyte) DITHER_HPCR( x[i], y[i], rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] );
- }
- }
-}
-
-
-/*
- * Write an array of PF_LOOKUP pixels to an XImage.
- */
-static void put_values_LOOKUP_ximage( PUT_VALUES_ARGS )
-{
- const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
- GET_XRB(xrb);
- XMesaImage *img = xrb->ximage;
- register GLuint i;
- LOOKUP_SETUP;
- for (i=0;i<n;i++) {
- if (mask[i]) {
- XMesaPutPixel( img, x[i], YFLIP(xrb, y[i]), LOOKUP(rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP]) );
- }
- }
-}
-
-
-/*
- * Write an array of 8-bit PF_LOOKUP pixels to an XImage.
- */
-static void put_values_LOOKUP8_ximage( PUT_VALUES_ARGS )
-{
- const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
- GET_XRB(xrb);
- register GLuint i;
- LOOKUP_SETUP;
- for (i=0;i<n;i++) {
- if (mask[i]) {
- GLubyte *ptr = PIXEL_ADDR1(xrb, x[i], y[i]);
- *ptr = (GLubyte) LOOKUP( rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] );
- }
- }
-}
-
-
-/*
- * Write an array of PF_GRAYSCALE pixels to an XImage.
- */
-static void put_values_GRAYSCALE_ximage( PUT_VALUES_ARGS )
-{
- const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
- GET_XRB(xrb);
- XMesaImage *img = xrb->ximage;
- register GLuint i;
- for (i=0;i<n;i++) {
- if (mask[i]) {
- XMesaPutPixel( img, x[i], YFLIP(xrb, y[i]),
- GRAY_RGB( rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] ) );
- }
- }
-}
-
-
-/*
- * Write an array of 8-bit PF_GRAYSCALE pixels to an XImage.
- */
-static void put_values_GRAYSCALE8_ximage( PUT_VALUES_ARGS )
-{
- const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
- GET_XRB(xrb);
- register GLuint i;
- for (i=0;i<n;i++) {
- if (mask[i]) {
- GLubyte *ptr = PIXEL_ADDR1(xrb, x[i], y[i] );
- *ptr = (GLubyte) GRAY_RGB( rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] );
- }
- }
-}
-
-
-
-
-/**********************************************************************/
-/*** Write MONO COLOR SPAN functions ***/
-/**********************************************************************/
-
-#define PUT_MONO_ROW_ARGS \
- GLcontext *ctx, struct gl_renderbuffer *rb, \
- GLuint n, GLint x, GLint y, const void *value, \
- const GLubyte mask[]
-
-
-
-/*
- * Write a span of identical pixels to a pixmap.
- */
-static void put_mono_row_pixmap( PUT_MONO_ROW_ARGS )
-{
- const GLubyte *color = (const GLubyte *) value;
- GET_XRB(xrb);
- XMesaContext xmesa = XMESA_CONTEXT(ctx);
- XMesaDisplay *dpy = xmesa->xm_visual->display;
- XMesaDrawable buffer = xrb->drawable;
- XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
- const unsigned long pixel = xmesa_color_to_pixel(ctx, color[RCOMP],
- color[GCOMP], color[BCOMP], color[ACOMP], xmesa->pixelformat);
- register GLuint i;
- XMesaSetForeground( xmesa->display, gc, pixel );
- y = YFLIP(xrb, y);
-
- /* New code contributed by Jeff Epler and cleaned up by Keith
- * Whitwell.
- */
- for (i = 0; i < n; ) {
- GLuint start = i;
-
- /* Identify and emit contiguous rendered pixels
- */
- while (i < n && (!mask || mask[i]))
- i++;
-
- if (start < i)
- XMesaFillRectangle( dpy, buffer, gc,
- (int)(x+start), (int) y,
- (int)(i-start), 1);
-
- /* Eat up non-rendered pixels
- */
- while (i < n && !mask[i])
- i++;
- }
-}
-
-
-
-static void
-put_mono_row_ci_pixmap( PUT_MONO_ROW_ARGS )
-{
- GLuint colorIndex = *((GLuint *) value);
- XMesaContext xmesa = XMESA_CONTEXT(ctx);
- GET_XRB(xrb);
- XMesaDisplay *dpy = xmesa->xm_visual->display;
- XMesaDrawable buffer = xrb->drawable;
- XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
- register GLuint i;
- XMesaSetForeground( xmesa->display, gc, colorIndex );
- y = YFLIP(xrb, y);
-
- for (i = 0 ; i < n ;) {
- GLuint start = i;
-
- /* Identify and emit contiguous rendered pixels
- */
- while (i < n && (!mask || mask[i]))
- i++;
-
- if (start < i)
- XMesaFillRectangle( dpy, buffer, gc,
- (int)(x+start), (int) y,
- (int)(i-start), 1);
-
- /* Eat up non-rendered pixels
- */
- while (i < n && !mask[i])
- i++;
- }
-}
-
-
-
-/*
- * Write a span of PF_TRUEDITHER pixels to a pixmap.
- */
-static void put_mono_row_TRUEDITHER_pixmap( PUT_MONO_ROW_ARGS )
-{
- const GLubyte *color = (const GLubyte *) value;
- GET_XRB(xrb);
- XMesaContext xmesa = XMESA_CONTEXT(ctx);
- XMesaDisplay *dpy = xmesa->xm_visual->display;
- XMesaDrawable buffer = xrb->drawable;
- XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
- const GLubyte r = color[RCOMP], g = color[GCOMP], b = color[BCOMP];
- register GLuint i;
- int yy = YFLIP(xrb, y);
- for (i=0;i<n;i++,x++) {
- if (!mask || mask[i]) {
- unsigned long p;
- PACK_TRUEDITHER(p, x, yy, r, g, b);
- XMesaSetForeground( dpy, gc, p );
- XMesaDrawPoint( dpy, buffer, gc, (int) x, (int) yy );
- }
- }
-}
-
-
-/*
- * Write a span of PF_DITHER pixels to a pixmap.
- */
-static void put_mono_row_DITHER_pixmap( PUT_MONO_ROW_ARGS )
-{
- const GLubyte *color = (const GLubyte *) value;
- GET_XRB(xrb);
- XMesaContext xmesa = XMESA_CONTEXT(ctx);
- XMesaDisplay *dpy = xmesa->xm_visual->display;
- XMesaDrawable buffer = xrb->drawable;
- XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
- const GLubyte r = color[RCOMP], g = color[GCOMP], b = color[BCOMP];
- register GLuint i;
- int yy = YFLIP(xrb, y);
- XDITHER_SETUP(yy);
- for (i=0;i<n;i++,x++) {
- if (!mask || mask[i]) {
- XMesaSetForeground( dpy, gc, XDITHER( x, r, g, b ) );
- XMesaDrawPoint( dpy, buffer, gc, (int) x, (int) yy );
- }
- }
-}
-
-
-/*
- * Write a span of PF_1BIT pixels to a pixmap.
- */
-static void put_mono_row_1BIT_pixmap( PUT_MONO_ROW_ARGS )
-{
- const GLubyte *color = (const GLubyte *) value;
- GET_XRB(xrb);
- XMesaContext xmesa = XMESA_CONTEXT(ctx);
- XMesaDisplay *dpy = xmesa->xm_visual->display;
- XMesaDrawable buffer = xrb->drawable;
- XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
- const GLubyte r = color[RCOMP], g = color[GCOMP], b = color[BCOMP];
- register GLuint i;
- SETUP_1BIT;
- y = YFLIP(xrb, y);
- for (i=0;i<n;i++,x++) {
- if (!mask || mask[i]) {
- XMesaSetForeground( dpy, gc, DITHER_1BIT( x, y, r, g, b ) );
- XMesaDrawPoint( dpy, buffer, gc, (int) x, (int) y );
- }
- }
-}
-
-
-/*
- * Write a span of identical pixels to an XImage.
- */
-static void put_mono_row_ximage( PUT_MONO_ROW_ARGS )
-{
- const GLubyte *color = (const GLubyte *) value;
- GET_XRB(xrb);
- XMesaContext xmesa = XMESA_CONTEXT(ctx);
- XMesaImage *img = xrb->ximage;
- register GLuint i;
- const unsigned long pixel = xmesa_color_to_pixel(ctx, color[RCOMP],
- color[GCOMP], color[BCOMP], color[ACOMP], xmesa->pixelformat);
- y = YFLIP(xrb, y);
- for (i=0;i<n;i++,x++) {
- if (!mask || mask[i]) {
- XMesaPutPixel( img, x, y, pixel );
- }
- }
-}
-
-
-static void
-put_mono_row_ci_ximage( PUT_MONO_ROW_ARGS )
-{
- const GLuint colorIndex = *((GLuint *) value);
- GET_XRB(xrb);
- XMesaImage *img = xrb->ximage;
- register GLuint i;
- y = YFLIP(xrb, y);
- for (i=0;i<n;i++,x++) {
- if (!mask || mask[i]) {
- XMesaPutPixel( img, x, y, colorIndex );
- }
- }
-}
-
-
-/*
- * Write a span of identical PF_TRUEDITHER pixels to an XImage.
- */
-static void put_mono_row_TRUEDITHER_ximage( PUT_MONO_ROW_ARGS )
-{
- const GLubyte *color = (const GLubyte *) value;
- GET_XRB(xrb);
- XMesaContext xmesa = XMESA_CONTEXT(ctx);
- XMesaImage *img = xrb->ximage;
- const GLint r = color[RCOMP], g = color[GCOMP], b = color[BCOMP];
- GLuint i;
- y = YFLIP(xrb, y);
- for (i=0;i<n;i++) {
- if (!mask || mask[i]) {
- unsigned long p;
- PACK_TRUEDITHER( p, x+i, y, r, g, b);
- XMesaPutPixel( img, x+i, y, p );
- }
- }
-}
-
-
-/*
- * Write a span of identical 8A8B8G8R pixels to an XImage.
- */
-static void put_mono_row_8A8B8G8R_ximage( PUT_MONO_ROW_ARGS )
-{
- const GLubyte *color = (const GLubyte *) value;
- GET_XRB(xrb);
- XMesaContext xmesa = XMESA_CONTEXT(ctx);
- GLuint i, *ptr;
- const unsigned long pixel = xmesa_color_to_pixel(ctx, color[RCOMP],
- color[GCOMP], color[BCOMP], color[ACOMP], xmesa->pixelformat);
- ptr = PIXEL_ADDR4(xrb, x, y );
- for (i=0;i<n;i++) {
- if (!mask || mask[i]) {
- ptr[i] = pixel;
- }
- }
-}
-
-/*
- * Write a span of identical 8A8R8G8B pixels to an XImage.
- */
-static void put_mono_row_8A8R8G8B_ximage( PUT_MONO_ROW_ARGS )
-{
- const GLubyte *color = (const GLubyte *) value;
- GET_XRB(xrb);
- GLuint i, *ptr;
- XMesaContext xmesa = XMESA_CONTEXT(ctx);
- const unsigned long pixel = xmesa_color_to_pixel(ctx, color[RCOMP],
- color[GCOMP], color[BCOMP], color[ACOMP], xmesa->pixelformat);
- ptr = PIXEL_ADDR4(xrb, x, y );
- for (i=0;i<n;i++) {
- if (!mask || mask[i]) {
- ptr[i] = pixel;
- }
- }
-}
-
-
-/*
- * Write a span of identical 8R8G8B pixels to an XImage.
- */
-static void put_mono_row_8R8G8B_ximage( PUT_MONO_ROW_ARGS )
-{
- const GLubyte *color = (const GLubyte *) value;
- GET_XRB(xrb);
- const GLuint pixel = PACK_8R8G8B(color[RCOMP], color[GCOMP], color[BCOMP]);
- GLuint *ptr = PIXEL_ADDR4(xrb, x, y );
- GLuint i;
- for (i=0;i<n;i++) {
- if (!mask || mask[i]) {
- ptr[i] = pixel;
- }
- }
-}
-
-
-/*
- * Write a span of identical 8R8G8B pixels to an XImage.
- */
-static void put_mono_row_8R8G8B24_ximage( PUT_MONO_ROW_ARGS )
-{
- const GLubyte *color = (const GLubyte *) value;
- GET_XRB(xrb);
- const GLubyte r = color[RCOMP];
- const GLubyte g = color[GCOMP];
- const GLubyte b = color[BCOMP];
- GLuint i;
- bgr_t *ptr = PIXEL_ADDR3(xrb, x, y );
- for (i=0;i<n;i++) {
- if (!mask || mask[i]) {
- ptr[i].r = r;
- ptr[i].g = g;
- ptr[i].b = b;
- }
- }
-}
-
-
-/*
- * Write a span of identical DITHER pixels to an XImage.
- */
-static void put_mono_row_DITHER_ximage( PUT_MONO_ROW_ARGS )
-{
- const GLubyte *color = (const GLubyte *) value;
- GET_XRB(xrb);
- const GLubyte r = color[RCOMP], g = color[GCOMP], b = color[BCOMP];
- XMesaImage *img = xrb->ximage;
- int yy = YFLIP(xrb, y);
- register GLuint i;
- XDITHER_SETUP(yy);
- for (i=0;i<n;i++,x++) {
- if (!mask || mask[i]) {
- XMesaPutPixel( img, x, yy, XDITHER( x, r, g, b ) );
- }
- }
-}
-
-
-/*
- * Write a span of identical 8-bit DITHER pixels to an XImage.
- */
-static void put_mono_row_DITHER8_ximage( PUT_MONO_ROW_ARGS )
-{
- const GLubyte *color = (const GLubyte *) value;
- GET_XRB(xrb);
- const GLubyte r = color[RCOMP], g = color[GCOMP], b = color[BCOMP];
- register GLubyte *ptr = PIXEL_ADDR1(xrb, x, y);
- register GLuint i;
- XDITHER_SETUP(y);
- for (i=0;i<n;i++,x++) {
- if (!mask || mask[i]) {
- ptr[i] = (GLubyte) XDITHER( x, r, g, b );
- }
- }
-}
-
-
-/*
- * Write a span of identical 8-bit LOOKUP pixels to an XImage.
- */
-static void put_mono_row_LOOKUP8_ximage( PUT_MONO_ROW_ARGS )
-{
- const GLubyte *color = (const GLubyte *) value;
- GET_XRB(xrb);
- register GLuint i;
- register GLubyte *ptr = PIXEL_ADDR1(xrb, x, y);
- GLubyte pixel;
- LOOKUP_SETUP;
- pixel = LOOKUP(color[RCOMP], color[GCOMP], color[BCOMP]);
- for (i=0;i<n;i++) {
- if (!mask || mask[i]) {
- ptr[i] = pixel;
- }
- }
-}
-
-
-/*
- * Write a span of identical PF_1BIT pixels to an XImage.
- */
-static void put_mono_row_1BIT_ximage( PUT_MONO_ROW_ARGS )
-{
- const GLubyte *color = (const GLubyte *) value;
- const XMesaContext xmesa = XMESA_CONTEXT(ctx);
- GET_XRB(xrb);
- const GLubyte r = color[RCOMP], g = color[GCOMP], b = color[BCOMP];
- XMesaImage *img = xrb->ximage;
- register GLuint i;
- SETUP_1BIT;
- y = YFLIP(xrb, y);
- for (i=0;i<n;i++,x++) {
- if (!mask || mask[i]) {
- XMesaPutPixel( img, x, y, DITHER_1BIT( x, y, r, g, b ) );
- }
- }
-}
-
-
-/*
- * Write a span of identical HPCR pixels to an XImage.
- */
-static void put_mono_row_HPCR_ximage( PUT_MONO_ROW_ARGS )
-{
- const GLubyte *color = (const GLubyte *) value;
- GET_XRB(xrb);
- const XMesaContext xmesa = XMESA_CONTEXT(ctx);
- const GLubyte r = color[RCOMP], g = color[GCOMP], b = color[BCOMP];
- register GLubyte *ptr = PIXEL_ADDR1(xrb, x, y);
- register GLuint i;
- for (i=0;i<n;i++,x++) {
- if (!mask || mask[i]) {
- ptr[i] = DITHER_HPCR( x, y, r, g, b );
+ switch (w) {
+ case 0:
+ break;
+ case 1:
+ pixel = *ptr4 & 0xff000000;
+ pixel |= rgba[i][BCOMP];
+ pixel |= rgba[i][GCOMP] << 8;
+ pixel |= rgba[i][RCOMP] << 16;
+ *ptr4 = pixel;
+ break;
+ case 2:
+ pixel = rgba[i][BCOMP];
+ pixel |= rgba[i][GCOMP] << 8;
+ pixel |= rgba[i++][RCOMP] << 16;
+ pixel |= rgba[i][BCOMP] << 24;
+ *ptr4++ = pixel;
+ pixel = *ptr4 & 0xffff0000;
+ pixel |= rgba[i][GCOMP];
+ pixel |= rgba[i][RCOMP] << 8;
+ *ptr4 = pixel;
+ break;
+ case 3:
+ pixel = rgba[i][BCOMP];
+ pixel |= rgba[i][GCOMP] << 8;
+ pixel |= rgba[i++][RCOMP] << 16;
+ pixel |= rgba[i][BCOMP] << 24;
+ *ptr4++ = pixel;
+ pixel = rgba[i][GCOMP];
+ pixel |= rgba[i++][RCOMP] << 8;
+ pixel |= rgba[i][BCOMP] << 16;
+ pixel |= rgba[i][GCOMP] << 24;
+ *ptr4++ = pixel;
+ pixel = *ptr4 & 0xffffff00;
+ pixel |= rgba[i][RCOMP];
+ *ptr4 = pixel;
+ break;
}
}
}
/*
- * Write a span of identical 8-bit GRAYSCALE pixels to an XImage.
+ * Write a span of PF_5R6G5B-format pixels to an ximage.
*/
-static void put_mono_row_GRAYSCALE8_ximage( PUT_MONO_ROW_ARGS )
+static void put_row_5R6G5B_ximage( PUT_ROW_ARGS )
{
- const GLubyte *color = (const GLubyte *) value;
+ const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
GET_XRB(xrb);
- const GLubyte p = GRAY_RGB(color[RCOMP], color[GCOMP], color[BCOMP]);
- GLubyte *ptr = (GLubyte *) PIXEL_ADDR1(xrb, x, y);
- GLuint i;
- for (i=0;i<n;i++) {
- if (!mask || mask[i]) {
- ptr[i] = p;
+ register GLuint i;
+ register GLushort *ptr = PIXEL_ADDR2(xrb, x, y);
+ if (mask) {
+ for (i=0;i<n;i++) {
+ if (mask[i]) {
+ ptr[i] = PACK_5R6G5B( rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] );
+ }
+ }
+ }
+ else {
+ /* draw all pixels */
+#if defined(__i386__) /* word stores don't have to be on 4-byte boundaries */
+ GLuint *ptr32 = (GLuint *) ptr;
+ GLuint extraPixel = (n & 1);
+ n -= extraPixel;
+ for (i = 0; i < n; i += 2) {
+ GLuint p0, p1;
+ p0 = PACK_5R6G5B(rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP]);
+ p1 = PACK_5R6G5B(rgba[i+1][RCOMP], rgba[i+1][GCOMP], rgba[i+1][BCOMP]);
+ *ptr32++ = (p1 << 16) | p0;
+ }
+ if (extraPixel) {
+ ptr[n] = PACK_5R6G5B(rgba[n][RCOMP], rgba[n][GCOMP], rgba[n][BCOMP]);
+ }
+#else
+ for (i = 0; i < n; i++) {
+ ptr[i] = PACK_5R6G5B(rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP]);
}
+#endif
}
}
-
/*
- * Write a span of identical PF_DITHER_5R6G5B pixels to an XImage.
+ * Write a span of PF_DITHER_5R6G5B-format pixels to an ximage.
*/
-static void put_mono_row_DITHER_5R6G5B_ximage( PUT_MONO_ROW_ARGS )
+static void put_row_DITHER_5R6G5B_ximage( PUT_ROW_ARGS )
{
- const GLubyte *color = (const GLubyte *) value;
+ const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
GET_XRB(xrb);
const XMesaContext xmesa = XMESA_CONTEXT(ctx);
- register GLushort *ptr = PIXEL_ADDR2(xrb, x, y );
- const GLint r = color[RCOMP], g = color[GCOMP], b = color[BCOMP];
- GLuint i;
- y = YFLIP(xrb, y);
- for (i=0;i<n;i++) {
- if (!mask || mask[i]) {
- PACK_TRUEDITHER(ptr[i], x+i, y, r, g, b);
+ register GLuint i;
+ register GLushort *ptr = PIXEL_ADDR2(xrb, x, y);
+ const GLint y2 = YFLIP(xrb, y);
+ if (mask) {
+ for (i=0;i<n;i++,x++) {
+ if (mask[i]) {
+ PACK_TRUEDITHER( ptr[i], x, y2, rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] );
+ }
+ }
+ }
+ else {
+ /* draw all pixels */
+#if defined(__i386__) /* word stores don't have to be on 4-byte boundaries */
+ GLuint *ptr32 = (GLuint *) ptr;
+ GLuint extraPixel = (n & 1);
+ n -= extraPixel;
+ for (i = 0; i < n; i += 2, x += 2) {
+ GLuint p0, p1;
+ PACK_TRUEDITHER( p0, x, y2, rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] );
+ PACK_TRUEDITHER( p1, x+1, y2, rgba[i+1][RCOMP], rgba[i+1][GCOMP], rgba[i+1][BCOMP] );
+ *ptr32++ = (p1 << 16) | p0;
+ }
+ if (extraPixel) {
+ PACK_TRUEDITHER( ptr[n], x+n, y2, rgba[n][RCOMP], rgba[n][GCOMP], rgba[n][BCOMP]);
+ }
+#else
+ for (i = 0; i < n; i++, x++) {
+ PACK_TRUEDITHER( ptr[i], x, y2, rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP]);
}
+#endif
}
}
-
/**********************************************************************/
-/*** Write MONO COLOR PIXELS functions ***/
+/*** Write COLOR PIXEL functions ***/
/**********************************************************************/
-#define PUT_MONO_VALUES_ARGS \
- GLcontext *ctx, struct gl_renderbuffer *rb, \
- GLuint n, const GLint x[], const GLint y[], \
- const void *value, const GLubyte mask[]
+#define PUT_VALUES_ARGS \
+ struct gl_context *ctx, struct gl_renderbuffer *rb, \
+ GLuint n, const GLint x[], const GLint y[], \
+ const void *values, const GLubyte mask[]
/*
- * Write an array of identical pixels to a pixmap.
+ * Write an array of PF_TRUECOLOR pixels to a pixmap.
*/
-static void put_mono_values_pixmap( PUT_MONO_VALUES_ARGS )
-{
- const GLubyte *color = (const GLubyte *) value;
- const XMesaContext xmesa = XMESA_CONTEXT(ctx);
- GET_XRB(xrb);
- XMesaDisplay *dpy = xmesa->xm_visual->display;
- XMesaDrawable buffer = xrb->drawable;
- XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
- register GLuint i;
- const unsigned long pixel = xmesa_color_to_pixel(ctx, color[RCOMP],
- color[GCOMP], color[BCOMP], color[ACOMP], xmesa->pixelformat);
- XMesaSetForeground( xmesa->display, gc, pixel );
- for (i=0;i<n;i++) {
- if (mask[i]) {
- XMesaDrawPoint( dpy, buffer, gc,
- (int) x[i], (int) YFLIP(xrb, y[i]) );
- }
- }
-}
-
-
-static void
-put_mono_values_ci_pixmap( PUT_MONO_VALUES_ARGS )
+static void put_values_TRUECOLOR_pixmap( PUT_VALUES_ARGS )
{
- const GLuint colorIndex = *((GLuint *) value);
+ const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
const XMesaContext xmesa = XMESA_CONTEXT(ctx);
GET_XRB(xrb);
XMesaDisplay *dpy = xmesa->xm_visual->display;
XMesaDrawable buffer = xrb->drawable;
XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
register GLuint i;
- XMesaSetForeground( xmesa->display, gc, colorIndex );
for (i=0;i<n;i++) {
if (mask[i]) {
- XMesaDrawPoint( dpy, buffer, gc,
- (int) x[i], (int) YFLIP(xrb, y[i]) );
+ unsigned long p;
+ PACK_TRUECOLOR( p, rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] );
+ XMesaSetForeground( dpy, gc, p );
+ XMesaDrawPoint( dpy, buffer, gc, (int) x[i], (int) YFLIP(xrb, y[i]) );
}
}
}
/*
* Write an array of PF_TRUEDITHER pixels to a pixmap.
*/
-static void put_mono_values_TRUEDITHER_pixmap( PUT_MONO_VALUES_ARGS )
+static void put_values_TRUEDITHER_pixmap( PUT_VALUES_ARGS )
{
- const GLubyte *color = (const GLubyte *) value;
+ const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
const XMesaContext xmesa = XMESA_CONTEXT(ctx);
GET_XRB(xrb);
XMesaDisplay *dpy = xmesa->xm_visual->display;
XMesaDrawable buffer = xrb->drawable;
XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
register GLuint i;
- const GLubyte r = color[RCOMP], g = color[GCOMP], b = color[BCOMP];
for (i=0;i<n;i++) {
if (mask[i]) {
unsigned long p;
- PACK_TRUEDITHER(p, x[i], y[i], r, g, b);
+ PACK_TRUEDITHER(p, x[i], y[i], rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP]);
XMesaSetForeground( dpy, gc, p );
- XMesaDrawPoint( dpy, buffer, gc,
- (int) x[i], (int) YFLIP(xrb, y[i]) );
+ XMesaDrawPoint( dpy, buffer, gc, (int) x[i], (int) YFLIP(xrb, y[i]) );
}
}
}
/*
- * Write an array of PF_DITHER pixels to a pixmap.
+ * Write an array of PF_8A8B8G8R pixels to a pixmap.
*/
-static void put_mono_values_DITHER_pixmap( PUT_MONO_VALUES_ARGS )
+static void put_values_8A8B8G8R_pixmap( PUT_VALUES_ARGS )
{
- const GLubyte *color = (const GLubyte *) value;
+ const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
const XMesaContext xmesa = XMESA_CONTEXT(ctx);
GET_XRB(xrb);
XMesaDisplay *dpy = xmesa->xm_visual->display;
XMesaDrawable buffer = xrb->drawable;
XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
register GLuint i;
- const GLubyte r = color[RCOMP], g = color[GCOMP], b = color[BCOMP];
- DITHER_SETUP;
for (i=0;i<n;i++) {
if (mask[i]) {
- XMesaSetForeground( dpy, gc, DITHER( x[i], y[i], r, g, b ) );
+ XMesaSetForeground( dpy, gc,
+ PACK_8A8B8G8R( rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP], rgba[i][ACOMP] ));
XMesaDrawPoint( dpy, buffer, gc, (int) x[i], (int) YFLIP(xrb, y[i]) );
}
}
}
-
/*
- * Write an array of PF_1BIT pixels to a pixmap.
+ * Write an array of PF_8A8R8G8B pixels to a pixmap.
*/
-static void put_mono_values_1BIT_pixmap( PUT_MONO_VALUES_ARGS )
+static void put_values_8A8R8G8B_pixmap( PUT_VALUES_ARGS )
{
- const GLubyte *color = (const GLubyte *) value;
+ const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
const XMesaContext xmesa = XMESA_CONTEXT(ctx);
GET_XRB(xrb);
XMesaDisplay *dpy = xmesa->xm_visual->display;
XMesaDrawable buffer = xrb->drawable;
XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
register GLuint i;
- const GLubyte r = color[RCOMP], g = color[GCOMP], b = color[BCOMP];
- SETUP_1BIT;
for (i=0;i<n;i++) {
if (mask[i]) {
- XMesaSetForeground( dpy, gc, DITHER_1BIT( x[i], y[i], r, g, b ) );
+ XMesaSetForeground( dpy, gc,
+ PACK_8A8R8G8B( rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP], rgba[i][ACOMP] ));
XMesaDrawPoint( dpy, buffer, gc, (int) x[i], (int) YFLIP(xrb, y[i]) );
}
}
}
-
/*
- * Write an array of identical pixels to an XImage.
+ * Write an array of PF_8R8G8B pixels to a pixmap.
*/
-static void put_mono_values_ximage( PUT_MONO_VALUES_ARGS )
+static void put_values_8R8G8B_pixmap( PUT_VALUES_ARGS )
{
- const GLubyte *color = (const GLubyte *) value;
+ const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
const XMesaContext xmesa = XMESA_CONTEXT(ctx);
GET_XRB(xrb);
- XMesaImage *img = xrb->ximage;
- register GLuint i;
- const unsigned long pixel = xmesa_color_to_pixel(ctx, color[RCOMP],
- color[GCOMP], color[BCOMP], color[ACOMP], xmesa->pixelformat);
- for (i=0;i<n;i++) {
- if (mask[i]) {
- XMesaPutPixel( img, x[i], YFLIP(xrb, y[i]), pixel );
- }
- }
-}
-
-
-static void
-put_mono_values_ci_ximage( PUT_MONO_VALUES_ARGS )
-{
- const GLuint colorIndex = *((GLuint *) value);
- GET_XRB(xrb);
- XMesaImage *img = xrb->ximage;
+ XMesaDisplay *dpy = xmesa->xm_visual->display;
+ XMesaDrawable buffer = xrb->drawable;
+ XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
register GLuint i;
for (i=0;i<n;i++) {
if (mask[i]) {
- XMesaPutPixel( img, x[i], YFLIP(xrb, y[i]), colorIndex );
+ XMesaSetForeground( dpy, gc, PACK_8R8G8B( rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] ) );
+ XMesaDrawPoint( dpy, buffer, gc, (int) x[i], (int) YFLIP(xrb, y[i]) );
}
}
}
/*
- * Write an array of identical TRUEDITHER pixels to an XImage.
+ * Write an array of PF_8R8G8B24 pixels to a pixmap.
*/
-static void put_mono_values_TRUEDITHER_ximage( PUT_MONO_VALUES_ARGS )
+static void put_values_8R8G8B24_pixmap( PUT_VALUES_ARGS )
{
- const GLubyte *color = (const GLubyte *) value;
+ const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
const XMesaContext xmesa = XMESA_CONTEXT(ctx);
GET_XRB(xrb);
- XMesaImage *img = xrb->ximage;
- register GLuint i;
- const int r = color[RCOMP], g = color[GCOMP], b = color[BCOMP];
- for (i=0;i<n;i++) {
- if (mask[i]) {
- unsigned long p;
- PACK_TRUEDITHER(p, x[i], YFLIP(xrb, y[i]), r, g, b);
- XMesaPutPixel( img, x[i], YFLIP(xrb, y[i]), p );
- }
- }
-}
-
-
-
-/*
- * Write an array of identical 8A8B8G8R pixels to an XImage
- */
-static void put_mono_values_8A8B8G8R_ximage( PUT_MONO_VALUES_ARGS )
-{
- const GLubyte *color = (const GLubyte *) value;
- GET_XRB(xrb);
- const GLuint p = PACK_8A8B8G8R(color[RCOMP], color[GCOMP],
- color[BCOMP], color[ACOMP]);
+ XMesaDisplay *dpy = xmesa->xm_visual->display;
+ XMesaDrawable buffer = xrb->drawable;
+ XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
register GLuint i;
for (i=0;i<n;i++) {
if (mask[i]) {
- GLuint *ptr = PIXEL_ADDR4(xrb, x[i], y[i] );
- *ptr = p;
+ XMesaSetForeground( dpy, gc, PACK_8R8G8B( rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] ) );
+ XMesaDrawPoint( dpy, buffer, gc, (int) x[i], (int) YFLIP(xrb, y[i]) );
}
}
}
-/*
- * Write an array of identical 8A8R8G8B pixels to an XImage
- */
-static void put_mono_values_8A8R8G8B_ximage( PUT_MONO_VALUES_ARGS )
-{
- const GLubyte *color = (const GLubyte *) value;
- GET_XRB(xrb);
- const GLuint p = PACK_8A8R8G8B(color[RCOMP], color[GCOMP],
- color[BCOMP], color[ACOMP]);
- register GLuint i;
- for (i=0;i<n;i++) {
- if (mask[i]) {
- GLuint *ptr = PIXEL_ADDR4(xrb, x[i], y[i] );
- *ptr = p;
- }
- }
-}
/*
- * Write an array of identical 8R8G8B pixels to an XImage.
+ * Write an array of PF_5R6G5B pixels to a pixmap.
*/
-static void put_mono_values_8R8G8B_ximage( PUT_MONO_VALUES_ARGS )
+static void put_values_5R6G5B_pixmap( PUT_VALUES_ARGS )
{
- const GLubyte *color = (const GLubyte *) value;
+ const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
+ const XMesaContext xmesa = XMESA_CONTEXT(ctx);
GET_XRB(xrb);
+ XMesaDisplay *dpy = xmesa->xm_visual->display;
+ XMesaDrawable buffer = xrb->drawable;
+ XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
register GLuint i;
- const GLuint p = PACK_8R8G8B(color[RCOMP], color[GCOMP], color[BCOMP]);
for (i=0;i<n;i++) {
if (mask[i]) {
- GLuint *ptr = PIXEL_ADDR4(xrb, x[i], y[i] );
- *ptr = p;
+ XMesaSetForeground( dpy, gc, PACK_5R6G5B( rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] ) );
+ XMesaDrawPoint( dpy, buffer, gc, (int) x[i], (int) YFLIP(xrb, y[i]) );
}
}
}
/*
- * Write an array of identical 8R8G8B pixels to an XImage.
+ * Write an array of PF_DITHER_5R6G5B pixels to a pixmap.
*/
-static void put_mono_values_8R8G8B24_ximage( PUT_MONO_VALUES_ARGS )
+static void put_values_DITHER_5R6G5B_pixmap( PUT_VALUES_ARGS )
{
- const GLubyte *color = (const GLubyte *) value;
+ const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
+ const XMesaContext xmesa = XMESA_CONTEXT(ctx);
GET_XRB(xrb);
- const GLubyte r = color[RCOMP], g = color[GCOMP], b = color[BCOMP];
+ XMesaDisplay *dpy = xmesa->xm_visual->display;
+ XMesaDrawable buffer = xrb->drawable;
+ XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
register GLuint i;
for (i=0;i<n;i++) {
if (mask[i]) {
- bgr_t *ptr = PIXEL_ADDR3(xrb, x[i], y[i] );
- ptr->r = r;
- ptr->g = g;
- ptr->b = b;
+ unsigned long p;
+ PACK_TRUEDITHER(p, x[i], y[i], rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] );
+ XMesaSetForeground( dpy, gc, p );
+ XMesaDrawPoint( dpy, buffer, gc, (int) x[i], (int) YFLIP(xrb, y[i]) );
}
}
}
/*
- * Write an array of identical PF_DITHER pixels to an XImage.
+ * Write an array of PF_TRUECOLOR pixels to an ximage.
*/
-static void put_mono_values_DITHER_ximage( PUT_MONO_VALUES_ARGS )
+static void put_values_TRUECOLOR_ximage( PUT_VALUES_ARGS )
{
- const GLubyte *color = (const GLubyte *) value;
+ const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
+ const XMesaContext xmesa = XMESA_CONTEXT(ctx);
GET_XRB(xrb);
- const GLubyte r = color[RCOMP], g = color[GCOMP], b = color[BCOMP];
XMesaImage *img = xrb->ximage;
register GLuint i;
- DITHER_SETUP;
- for (i=0;i<n;i++) {
- if (mask[i]) {
- XMesaPutPixel( img, x[i], YFLIP(xrb, y[i]), DITHER( x[i], y[i], r, g, b ) );
- }
- }
-}
-
-
-/*
- * Write an array of identical 8-bit PF_DITHER pixels to an XImage.
- */
-static void put_mono_values_DITHER8_ximage( PUT_MONO_VALUES_ARGS )
-{
- const GLubyte *color = (const GLubyte *) value;
- GET_XRB(xrb);
- const GLubyte r = color[RCOMP], g = color[GCOMP], b = color[BCOMP];
- register GLuint i;
- DITHER_SETUP;
- for (i=0;i<n;i++) {
- if (mask[i]) {
- GLubyte *ptr = PIXEL_ADDR1(xrb, x[i], y[i]);
- *ptr = (GLubyte) DITHER( x[i], y[i], r, g, b );
- }
- }
-}
-
-
-/*
- * Write an array of identical 8-bit PF_LOOKUP pixels to an XImage.
- */
-static void put_mono_values_LOOKUP8_ximage( PUT_MONO_VALUES_ARGS )
-{
- const GLubyte *color = (const GLubyte *) value;
- GET_XRB(xrb);
- register GLuint i;
- GLubyte pixel;
- LOOKUP_SETUP;
- pixel = LOOKUP(color[RCOMP], color[GCOMP], color[BCOMP]);
for (i=0;i<n;i++) {
if (mask[i]) {
- GLubyte *ptr = PIXEL_ADDR1(xrb, x[i], y[i]);
- *ptr = pixel;
+ unsigned long p;
+ PACK_TRUECOLOR( p, rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] );
+ XMesaPutPixel( img, x[i], YFLIP(xrb, y[i]), p );
}
}
}
-
/*
- * Write an array of identical PF_1BIT pixels to an XImage.
+ * Write an array of PF_TRUEDITHER pixels to an XImage.
*/
-static void put_mono_values_1BIT_ximage( PUT_MONO_VALUES_ARGS )
+static void put_values_TRUEDITHER_ximage( PUT_VALUES_ARGS )
{
- const GLubyte *color = (const GLubyte *) value;
+ const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
const XMesaContext xmesa = XMESA_CONTEXT(ctx);
GET_XRB(xrb);
- const GLubyte r = color[RCOMP], g = color[GCOMP], b = color[BCOMP];
XMesaImage *img = xrb->ximage;
register GLuint i;
- SETUP_1BIT;
- for (i=0;i<n;i++) {
- if (mask[i]) {
- XMesaPutPixel( img, x[i], YFLIP(xrb, y[i]),
- DITHER_1BIT( x[i], y[i], r, g, b ));
- }
- }
-}
-
-
-/*
- * Write an array of identical PF_HPCR pixels to an XImage.
- */
-static void put_mono_values_HPCR_ximage( PUT_MONO_VALUES_ARGS )
-{
- const GLubyte *color = (const GLubyte *) value;
- GET_XRB(xrb);
- const XMesaContext xmesa = XMESA_CONTEXT(ctx);
- const GLubyte r = color[RCOMP], g = color[GCOMP], b = color[BCOMP];
- register GLuint i;
for (i=0;i<n;i++) {
if (mask[i]) {
- GLubyte *ptr = PIXEL_ADDR1(xrb, x[i], y[i]);
- *ptr = DITHER_HPCR( x[i], y[i], r, g, b );
+ unsigned long p;
+ PACK_TRUEDITHER(p, x[i], y[i], rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP]);
+ XMesaPutPixel( img, x[i], YFLIP(xrb, y[i]), p );
}
}
}
/*
- * Write an array of identical 8-bit PF_GRAYSCALE pixels to an XImage.
+ * Write an array of PF_8A8B8G8R pixels to an ximage.
*/
-static void put_mono_values_GRAYSCALE8_ximage( PUT_MONO_VALUES_ARGS )
+static void put_values_8A8B8G8R_ximage( PUT_VALUES_ARGS )
{
- const GLubyte *color = (const GLubyte *) value;
+ const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
GET_XRB(xrb);
register GLuint i;
- register GLubyte p = GRAY_RGB(color[RCOMP], color[GCOMP], color[BCOMP]);
for (i=0;i<n;i++) {
if (mask[i]) {
- GLubyte *ptr = PIXEL_ADDR1(xrb, x[i], y[i]);
- *ptr = p;
+ GLuint *ptr = PIXEL_ADDR4(xrb, x[i], y[i] );
+ *ptr = PACK_8A8B8G8R( rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP], rgba[i][ACOMP] );
}
}
}
-
/*
- * Write an array of identical PF_DITHER_5R6G5B pixels to an XImage.
+ * Write an array of PF_8A8R8G8B pixels to an ximage.
*/
-static void put_mono_values_DITHER_5R6G5B_ximage( PUT_MONO_VALUES_ARGS )
+static void put_values_8A8R8G8B_ximage( PUT_VALUES_ARGS )
{
- const GLubyte *color = (const GLubyte *) value;
+ const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
GET_XRB(xrb);
- const XMesaContext xmesa = XMESA_CONTEXT(ctx);
- const int r = color[RCOMP], g = color[GCOMP], b = color[BCOMP];
register GLuint i;
for (i=0;i<n;i++) {
if (mask[i]) {
- GLushort *ptr = PIXEL_ADDR2(xrb, x[i], y[i] );
- PACK_TRUEDITHER(*ptr, x[i], y[i], r, g, b);
+ GLuint *ptr = PIXEL_ADDR4(xrb, x[i], y[i]);
+ *ptr = PACK_8A8R8G8B( rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP], rgba[i][ACOMP] );
}
}
}
-
-/**********************************************************************/
-/*** Write INDEX SPAN functions ***/
-/**********************************************************************/
-
/*
- * Write a span of CI pixels to a Pixmap.
+ * Write an array of PF_8R8G8B pixels to an ximage.
*/
-static void put_row_ci_pixmap( PUT_ROW_ARGS )
+static void put_values_8R8G8B_ximage( PUT_VALUES_ARGS )
{
- const GLuint *index = (GLuint *) values;
- const XMesaContext xmesa = XMESA_CONTEXT(ctx);
+ const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
GET_XRB(xrb);
- XMesaDisplay *dpy = xmesa->xm_visual->display;
- XMesaDrawable buffer = xrb->drawable;
- XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
register GLuint i;
- y = YFLIP(xrb, y);
- if (mask) {
- for (i=0;i<n;i++,x++) {
- if (mask[i]) {
- XMesaSetForeground( dpy, gc, (unsigned long) index[i] );
- XMesaDrawPoint( dpy, buffer, gc, (int) x, (int) y );
- }
- }
- }
- else {
- for (i=0;i<n;i++,x++) {
- XMesaSetForeground( dpy, gc, (unsigned long) index[i] );
- XMesaDrawPoint( dpy, buffer, gc, (int) x, (int) y );
+ for (i=0;i<n;i++) {
+ if (mask[i]) {
+ GLuint *ptr = PIXEL_ADDR4(xrb, x[i], y[i]);
+ *ptr = PACK_8R8G8B( rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] );
}
}
}
/*
- * Write a span of CI pixels to an XImage.
+ * Write an array of PF_8R8G8B24 pixels to an ximage.
*/
-static void put_row_ci_ximage( PUT_ROW_ARGS )
+static void put_values_8R8G8B24_ximage( PUT_VALUES_ARGS )
{
- const GLuint *index = (const GLuint *) values;
+ const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
GET_XRB(xrb);
- XMesaImage *img = xrb->ximage;
register GLuint i;
- y = YFLIP(xrb, y);
- if (mask) {
- for (i=0;i<n;i++,x++) {
- if (mask[i]) {
- XMesaPutPixel( img, x, y, (unsigned long) index[i] );
- }
- }
- }
- else {
- for (i=0;i<n;i++,x++) {
- XMesaPutPixel( img, x, y, (unsigned long) index[i] );
+ for (i=0;i<n;i++) {
+ if (mask[i]) {
+ bgr_t *ptr = PIXEL_ADDR3(xrb, x[i], y[i] );
+ ptr->r = rgba[i][RCOMP];
+ ptr->g = rgba[i][GCOMP];
+ ptr->b = rgba[i][BCOMP];
}
}
}
-/**********************************************************************/
-/*** Write INDEX PIXELS functions ***/
-/**********************************************************************/
-
/*
- * Write an array of CI pixels to a Pixmap.
+ * Write an array of PF_5R6G5B pixels to an ximage.
*/
-static void put_values_ci_pixmap( PUT_VALUES_ARGS )
+static void put_values_5R6G5B_ximage( PUT_VALUES_ARGS )
{
- const GLuint *index = (const GLuint *) values;
- const XMesaContext xmesa = XMESA_CONTEXT(ctx);
+ const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
GET_XRB(xrb);
- XMesaDisplay *dpy = xmesa->xm_visual->display;
- XMesaDrawable buffer = xrb->drawable;
- XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
register GLuint i;
for (i=0;i<n;i++) {
if (mask[i]) {
- XMesaSetForeground( dpy, gc, (unsigned long) index[i] );
- XMesaDrawPoint( dpy, buffer, gc, (int) x[i], (int) YFLIP(xrb, y[i]) );
+ GLushort *ptr = PIXEL_ADDR2(xrb, x[i], y[i] );
+ *ptr = PACK_5R6G5B( rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] );
}
}
}
/*
- * Write an array of CI pixels to an XImage.
+ * Write an array of PF_DITHER_5R6G5B pixels to an ximage.
*/
-static void put_values_ci_ximage( PUT_VALUES_ARGS )
+static void put_values_DITHER_5R6G5B_ximage( PUT_VALUES_ARGS )
{
- const GLuint *index = (const GLuint *) values;
+ const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
GET_XRB(xrb);
- XMesaImage *img = xrb->ximage;
+ const XMesaContext xmesa = XMESA_CONTEXT(ctx);
register GLuint i;
for (i=0;i<n;i++) {
if (mask[i]) {
- XMesaPutPixel(img, x[i], YFLIP(xrb, y[i]), (unsigned long) index[i]);
+ GLushort *ptr = PIXEL_ADDR2(xrb, x[i], y[i] );
+ PACK_TRUEDITHER( *ptr, x[i], y[i], rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] );
}
}
}
-
/**********************************************************************/
/***** Pixel reading *****/
/**********************************************************************/
-#ifndef XFree86Server
/**
* Do clip testing prior to calling XGetImage. If any of the region lies
* outside the screen's bounds, XGetImage will return NULL.
* else return number of pixels to skip in the destination array.
*/
static int
-clip_for_xgetimage(GLcontext *ctx, GLuint *n, GLint *x, GLint *y)
+clip_for_xgetimage(struct gl_context *ctx, XMesaPixmap pixmap, GLuint *n, GLint *x, GLint *y)
{
XMesaContext xmesa = XMESA_CONTEXT(ctx);
XMesaBuffer source = XMESA_BUFFER(ctx->DrawBuffer);
GLint dx, dy;
if (source->type == PBUFFER || source->type == PIXMAP)
return 0;
- XTranslateCoordinates(xmesa->display, source->frontxrb->pixmap, rootWin,
+ XTranslateCoordinates(xmesa->display, pixmap, rootWin,
*x, *y, &dx, &dy, &child);
if (dx >= screenWidth) {
/* totally clipped on right */
}
return 0;
}
-#endif
-
-
-/*
- * Read a horizontal span of color-index pixels.
- */
-static void
-get_row_ci(GLcontext *ctx, struct gl_renderbuffer *rb,
- GLuint n, GLint x, GLint y, void *values)
-{
- GLuint *index = (GLuint *) values;
- const XMesaContext xmesa = XMESA_CONTEXT(ctx);
- GET_XRB(xrb);
- GLuint i;
-
- y = YFLIP(xrb, y);
-
- if (xrb->pixmap) {
-#ifndef XFree86Server
- XMesaImage *span = NULL;
- int error;
- int k = clip_for_xgetimage(ctx, &n, &x, &y);
- if (k < 0)
- return;
- index += k;
-
- catch_xgetimage_errors( xmesa->display );
- span = XGetImage( xmesa->display, xrb->pixmap,
- x, y, n, 1, AllPlanes, ZPixmap );
- error = check_xgetimage_errors();
- if (span && !error) {
- for (i=0;i<n;i++) {
- index[i] = (GLuint) XMesaGetPixel( span, i, 0 );
- }
- }
- else {
- /* return 0 pixels */
- for (i=0;i<n;i++) {
- index[i] = 0;
- }
- }
- if (span) {
- XMesaDestroyImage( span );
- }
-#else
- (*xmesa->display->GetImage)(xrb->drawable,
- x, y, n, 1, ZPixmap,
- ~0L, (pointer)index);
-#endif
- }
- else if (xrb->ximage) {
- XMesaImage *img = xrb->ximage;
- for (i=0;i<n;i++,x++) {
- index[i] = (GLuint) XMesaGetPixel( img, x, y );
- }
- }
-}
-
/*
* Read a horizontal span of color pixels.
*/
static void
-get_row_rgba(GLcontext *ctx, struct gl_renderbuffer *rb,
+get_row_rgba(struct gl_context *ctx, struct gl_renderbuffer *rb,
GLuint n, GLint x, GLint y, void *values)
{
GLubyte (*rgba)[4] = (GLubyte (*)[4]) values;
const XMesaContext xmesa = XMESA_CONTEXT(ctx);
GET_XRB(xrb);
- XMesaBuffer source = XMESA_BUFFER(ctx->DrawBuffer);
if (xrb->pixmap) {
/* Read from Pixmap or Window */
XMesaImage *span = NULL;
int error;
-#ifdef XFree86Server
- span = XMesaCreateImage(xmesa->xm_visual->BitsPerPixel, n, 1, NULL);
- span->data = (char *)MALLOC(span->height * span->bytes_per_line);
- error = (!span->data);
- (*xmesa->display->GetImage)(xrb->drawable,
- x, YFLIP(xrb, y), n, 1, ZPixmap,
- ~0L, (pointer)span->data);
-#else
int k;
y = YFLIP(xrb, y);
- k = clip_for_xgetimage(ctx, &n, &x, &y);
+ k = clip_for_xgetimage(ctx, xrb->pixmap, &n, &x, &y);
if (k < 0)
return;
rgba += k;
span = XGetImage( xmesa->display, xrb->pixmap,
x, y, n, 1, AllPlanes, ZPixmap );
error = check_xgetimage_errors();
-#endif
if (span && !error) {
switch (xmesa->pixelformat) {
case PF_Truecolor:
}
}
break;
- case PF_HPCR:
- {
- GLubyte *ptr1 = (GLubyte *) span->data;
- GLuint i;
- for (i=0;i<n;i++) {
- GLubyte p = *ptr1++;
- rgba[i][RCOMP] = p & 0xE0;
- rgba[i][GCOMP] = (p & 0x1C) << 3;
- rgba[i][BCOMP] = (p & 0x03) << 6;
- rgba[i][ACOMP] = 255;
- }
- }
- break;
- case PF_Dither:
- case PF_Lookup:
- case PF_Grayscale:
- {
- GLubyte *rTable = source->pixel_to_r;
- GLubyte *gTable = source->pixel_to_g;
- GLubyte *bTable = source->pixel_to_b;
- if (GET_VISUAL_DEPTH(xmesa->xm_visual)==8) {
- const GLubyte *ptr1 = (GLubyte *) span->data;
- GLuint i;
- for (i=0;i<n;i++) {
- unsigned long p = *ptr1++;
- rgba[i][RCOMP] = rTable[p];
- rgba[i][GCOMP] = gTable[p];
- rgba[i][BCOMP] = bTable[p];
- rgba[i][ACOMP] = 255;
- }
- }
- else {
- GLuint i;
- for (i=0;i<n;i++) {
- unsigned long p = XMesaGetPixel( span, i, 0 );
- rgba[i][RCOMP] = rTable[p];
- rgba[i][GCOMP] = gTable[p];
- rgba[i][BCOMP] = bTable[p];
- rgba[i][ACOMP] = 255;
- }
- }
- }
- break;
- case PF_1Bit:
- {
- int bitFlip = xmesa->xm_visual->bitFlip;
- GLuint i;
- for (i=0;i<n;i++) {
- unsigned long p;
- p = XMesaGetPixel( span, i, 0 ) ^ bitFlip;
- rgba[i][RCOMP] = (GLubyte) (p * 255);
- rgba[i][GCOMP] = (GLubyte) (p * 255);
- rgba[i][BCOMP] = (GLubyte) (p * 255);
- rgba[i][ACOMP] = 255;
- }
- }
- break;
default:
_mesa_problem(NULL,"Problem in DD.read_color_span (1)");
return;
}
}
break;
- case PF_HPCR:
- {
- const GLubyte *ptr1 = PIXEL_ADDR1(xrb, x, y);
- GLuint i;
- for (i=0;i<n;i++) {
- GLubyte p = *ptr1++;
- rgba[i][RCOMP] = p & 0xE0;
- rgba[i][GCOMP] = (p & 0x1C) << 3;
- rgba[i][BCOMP] = (p & 0x03) << 6;
- rgba[i][ACOMP] = 255;
- }
- }
- break;
- case PF_Dither:
- case PF_Lookup:
- case PF_Grayscale:
- {
- const GLubyte *rTable = source->pixel_to_r;
- const GLubyte *gTable = source->pixel_to_g;
- const GLubyte *bTable = source->pixel_to_b;
- if (GET_VISUAL_DEPTH(xmesa->xm_visual)==8) {
- GLubyte *ptr1 = PIXEL_ADDR1(xrb, x, y);
- GLuint i;
- for (i=0;i<n;i++) {
- unsigned long p = *ptr1++;
- rgba[i][RCOMP] = rTable[p];
- rgba[i][GCOMP] = gTable[p];
- rgba[i][BCOMP] = bTable[p];
- rgba[i][ACOMP] = 255;
- }
- }
- else {
- XMesaImage *img = xrb->ximage;
- GLuint i;
- y = YFLIP(xrb, y);
- for (i=0;i<n;i++,x++) {
- unsigned long p = XMesaGetPixel( img, x, y );
- rgba[i][RCOMP] = rTable[p];
- rgba[i][GCOMP] = gTable[p];
- rgba[i][BCOMP] = bTable[p];
- rgba[i][ACOMP] = 255;
- }
- }
- }
- break;
- case PF_1Bit:
- {
- XMesaImage *img = xrb->ximage;
- int bitFlip = xmesa->xm_visual->bitFlip;
- GLuint i;
- y = YFLIP(xrb, y);
- for (i=0;i<n;i++,x++) {
- unsigned long p;
- p = XMesaGetPixel( img, x, y ) ^ bitFlip;
- rgba[i][RCOMP] = (GLubyte) (p * 255);
- rgba[i][GCOMP] = (GLubyte) (p * 255);
- rgba[i][BCOMP] = (GLubyte) (p * 255);
- rgba[i][ACOMP] = 255;
- }
- }
- break;
default:
_mesa_problem(NULL,"Problem in DD.read_color_span (2)");
return;
-/*
- * Read an array of color index pixels.
- */
-static void
-get_values_ci(GLcontext *ctx, struct gl_renderbuffer *rb,
- GLuint n, const GLint x[], const GLint y[], void *values)
-{
- GLuint *indx = (GLuint *) values;
- const XMesaContext xmesa = XMESA_CONTEXT(ctx);
- GET_XRB(xrb);
- GLuint i;
- if (xrb->pixmap) {
- for (i=0;i<n;i++) {
- indx[i] = (GLuint) read_pixel( xmesa->display, xrb->drawable,
- x[i], YFLIP(xrb, y[i]) );
- }
- }
- else if (xrb->ximage) {
- XMesaImage *img = xrb->ximage;
- for (i=0;i<n;i++) {
- indx[i] = (GLuint) XMesaGetPixel( img, x[i], YFLIP(xrb, y[i]) );
- }
- }
-}
-
-
-
static void
-get_values_rgba(GLcontext *ctx, struct gl_renderbuffer *rb,
+get_values_rgba(struct gl_context *ctx, struct gl_renderbuffer *rb,
GLuint n, const GLint x[], const GLint y[], void *values)
{
GLubyte (*rgba)[4] = (GLubyte (*)[4]) values;
GET_XRB(xrb);
const XMesaContext xmesa = XMESA_CONTEXT(ctx);
XMesaDisplay *dpy = xmesa->xm_visual->display;
- XMesaBuffer source = XMESA_BUFFER(ctx->DrawBuffer);
register GLuint i;
if (xrb->pixmap) {
rgba[i][ACOMP] = 255;
}
break;
- case PF_HPCR:
- for (i=0;i<n;i++) {
- unsigned long p = read_pixel( dpy, buffer,
- x[i], YFLIP(xrb, y[i]) );
- rgba[i][RCOMP] = (GLubyte) ( p & 0xE0 );
- rgba[i][GCOMP] = (GLubyte) ((p & 0x1C) << 3);
- rgba[i][BCOMP] = (GLubyte) ((p & 0x03) << 6);
- rgba[i][ACOMP] = (GLubyte) 255;
- }
- break;
- case PF_Dither:
- case PF_Lookup:
- case PF_Grayscale:
- {
- GLubyte *rTable = source->pixel_to_r;
- GLubyte *gTable = source->pixel_to_g;
- GLubyte *bTable = source->pixel_to_b;
- for (i=0;i<n;i++) {
- unsigned long p = read_pixel( dpy, buffer,
- x[i], YFLIP(xrb, y[i]) );
- rgba[i][RCOMP] = rTable[p];
- rgba[i][GCOMP] = gTable[p];
- rgba[i][BCOMP] = bTable[p];
- rgba[i][ACOMP] = 255;
- }
- }
- break;
- case PF_1Bit:
- {
- int bitFlip = xmesa->xm_visual->bitFlip;
- for (i=0;i<n;i++) {
- unsigned long p = read_pixel( dpy, buffer,
- x[i], YFLIP(xrb, y[i])) ^ bitFlip;
- rgba[i][RCOMP] = (GLubyte) (p * 255);
- rgba[i][GCOMP] = (GLubyte) (p * 255);
- rgba[i][BCOMP] = (GLubyte) (p * 255);
- rgba[i][ACOMP] = 255;
- }
- }
- break;
default:
_mesa_problem(NULL,"Problem in DD.read_color_pixels (1)");
return;
rgba[i][ACOMP] = 255;
}
break;
- case PF_HPCR:
- for (i=0;i<n;i++) {
- GLubyte *ptr1 = PIXEL_ADDR1(xrb, x[i], y[i]);
- GLubyte p = *ptr1;
- rgba[i][RCOMP] = p & 0xE0;
- rgba[i][GCOMP] = (p & 0x1C) << 3;
- rgba[i][BCOMP] = (p & 0x03) << 6;
- rgba[i][ACOMP] = 255;
- }
- break;
- case PF_Dither:
- case PF_Lookup:
- case PF_Grayscale:
- {
- GLubyte *rTable = source->pixel_to_r;
- GLubyte *gTable = source->pixel_to_g;
- GLubyte *bTable = source->pixel_to_b;
- XMesaImage *img = xrb->ximage;
- for (i=0;i<n;i++) {
- unsigned long p;
- p = XMesaGetPixel( img, x[i], YFLIP(xrb, y[i]) );
- rgba[i][RCOMP] = rTable[p];
- rgba[i][GCOMP] = gTable[p];
- rgba[i][BCOMP] = bTable[p];
- rgba[i][ACOMP] = 255;
- }
- }
- break;
- case PF_1Bit:
- {
- XMesaImage *img = xrb->ximage;
- int bitFlip = xmesa->xm_visual->bitFlip;
- for (i=0;i<n;i++) {
- unsigned long p;
- p = XMesaGetPixel( img, x[i], YFLIP(xrb, y[i]) ) ^ bitFlip;
- rgba[i][RCOMP] = (GLubyte) (p * 255);
- rgba[i][GCOMP] = (GLubyte) (p * 255);
- rgba[i][BCOMP] = (GLubyte) (p * 255);
- rgba[i][ACOMP] = 255;
- }
- }
- break;
default:
_mesa_problem(NULL,"Problem in DD.read_color_pixels (1)");
return;
const GLboolean pixmap = xrb->pixmap ? GL_TRUE : GL_FALSE;
switch (pixelformat) {
- case PF_Index:
- ASSERT(xrb->Base.DataType == GL_UNSIGNED_INT);
- if (pixmap) {
- xrb->Base.PutRow = put_row_ci_pixmap;
- xrb->Base.PutRowRGB = NULL;
- xrb->Base.PutMonoRow = put_mono_row_ci_pixmap;
- xrb->Base.PutValues = put_values_ci_pixmap;
- xrb->Base.PutMonoValues = put_mono_values_ci_pixmap;
- }
- else {
- xrb->Base.PutRow = put_row_ci_ximage;
- xrb->Base.PutRowRGB = NULL;
- xrb->Base.PutMonoRow = put_mono_row_ci_ximage;
- xrb->Base.PutValues = put_values_ci_ximage;
- xrb->Base.PutMonoValues = put_mono_values_ci_ximage;
- }
- break;
case PF_Truecolor:
if (pixmap) {
xrb->Base.PutRow = put_row_TRUECOLOR_pixmap;
- xrb->Base.PutRowRGB = put_row_rgb_TRUECOLOR_pixmap;
- xrb->Base.PutMonoRow = put_mono_row_pixmap;
xrb->Base.PutValues = put_values_TRUECOLOR_pixmap;
- xrb->Base.PutMonoValues = put_mono_values_pixmap;
}
else {
xrb->Base.PutRow = put_row_TRUECOLOR_ximage;
- xrb->Base.PutRowRGB = put_row_rgb_TRUECOLOR_ximage;
- xrb->Base.PutMonoRow = put_mono_row_ximage;
xrb->Base.PutValues = put_values_TRUECOLOR_ximage;
- xrb->Base.PutMonoValues = put_mono_values_ximage;
}
break;
case PF_Dither_True:
if (pixmap) {
xrb->Base.PutRow = put_row_TRUEDITHER_pixmap;
- xrb->Base.PutRowRGB = put_row_rgb_TRUEDITHER_pixmap;
- xrb->Base.PutMonoRow = put_mono_row_TRUEDITHER_pixmap;
xrb->Base.PutValues = put_values_TRUEDITHER_pixmap;
- xrb->Base.PutMonoValues = put_mono_values_TRUEDITHER_pixmap;
}
else {
xrb->Base.PutRow = put_row_TRUEDITHER_ximage;
- xrb->Base.PutRowRGB = put_row_rgb_TRUEDITHER_ximage;
- xrb->Base.PutMonoRow = put_mono_row_TRUEDITHER_ximage;
xrb->Base.PutValues = put_values_TRUEDITHER_ximage;
- xrb->Base.PutMonoValues = put_mono_values_TRUEDITHER_ximage;
}
break;
case PF_8A8B8G8R:
if (pixmap) {
xrb->Base.PutRow = put_row_8A8B8G8R_pixmap;
- xrb->Base.PutRowRGB = put_row_rgb_8A8B8G8R_pixmap;
- xrb->Base.PutMonoRow = put_mono_row_pixmap;
xrb->Base.PutValues = put_values_8A8B8G8R_pixmap;
- xrb->Base.PutMonoValues = put_mono_values_pixmap;
}
else {
xrb->Base.PutRow = put_row_8A8B8G8R_ximage;
- xrb->Base.PutRowRGB = put_row_rgb_8A8B8G8R_ximage;
- xrb->Base.PutMonoRow = put_mono_row_8A8B8G8R_ximage;
xrb->Base.PutValues = put_values_8A8B8G8R_ximage;
- xrb->Base.PutMonoValues = put_mono_values_8A8B8G8R_ximage;
}
break;
case PF_8A8R8G8B:
if (pixmap) {
xrb->Base.PutRow = put_row_8A8R8G8B_pixmap;
- xrb->Base.PutRowRGB = put_row_rgb_8A8R8G8B_pixmap;
- xrb->Base.PutMonoRow = put_mono_row_pixmap;
xrb->Base.PutValues = put_values_8A8R8G8B_pixmap;
- xrb->Base.PutMonoValues = put_mono_values_pixmap;
}
else {
xrb->Base.PutRow = put_row_8A8R8G8B_ximage;
- xrb->Base.PutRowRGB = put_row_rgb_8A8R8G8B_ximage;
- xrb->Base.PutMonoRow = put_mono_row_8A8R8G8B_ximage;
xrb->Base.PutValues = put_values_8A8R8G8B_ximage;
- xrb->Base.PutMonoValues = put_mono_values_8A8R8G8B_ximage;
}
break;
case PF_8R8G8B:
if (pixmap) {
xrb->Base.PutRow = put_row_8R8G8B_pixmap;
- xrb->Base.PutRowRGB = put_row_rgb_8R8G8B_pixmap;
- xrb->Base.PutMonoRow = put_mono_row_pixmap;
xrb->Base.PutValues = put_values_8R8G8B_pixmap;
- xrb->Base.PutMonoValues = put_mono_values_pixmap;
}
else {
xrb->Base.PutRow = put_row_8R8G8B_ximage;
- xrb->Base.PutRowRGB = put_row_rgb_8R8G8B_ximage;
- xrb->Base.PutMonoRow = put_mono_row_8R8G8B_ximage;
xrb->Base.PutValues = put_values_8R8G8B_ximage;
- xrb->Base.PutMonoValues = put_mono_values_8R8G8B_ximage;
}
break;
case PF_8R8G8B24:
if (pixmap) {
xrb->Base.PutRow = put_row_8R8G8B24_pixmap;
- xrb->Base.PutRowRGB = put_row_rgb_8R8G8B24_pixmap;
- xrb->Base.PutMonoRow = put_mono_row_pixmap;
xrb->Base.PutValues = put_values_8R8G8B24_pixmap;
- xrb->Base.PutMonoValues = put_mono_values_pixmap;
}
else {
xrb->Base.PutRow = put_row_8R8G8B24_ximage;
- xrb->Base.PutRowRGB = put_row_rgb_8R8G8B24_ximage;
- xrb->Base.PutMonoRow = put_mono_row_8R8G8B24_ximage;
xrb->Base.PutValues = put_values_8R8G8B24_ximage;
- xrb->Base.PutMonoValues = put_mono_values_8R8G8B24_ximage;
}
break;
case PF_5R6G5B:
if (pixmap) {
xrb->Base.PutRow = put_row_5R6G5B_pixmap;
- xrb->Base.PutRowRGB = put_row_rgb_5R6G5B_pixmap;
- xrb->Base.PutMonoRow = put_mono_row_pixmap;
xrb->Base.PutValues = put_values_5R6G5B_pixmap;
- xrb->Base.PutMonoValues = put_mono_values_pixmap;
}
else {
xrb->Base.PutRow = put_row_5R6G5B_ximage;
- xrb->Base.PutRowRGB = put_row_rgb_5R6G5B_ximage;
- xrb->Base.PutMonoRow = put_mono_row_ximage;
xrb->Base.PutValues = put_values_5R6G5B_ximage;
- xrb->Base.PutMonoValues = put_mono_values_ximage;
}
break;
case PF_Dither_5R6G5B:
if (pixmap) {
xrb->Base.PutRow = put_row_DITHER_5R6G5B_pixmap;
- xrb->Base.PutRowRGB = put_row_rgb_DITHER_5R6G5B_pixmap;
- xrb->Base.PutMonoRow = put_mono_row_TRUEDITHER_pixmap;
xrb->Base.PutValues = put_values_DITHER_5R6G5B_pixmap;
- xrb->Base.PutMonoValues = put_mono_values_TRUEDITHER_pixmap;
}
else {
xrb->Base.PutRow = put_row_DITHER_5R6G5B_ximage;
- xrb->Base.PutRowRGB = put_row_rgb_DITHER_5R6G5B_ximage;
- xrb->Base.PutMonoRow = put_mono_row_DITHER_5R6G5B_ximage;
xrb->Base.PutValues = put_values_DITHER_5R6G5B_ximage;
- xrb->Base.PutMonoValues = put_mono_values_DITHER_5R6G5B_ximage;
- }
- break;
- case PF_Dither:
- if (pixmap) {
- xrb->Base.PutRow = put_row_DITHER_pixmap;
- xrb->Base.PutRowRGB = put_row_rgb_DITHER_pixmap;
- xrb->Base.PutMonoRow = put_mono_row_DITHER_pixmap;
- xrb->Base.PutValues = put_values_DITHER_pixmap;
- xrb->Base.PutMonoValues = put_mono_values_DITHER_pixmap;
- }
- else {
- if (depth == 8) {
- xrb->Base.PutRow = put_row_DITHER8_ximage;
- xrb->Base.PutRowRGB = put_row_rgb_DITHER8_ximage;
- xrb->Base.PutMonoRow = put_mono_row_DITHER8_ximage;
- xrb->Base.PutValues = put_values_DITHER8_ximage;
- xrb->Base.PutMonoValues = put_mono_values_DITHER8_ximage;
- }
- else {
- xrb->Base.PutRow = put_row_DITHER_ximage;
- xrb->Base.PutRowRGB = put_row_rgb_DITHER_ximage;
- xrb->Base.PutMonoRow = put_mono_row_DITHER_ximage;
- xrb->Base.PutValues = put_values_DITHER_ximage;
- xrb->Base.PutMonoValues = put_mono_values_DITHER_ximage;
- }
- }
- break;
- case PF_1Bit:
- if (pixmap) {
- xrb->Base.PutRow = put_row_1BIT_pixmap;
- xrb->Base.PutRowRGB = put_row_rgb_1BIT_pixmap;
- xrb->Base.PutMonoRow = put_mono_row_1BIT_pixmap;
- xrb->Base.PutValues = put_values_1BIT_pixmap;
- xrb->Base.PutMonoValues = put_mono_values_1BIT_pixmap;
- }
- else {
- xrb->Base.PutRow = put_row_1BIT_ximage;
- xrb->Base.PutRowRGB = put_row_rgb_1BIT_ximage;
- xrb->Base.PutMonoRow = put_mono_row_1BIT_ximage;
- xrb->Base.PutValues = put_values_1BIT_ximage;
- xrb->Base.PutMonoValues = put_mono_values_1BIT_ximage;
- }
- break;
- case PF_HPCR:
- if (pixmap) {
- xrb->Base.PutRow = put_row_HPCR_pixmap;
- xrb->Base.PutRowRGB = put_row_rgb_HPCR_pixmap;
- xrb->Base.PutMonoRow = put_mono_row_pixmap;
- xrb->Base.PutValues = put_values_HPCR_pixmap;
- xrb->Base.PutMonoValues = put_mono_values_pixmap;
- }
- else {
- xrb->Base.PutRow = put_row_HPCR_ximage;
- xrb->Base.PutRowRGB = put_row_rgb_HPCR_ximage;
- xrb->Base.PutMonoRow = put_mono_row_HPCR_ximage;
- xrb->Base.PutValues = put_values_HPCR_ximage;
- xrb->Base.PutMonoValues = put_mono_values_HPCR_ximage;
- }
- break;
- case PF_Lookup:
- if (pixmap) {
- xrb->Base.PutRow = put_row_LOOKUP_pixmap;
- xrb->Base.PutRowRGB = put_row_rgb_LOOKUP_pixmap;
- xrb->Base.PutMonoRow = put_mono_row_pixmap;
- xrb->Base.PutValues = put_values_LOOKUP_pixmap;
- xrb->Base.PutMonoValues = put_mono_values_pixmap;
- }
- else {
- if (depth==8) {
- xrb->Base.PutRow = put_row_LOOKUP8_ximage;
- xrb->Base.PutRowRGB = put_row_rgb_LOOKUP8_ximage;
- xrb->Base.PutMonoRow = put_mono_row_LOOKUP8_ximage;
- xrb->Base.PutValues = put_values_LOOKUP8_ximage;
- xrb->Base.PutMonoValues = put_mono_values_LOOKUP8_ximage;
- }
- else {
- xrb->Base.PutRow = put_row_LOOKUP_ximage;
- xrb->Base.PutRowRGB = put_row_rgb_LOOKUP_ximage;
- xrb->Base.PutMonoRow = put_mono_row_ximage;
- xrb->Base.PutValues = put_values_LOOKUP_ximage;
- xrb->Base.PutMonoValues = put_mono_values_ximage;
- }
- }
- break;
- case PF_Grayscale:
- if (pixmap) {
- xrb->Base.PutRow = put_row_GRAYSCALE_pixmap;
- xrb->Base.PutRowRGB = put_row_rgb_GRAYSCALE_pixmap;
- xrb->Base.PutMonoRow = put_mono_row_pixmap;
- xrb->Base.PutValues = put_values_GRAYSCALE_pixmap;
- xrb->Base.PutMonoValues = put_mono_values_pixmap;
- }
- else {
- if (depth == 8) {
- xrb->Base.PutRow = put_row_GRAYSCALE8_ximage;
- xrb->Base.PutRowRGB = put_row_rgb_GRAYSCALE8_ximage;
- xrb->Base.PutMonoRow = put_mono_row_GRAYSCALE8_ximage;
- xrb->Base.PutValues = put_values_GRAYSCALE8_ximage;
- xrb->Base.PutMonoValues = put_mono_values_GRAYSCALE8_ximage;
- }
- else {
- xrb->Base.PutRow = put_row_GRAYSCALE_ximage;
- xrb->Base.PutRowRGB = put_row_rgb_GRAYSCALE_ximage;
- xrb->Base.PutMonoRow = put_mono_row_ximage;
- xrb->Base.PutValues = put_values_GRAYSCALE_ximage;
- xrb->Base.PutMonoValues = put_mono_values_ximage;
- }
}
break;
default:
/* Get functions */
- if (pixelformat == PF_Index) {
- xrb->Base.GetRow = get_row_ci;
- xrb->Base.GetValues = get_values_ci;
- }
- else {
- xrb->Base.GetRow = get_row_rgba;
- xrb->Base.GetValues = get_values_rgba;
- }
+ xrb->Base.GetRow = get_row_rgba;
+ xrb->Base.GetValues = get_values_rgba;
}