You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
266 lines
7.4 KiB
266 lines
7.4 KiB
/******************************Module*Header*******************************\
|
|
* Module Name: bltlnk.hxx
|
|
*
|
|
* This contains the structures used in StinkBlt
|
|
*
|
|
* Created: 16-Aug-1993
|
|
* Author: Mark Enstrom Marke
|
|
*
|
|
* Copyright (c) 1993-1999 Microsoft Corporation
|
|
\**************************************************************************/
|
|
|
|
// We pass a pointer to this data struct for every rectangle we blt to.
|
|
|
|
typedef struct _BLTLNKINFO
|
|
{
|
|
//
|
|
// These first fields are all constant. They are set in StinkerBlt
|
|
// and don't change for each clip rect.
|
|
//
|
|
|
|
RECTL rclDst; // Target offset and extent
|
|
SURFACE *pdioDst; // Target surface
|
|
SURFACE *pdioSrc; // Source surface
|
|
SURFACE *pdioMsk; // Mask
|
|
ECLIPOBJ *pco; // Clip through this
|
|
XLATE *pxlo; // Color translation
|
|
EBRUSHOBJ *pdbrush; // Brush data (from cbRealizeBrush)
|
|
BYTE rop3; // Raster operation
|
|
|
|
LONG iDir; // Tells which way to enumerate the rects
|
|
LONG xDir; // This tells which direction we go
|
|
LONG yDir; // This tells which direction we go
|
|
PBYTE pjSrc; // This is pdioSrc->pvBitsInt(), top scanline
|
|
PBYTE pjDst; // This is pdioDst->pvBitsInt(), top scanline
|
|
PBYTE pjMsk; // This is pdioMsk->pvBitsInt(), top scanline
|
|
// or the msk from a brush.
|
|
PBYTE pjPat; // This is pdioPat->pvBitsInt(), top scanline
|
|
LONG lDeltaSrc; // How many bytes to jump down 1 scanline
|
|
LONG lDeltaDst; // How many bytes to jump down 1 scanline
|
|
LONG lDeltaPat; // How many bytes to jump down 1 scanline
|
|
LONG lDeltaMsk; // How many bytes to jump down 1 scanline
|
|
|
|
//
|
|
// The next four all have yDir taken into account.
|
|
//
|
|
|
|
LONG lDeltaSrcDir; // How many bytes to jump yDir scanline
|
|
LONG lDeltaDstDir; // How many bytes to jump yDir scanline
|
|
LONG lDeltaPatDir; // How many bytes to jump yDir scanline
|
|
LONG lDeltaMskDir; // How many bytes to jump yDir scanline
|
|
|
|
//
|
|
// This is the Src information
|
|
//
|
|
|
|
ULONG xSrcOrg;
|
|
ULONG ySrcOrg;
|
|
|
|
//
|
|
// This is the Pat information.
|
|
//
|
|
|
|
ULONG iSolidColor; // if not 0xFFFFFFFF then the color of the brush
|
|
ULONG cxPat; // width of brush
|
|
ULONG cyPat; // height of brush
|
|
LONG xPatOrg; // Where the brush origin is
|
|
LONG yPatOrg; // Where the brush origin is
|
|
|
|
//
|
|
// This is the Msk information.
|
|
//
|
|
|
|
ULONG cxMsk; // width of mask
|
|
LONG cyMsk; // height of mask
|
|
LONG xMskOrg; // Where the mask origin is
|
|
LONG yMskOrg; // Where the mask origin is
|
|
BYTE NegateMsk; // If 0xFF then negate mask when deciding whether to store
|
|
|
|
LONG xDstStart; // This is the number of pels in to start
|
|
LONG xSrcStart; // number of pels in to start, inclusive
|
|
LONG xSrcEnd; // the pel to stop at, exclusive
|
|
LONG xSrc; // left edge in src
|
|
LONG ySrc; // top edge in src
|
|
|
|
//
|
|
// This is the Rop info
|
|
//
|
|
|
|
ULONG RopSrc;
|
|
ULONG RopDst;
|
|
|
|
BOOL bNeedSrc;
|
|
BOOL bNeedDst;
|
|
BOOL bNeedPat;
|
|
BOOL bNeedMsk;
|
|
|
|
} BLTLNKINFO,*PBLTLNKINFO;
|
|
|
|
typedef struct _BLTLNK_MASKINFO {
|
|
PBYTE pjMsk;
|
|
PBYTE pjMskBase;
|
|
LONG cyMsk;
|
|
LONG iyMsk;
|
|
LONG cxMsk;
|
|
LONG ixMsk;
|
|
LONG lDeltaMskDir;
|
|
BYTE NegateMsk;
|
|
} BLTLNK_MASKINFO,*PBLTLNK_MASKINFO;
|
|
|
|
#define BB_RECT_LIMIT 20
|
|
|
|
BOOL
|
|
BltLnk(
|
|
SURFACE *pdioDst, // Target surface
|
|
SURFACE *pdioSrc, // Source surface
|
|
SURFACE *pdioMsk, // Mask
|
|
ECLIPOBJ *pco, // Clip through this
|
|
XLATE *pxlo, // Color translation
|
|
PRECTL prclDst, // Target offset and extent
|
|
PPOINTL pptlSrc, // Source offset
|
|
PPOINTL pptlMask, // Mask offset
|
|
BRUSHOBJ *pdbrush, // Brush data (from cbRealizeBrush)
|
|
PPOINTL pptlBrush, // Brush offset (origin)
|
|
ROP4 rop4 // Raster operation
|
|
);
|
|
|
|
typedef VOID (*PFN_BLTLNKROP)(PULONG,PULONG,PULONG,ULONG);
|
|
|
|
|
|
VOID
|
|
vRop2Function0(PULONG,PULONG,PULONG,ULONG);
|
|
VOID
|
|
vRop2Function1(PULONG,PULONG,PULONG,ULONG);
|
|
VOID
|
|
vRop2Function2(PULONG,PULONG,PULONG,ULONG);
|
|
VOID
|
|
vRop2Function3(PULONG,PULONG,PULONG,ULONG);
|
|
VOID
|
|
vRop2Function4(PULONG,PULONG,PULONG,ULONG);
|
|
VOID
|
|
vRop2Function5(PULONG,PULONG,PULONG,ULONG);
|
|
VOID
|
|
vRop2Function6(PULONG,PULONG,PULONG,ULONG);
|
|
VOID
|
|
vRop2Function7(PULONG,PULONG,PULONG,ULONG);
|
|
VOID
|
|
vRop2Function8(PULONG,PULONG,PULONG,ULONG);
|
|
VOID
|
|
vRop2Function9(PULONG,PULONG,PULONG,ULONG);
|
|
VOID
|
|
vRop2FunctionA(PULONG,PULONG,PULONG,ULONG);
|
|
VOID
|
|
vRop2FunctionB(PULONG,PULONG,PULONG,ULONG);
|
|
VOID
|
|
vRop2FunctionC(PULONG,PULONG,PULONG,ULONG);
|
|
VOID
|
|
vRop2FunctionD(PULONG,PULONG,PULONG,ULONG);
|
|
VOID
|
|
vRop2FunctionE(PULONG,PULONG,PULONG,ULONG);
|
|
VOID
|
|
vRop2FunctionF(PULONG,PULONG,PULONG,ULONG);
|
|
|
|
VOID
|
|
BltLnkSrcCopyMsk1(PBLTINFO,PBLTLNK_MASKINFO,PULONG,PULONG);
|
|
VOID
|
|
BltLnkSrcCopyMsk4(PBLTINFO,PBLTLNK_MASKINFO,PULONG,PULONG);
|
|
VOID
|
|
BltLnkSrcCopyMsk8(PBLTINFO,PBLTLNK_MASKINFO,PULONG,PULONG);
|
|
VOID
|
|
BltLnkSrcCopyMsk16(PBLTINFO,PBLTLNK_MASKINFO,PULONG,PULONG);
|
|
VOID
|
|
BltLnkSrcCopyMsk24(PBLTINFO,PBLTLNK_MASKINFO,PULONG,PULONG);
|
|
VOID
|
|
BltLnkSrcCopyMsk32(PBLTINFO,PBLTLNK_MASKINFO,PULONG,PULONG);
|
|
|
|
VOID
|
|
BltLnkPatMaskCopy1(PBLTINFO,ULONG,PULONG,BYTE);
|
|
VOID
|
|
BltLnkPatMaskCopy4(PBLTINFO,ULONG,PULONG,BYTE);
|
|
VOID
|
|
BltLnkPatMaskCopy8(PBLTINFO,ULONG,PULONG,BYTE);
|
|
VOID
|
|
BltLnkPatMaskCopy16(PBLTINFO,ULONG,PULONG,BYTE);
|
|
VOID
|
|
BltLnkPatMaskCopy24(PBLTINFO,ULONG,PULONG,BYTE);
|
|
VOID
|
|
BltLnkPatMaskCopy32(PBLTINFO,ULONG,PULONG,BYTE);
|
|
|
|
VOID
|
|
BltLnkRect(
|
|
PBLTLNKINFO pBlt,
|
|
PRECTL prcl
|
|
);
|
|
|
|
VOID BltLnkRead(
|
|
PULONG pulDst,
|
|
PULONG pulSrc,
|
|
ULONG cx
|
|
);
|
|
|
|
VOID BltLnkReadPat(
|
|
PBYTE pjDst,
|
|
ULONG ixDst,
|
|
PBYTE pjPat,
|
|
ULONG cxPat,
|
|
ULONG ixPat,
|
|
ULONG PixelCount,
|
|
ULONG BytesPerPixel
|
|
);
|
|
|
|
VOID
|
|
BltLnkReadPat1 (
|
|
PBYTE pjDst,
|
|
ULONG ixDst,
|
|
PBYTE pjPat,
|
|
ULONG cxPat,
|
|
ULONG ixPat,
|
|
ULONG PixelCount,
|
|
ULONG BytesPerPixel
|
|
);
|
|
VOID
|
|
BltLnkReadPat4 (
|
|
PBYTE pjDst,
|
|
ULONG ixDst,
|
|
PBYTE pjPat,
|
|
ULONG cxPat,
|
|
ULONG ixPat,
|
|
ULONG PixelCount,
|
|
ULONG BytesPerPixel
|
|
);
|
|
|
|
VOID
|
|
BltLnkAccel6666 (
|
|
PBYTE pjSrcStart,
|
|
PBYTE pjDstStart,
|
|
LONG lDeltaSrcDir,
|
|
LONG lDeltaDstDir,
|
|
LONG cx,
|
|
LONG cy
|
|
);
|
|
|
|
VOID
|
|
BltLnkAccel8888 (
|
|
PBYTE pjSrcStart,
|
|
PBYTE pjDstStart,
|
|
LONG lDeltaSrcDir,
|
|
LONG lDeltaDstDir,
|
|
LONG cx,
|
|
LONG cy
|
|
);
|
|
|
|
VOID
|
|
BltLnkAccelEEEE (
|
|
PBYTE pjSrcStart,
|
|
PBYTE pjDstStart,
|
|
LONG lDeltaSrcDir,
|
|
LONG lDeltaDstDir,
|
|
LONG cx,
|
|
LONG cy
|
|
);
|
|
|
|
typedef VOID (*PFN_SRCCOPYMASK)(PBLTINFO,PBLTLNK_MASKINFO,PULONG,PULONG);
|
|
typedef VOID (*PFN_READPAT)(PBYTE,ULONG,PBYTE,ULONG,ULONG,ULONG,ULONG);
|
|
|
|
typedef VOID (*PFN_PATMASKCOPY)(PBLTINFO,ULONG,PULONG,BYTE);
|
|
|