136 lines
3.0 KiB
C
136 lines
3.0 KiB
C
/*
|
|
* $Id$
|
|
*
|
|
* Copyright © 2004 Keith Packard
|
|
*
|
|
* Permission to use, copy, modify, distribute, and sell this software and its
|
|
* documentation for any purpose is hereby granted without fee, provided that
|
|
* the above copyright notice appear in all copies and that both that
|
|
* copyright notice and this permission notice appear in supporting
|
|
* documentation, and that the name of Keith Packard not be used in
|
|
* advertising or publicity pertaining to distribution of the software without
|
|
* specific, written prior permission. Keith Packard makes no
|
|
* representations about the suitability of this software for any purpose. It
|
|
* is provided "as is" without express or implied warranty.
|
|
*
|
|
* KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
|
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
|
|
* EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
|
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
|
|
* DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
|
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
* PERFORMANCE OF THIS SOFTWARE.
|
|
*/
|
|
|
|
#ifdef HAVE_DIX_CONFIG_H
|
|
#include <dix-config.h>
|
|
#endif
|
|
|
|
#include "fb.h"
|
|
|
|
#ifdef RENDER
|
|
|
|
#include "picturestr.h"
|
|
#include "mipict.h"
|
|
#include "renderedge.h"
|
|
#include "fbpict.h"
|
|
|
|
/*
|
|
* 8 bit alpha
|
|
*/
|
|
|
|
#define N_BITS 8
|
|
#define rasterizeEdges fbRasterizeEdges8
|
|
|
|
#define DefineAlpha(line,x) \
|
|
CARD8 *__ap = (CARD8 *) line + (x)
|
|
|
|
#define StepAlpha __ap++
|
|
|
|
#define AddAlpha(a) { \
|
|
CARD16 __a = a + *__ap; \
|
|
*__ap = ((CARD8) ((__a) | (0 - ((__a) >> 8)))); \
|
|
}
|
|
|
|
#include "fbedgeimp.h"
|
|
|
|
#undef AddAlpha
|
|
#undef StepAlpha
|
|
#undef DefineAlpha
|
|
#undef rasterizeEdges
|
|
#undef N_BITS
|
|
|
|
/*
|
|
* 4 bit alpha
|
|
*/
|
|
|
|
#define N_BITS 4
|
|
#define rasterizeEdges fbRasterizeEdges4
|
|
|
|
#if BITMAP_BIT_ORDER == LSBFirst
|
|
#define Shift4(o) ((o) << 2)
|
|
#else
|
|
#define Shift4(o) ((1-(o)) << 2)
|
|
#endif
|
|
|
|
#define Get4(x,o) (((x) >> Shift4(o)) & 0xf)
|
|
#define Put4(x,o,v) (((x) & ~(0xf << Shift4(o))) | (((v) & 0xf) << Shift4(o)))
|
|
|
|
#define DefineAlpha(line,x) \
|
|
CARD8 *__ap = (CARD8 *) line + ((x) >> 1); \
|
|
int __ao = (x) & 1
|
|
|
|
#define StepAlpha ((__ap += __ao), (__ao ^= 1))
|
|
|
|
#define AddAlpha(a) { \
|
|
CARD8 __o = *__ap; \
|
|
CARD8 __a = (a) + Get4(__o, __ao); \
|
|
*__ap = Put4 (__o, __ao, __a | (0 - ((__a) >> 4))); \
|
|
}
|
|
|
|
#include "fbedgeimp.h"
|
|
|
|
#undef AddAlpha
|
|
#undef StepAlpha
|
|
#undef DefineAlpha
|
|
#undef rasterizeEdges
|
|
#undef N_BITS
|
|
|
|
|
|
/*
|
|
* 1 bit alpha
|
|
*/
|
|
|
|
#define N_BITS 1
|
|
#define rasterizeEdges fbRasterizeEdges1
|
|
|
|
#include "fbedgeimp.h"
|
|
|
|
#undef rasterizeEdges
|
|
#undef N_BITS
|
|
|
|
void
|
|
fbRasterizeEdges (FbBits *buf,
|
|
int bpp,
|
|
int width,
|
|
int stride,
|
|
RenderEdge *l,
|
|
RenderEdge *r,
|
|
xFixed t,
|
|
xFixed b)
|
|
{
|
|
switch (bpp) {
|
|
case 1:
|
|
fbRasterizeEdges1 (buf, width, stride, l, r, t, b);
|
|
break;
|
|
case 4:
|
|
fbRasterizeEdges4 (buf, width, stride, l, r, t, b);
|
|
break;
|
|
case 8:
|
|
fbRasterizeEdges8 (buf, width, stride, l, r, t, b);
|
|
break;
|
|
}
|
|
}
|
|
|
|
#endif /* RENDER */
|