ReactOS 0.4.16-dev-2216-ga08d639
dib1bpp.c
Go to the documentation of this file.
1/*
2 * PROJECT: Win32 subsystem
3 * LICENSE: See COPYING in the top level directory
4 * FILE: win32ss/gdi/dib/dib1bpp.c
5 * PURPOSE: Device Independant Bitmap functions, 1bpp
6 * PROGRAMMERS: Jason Filby
7 * Doug Lyons
8 */
9
10#include <win32k.h>
11
12#define NDEBUG
13#include <debug.h>
14
15#define DEC_OR_INC(var, decTrue, amount) \
16 ((var) = (decTrue) ? ((var) - (amount)) : ((var) + (amount)))
17
18VOID
20{
21 PBYTE addr = (PBYTE)SurfObj->pvScan0 + y * SurfObj->lDelta + (x >> 3);
22
23 if (0 == (c & 0x01))
24 *addr &= ~MASK1BPP(x);
25 else
26 *addr |= MASK1BPP(x);
27}
28
31{
32 PBYTE addr = (PBYTE)SurfObj->pvScan0 + y * SurfObj->lDelta + (x >> 3);
33
34 return (*addr & MASK1BPP(x) ? 1 : 0);
35}
36
37VOID
39{
40 while(x1 < x2)
41 {
42 DIB_1BPP_PutPixel(SurfObj, x1, y, c);
43 x1++;
44 }
45}
46
47VOID
49{
50 while(y1 < y2)
51 {
52 DIB_1BPP_PutPixel(SurfObj, x, y1, c);
53 y1++;
54 }
55}
56
57static
60 SURFOBJ* DestSurf,
61 SURFOBJ* SourceSurf,
63 PRECTL DestRect,
64 POINTL *SourcePoint,
65 BOOLEAN bTopToBottom,
66 BOOLEAN bLeftToRight )
67{
68 LONG Height = RECTL_lGetHeight(DestRect);
69 LONG Width = RECTL_lGetWidth(DestRect);
70 BOOLEAN XorBit = !!XLATEOBJ_iXlate(pxlo, 0);
71 BOOLEAN IgnoreSrc = XorBit ^ !XLATEOBJ_iXlate(pxlo, 1);
72 BOOLEAN Overlap = FALSE;
73 BYTE *DstStart, *DstEnd, *SrcStart, *SrcEnd;
74
75 /* Make sure this is as expected */
76 ASSERT(DestRect->left >= 0);
77 ASSERT(DestRect->top >= 0);
78 ASSERT(Height > 0);
79 ASSERT(Width > 0);
80
81 /*
82 * Check if we need to allocate a buffer for our operation.
83 */
84 DstStart = (BYTE*)DestSurf->pvScan0 + DestRect->top * DestSurf->lDelta + DestRect->left / 8;
85 DstEnd = (BYTE*)DestSurf->pvScan0 + (DestRect->bottom - 1) * DestSurf->lDelta + (DestRect->right) / 8;
86 SrcStart = (BYTE*)SourceSurf->pvScan0 + SourcePoint->y * SourceSurf->lDelta + SourcePoint->x / 8;
87 SrcEnd = (BYTE*)SourceSurf->pvScan0 + (SourcePoint->y + Height - 1) * SourceSurf->lDelta + (SourcePoint->x + Width) / 8;
88
89 /* Beware of bitmaps with negative pitch! */
90 if (DstStart > DstEnd)
91 {
92 BYTE* tmp = DstStart;
93 DstStart = DstEnd;
94 DstEnd = tmp;
95 }
96
97 if (SrcStart > SrcEnd)
98 {
99 BYTE* tmp = SrcStart;
100 SrcStart = SrcEnd;
101 SrcEnd = tmp;
102 }
103
104 /* We allocate a new buffer when the two buffers overlap */
105 Overlap = ((SrcStart >= DstStart) && (SrcStart < DstEnd)) || ((SrcEnd >= DstStart) && (SrcEnd < DstEnd));
106
107 if (IgnoreSrc)
108 {
109 LONG y;
110 for (y = 0; y < Height; y++)
111 {
112 for(LONG x = 0; x < Width; x++)
113 {
114 DIB_1BPP_PutPixel(DestSurf, DestRect->left + x, DestRect->top + y, XorBit);
115 }
116 }
117 }
118 else if (!Overlap)
119 {
120 LONG y;
121 for (y = 0; y < Height; y++)
122 {
123 LONG ySrc = bTopToBottom ? SourcePoint->y + Height - y - 1 : SourcePoint->y + y;
124 LONG x;
125
126 for(x = 0; x < Width; x++)
127 {
128 LONG xSrc = bLeftToRight ? SourcePoint->x + Width - x - 1 : SourcePoint->x + x;
129 ULONG Pixel = DIB_1BPP_GetPixel(SourceSurf, xSrc, ySrc);
130 if (XorBit)
131 Pixel = !Pixel;
132 DIB_1BPP_PutPixel(DestSurf, DestRect->left + x, DestRect->top + y, Pixel);
133 }
134 }
135 }
136 else
137 {
138 LONG y;
140 if (!PixBuf)
141 return FALSE;
142 for (y = 0; y < Height; y++)
143 {
144 BYTE* Row = PixBuf + y * ALIGN_UP_BY(Width, 8) / 8;
145 LONG ySrc = bTopToBottom ? SourcePoint->y + Height - y - 1 : SourcePoint->y + y;
146 LONG x;
147
148 for (x = 0; x < Width; x++)
149 {
150 LONG xSrc = bLeftToRight ? SourcePoint->x + Width - x - 1 : SourcePoint->x + x;
151 if ((!DIB_1BPP_GetPixel(SourceSurf, xSrc, ySrc)) == XorBit)
152 Row[x / 8] |= 1 << (x & 7);
153 }
154 }
155
156 for (y = 0; y < Height; y++)
157 {
158 BYTE* Row = PixBuf + y * ALIGN_UP_BY(Width, 8) / 8;
159 LONG x;
160 for (x = 0; x < Width; x++)
161 DIB_1BPP_PutPixel(DestSurf, DestRect->left + x, DestRect->top + y, !!(Row[x/8] & (1 << (x&7))));
162 }
163
164 ExFreePoolWithTag(PixBuf, TAG_DIB);
165 }
166
167 return TRUE;
168}
169
172{
173 ULONG Color;
174 LONG i, j, sx, sy;
175 BOOLEAN bTopToBottom, bLeftToRight;
176
177 // This sets sy to the top line
178 sy = BltInfo->SourcePoint.y;
179
180 DPRINT("DIB_1BPP_BitBltSrcCopy: SrcSurf cx/cy (%d/%d), DestSuft cx/cy (%d/%d) dstRect: (%d,%d)-(%d,%d)\n",
182 BltInfo->DestSurface->sizlBitmap.cx, BltInfo->DestSurface->sizlBitmap.cy,
183 BltInfo->DestRect.left, BltInfo->DestRect.top, BltInfo->DestRect.right, BltInfo->DestRect.bottom);
184
185 /* Get back left to right flip here */
186 bLeftToRight = (BltInfo->DestRect.left > BltInfo->DestRect.right);
187
188 /* Check for top to bottom flip needed. */
189 bTopToBottom = BltInfo->DestRect.top > BltInfo->DestRect.bottom;
190
191 // Make WellOrdered with top < bottom and left < right
193
194 DPRINT("BPP is '%d' & BltInfo->SourcePoint.x is '%d' & BltInfo->SourcePoint.y is '%d'.\n",
195 BltInfo->SourceSurface->iBitmapFormat, BltInfo->SourcePoint.x, BltInfo->SourcePoint.y);
196
197 switch ( BltInfo->SourceSurface->iBitmapFormat )
198 {
199 case BMF_1BPP:
200 DPRINT("1BPP Case Selected with DestRect Width of '%d'.\n",
201 BltInfo->DestRect.right - BltInfo->DestRect.left);
202
204 BltInfo->XlateSourceToDest, &BltInfo->DestRect, &BltInfo->SourcePoint,
205 bTopToBottom, bLeftToRight );
206
207 case BMF_4BPP:
208 DPRINT("4BPP Case Selected with DestRect Width of '%d'.\n",
209 BltInfo->DestRect.right - BltInfo->DestRect.left);
210
211 if (bTopToBottom)
212 {
213 // This sets sy to the bottom line
214 sy += (BltInfo->DestRect.bottom - BltInfo->DestRect.top - 1) * BltInfo->SourceSurface->lDelta;
215 }
216
217 for (j=BltInfo->DestRect.top; j<BltInfo->DestRect.bottom; j++)
218 {
219 sx = BltInfo->SourcePoint.x;
220
221 if (bLeftToRight)
222 {
223 // This sets the sx to the rightmost pixel
224 sx += (BltInfo->DestRect.right - BltInfo->DestRect.left - 1);
225 }
226
227 for (i=BltInfo->DestRect.left; i<BltInfo->DestRect.right; i++)
228 {
231
232 DEC_OR_INC(sx, bLeftToRight, 1);
233 }
234 DEC_OR_INC(sy, bTopToBottom, 1);
235 }
236 break;
237
238 case BMF_8BPP:
239 DPRINT("8BPP-dstRect: (%d,%d)-(%d,%d) and Width of '%d'.\n",
240 BltInfo->DestRect.left, BltInfo->DestRect.top,
241 BltInfo->DestRect.right, BltInfo->DestRect.bottom,
242 BltInfo->DestRect.right - BltInfo->DestRect.left);
243
244 if (bTopToBottom)
245 {
246 // This sets sy to the bottom line
247 sy += (BltInfo->DestRect.bottom - BltInfo->DestRect.top - 1) * BltInfo->SourceSurface->lDelta;
248 }
249
250 for (j=BltInfo->DestRect.top; j<BltInfo->DestRect.bottom; j++)
251 {
252 sx = BltInfo->SourcePoint.x;
253
254 if (bLeftToRight)
255 {
256 // This sets sx to the rightmost pixel
257 sx += (BltInfo->DestRect.right - BltInfo->DestRect.left - 1);
258 }
259
260 for (i=BltInfo->DestRect.left; i<BltInfo->DestRect.right; i++)
261 {
264
265 DEC_OR_INC(sx, bLeftToRight, 1);
266 }
267 DEC_OR_INC(sy, bTopToBottom, 1);
268 }
269 break;
270
271 case BMF_16BPP:
272 DPRINT("16BPP-dstRect: (%d,%d)-(%d,%d) and Width of '%d'.\n",
273 BltInfo->DestRect.left, BltInfo->DestRect.top,
274 BltInfo->DestRect.right, BltInfo->DestRect.bottom,
275 BltInfo->DestRect.right - BltInfo->DestRect.left);
276
277 if (bTopToBottom)
278 {
279 // This sets sy to the bottom line
280 sy += (BltInfo->DestRect.bottom - BltInfo->DestRect.top - 1) * BltInfo->SourceSurface->lDelta;;
281 }
282
283 for (j=BltInfo->DestRect.top; j<BltInfo->DestRect.bottom; j++)
284 {
285 sx = BltInfo->SourcePoint.x;
286
287 if (bLeftToRight)
288 {
289 // This sets the sx to the rightmost pixel
290 sx += (BltInfo->DestRect.right - BltInfo->DestRect.left - 1);
291 }
292
293 for (i=BltInfo->DestRect.left; i<BltInfo->DestRect.right; i++)
294 {
297 DEC_OR_INC(sx, bLeftToRight, 1);
298 }
299 DEC_OR_INC(sy, bTopToBottom, 1);
300 }
301 break;
302
303 case BMF_24BPP:
304
305 DPRINT("24BPP-dstRect: (%d,%d)-(%d,%d) and Width of '%d'.\n",
306 BltInfo->DestRect.left, BltInfo->DestRect.top,
307 BltInfo->DestRect.right, BltInfo->DestRect.bottom,
308 BltInfo->DestRect.right - BltInfo->DestRect.left);
309
310 if (bTopToBottom)
311 {
312 // This sets sy to the bottom line
313 sy += (BltInfo->DestRect.bottom - BltInfo->DestRect.top - 1) * BltInfo->SourceSurface->lDelta;
314 }
315
316 for (j=BltInfo->DestRect.top; j<BltInfo->DestRect.bottom; j++)
317 {
318 sx = BltInfo->SourcePoint.x;
319
320 if (bLeftToRight)
321 {
322 // This sets the sx to the rightmost pixel
323 sx += (BltInfo->DestRect.right - BltInfo->DestRect.left - 1);
324 }
325
326 for (i=BltInfo->DestRect.left; i<BltInfo->DestRect.right; i++)
327 {
330 DEC_OR_INC(sx, bLeftToRight, 1);
331 }
332 DEC_OR_INC(sy, bTopToBottom, 1);
333 }
334 break;
335
336 case BMF_32BPP:
337
338 DPRINT("32BPP-dstRect: (%d,%d)-(%d,%d) and Width of '%d'.\n",
339 BltInfo->DestRect.left, BltInfo->DestRect.top,
340 BltInfo->DestRect.right, BltInfo->DestRect.bottom,
341 BltInfo->DestRect.right - BltInfo->DestRect.left);
342
343 if (bTopToBottom)
344 {
345 // This sets sy to the bottom line
346 sy += BltInfo->DestRect.bottom - BltInfo->DestRect.top - 1;
347 }
348
349 for (j=BltInfo->DestRect.top; j<BltInfo->DestRect.bottom; j++)
350 {
351 sx = BltInfo->SourcePoint.x;
352
353 if (bLeftToRight)
354 {
355 // This sets the sx to the rightmost pixel
356 sx += (BltInfo->DestRect.right - BltInfo->DestRect.left - 1);
357 }
358
359 for (i=BltInfo->DestRect.left; i<BltInfo->DestRect.right; i++)
360 {
363 DEC_OR_INC(sx, bLeftToRight, 1);
364 }
365 DEC_OR_INC(sy, bTopToBottom, 1);
366 }
367 break;
368
369 default:
370 DbgPrint("DIB_1BPP_BitBlt: Unhandled Source BPP: %u\n", BitsPerFormat(BltInfo->SourceSurface->iBitmapFormat));
371 return FALSE;
372 }
373
374 return TRUE;
375}
376
377#ifndef _USE_DIBLIB_
380{
381 LONG DestX, DestY;
382 LONG SourceX, SourceY;
383 LONG PatternY = 0;
384 ULONG Dest, Source = 0, Pattern = 0;
385 ULONG Index;
386 BOOLEAN UsesSource;
387 BOOLEAN UsesPattern;
388 PULONG DestBits;
389 LONG RoundedRight;
390
391 UsesSource = ROP4_USES_SOURCE(BltInfo->Rop4);
392 UsesPattern = ROP4_USES_PATTERN(BltInfo->Rop4);
393
394 RoundedRight = BltInfo->DestRect.right -
395 ((BltInfo->DestRect.right - BltInfo->DestRect.left) & 31);
396 SourceY = BltInfo->SourcePoint.y;
397
398 if (UsesPattern)
399 {
400 if (BltInfo->PatternSurface)
401 {
402 PatternY = (BltInfo->DestRect.top + BltInfo->BrushOrigin.y) %
403 BltInfo->PatternSurface->sizlBitmap.cy;
404 }
405 else
406 {
407 /* FIXME: Shouldn't it be expanded? */
408 if (BltInfo->Brush)
409 Pattern = BltInfo->Brush->iSolidColor;
410 }
411 }
412
413 for (DestY = BltInfo->DestRect.top; DestY < BltInfo->DestRect.bottom; DestY++)
414 {
415 DestX = BltInfo->DestRect.left;
416 SourceX = BltInfo->SourcePoint.x;
417 DestBits = (PULONG)(
418 (PBYTE)BltInfo->DestSurface->pvScan0 +
419 (BltInfo->DestRect.left >> 3) +
420 DestY * BltInfo->DestSurface->lDelta);
421
422 if (DestX & 31)
423 {
424#if 0
425 /* FIXME: This case is completely untested!!! */
426
427 Dest = *((PBYTE)DestBits);
428 NoBits = 31 - (DestX & 31);
429
430 if (UsesSource)
431 {
432 Source = 0;
433 /* FIXME: This is incorrect! */
434 for (Index = 31 - NoBits; Index >= 0; Index++)
435 Source |= (DIB_GetSource(SourceSurf, SourceX + Index, SourceY, ColorTranslation) << (31 - Index));
436 }
437
438 if (BltInfo->PatternSurface)
439 {
440 Pattern = 0;
441 for (k = 31 - NoBits; k >= 0; k++)
442 Pattern |= (DIB_GetSourceIndex(PatternObj, (X + BrushOrigin.x + k) % PatternWidth, PatternY) << (31 - k));
443 }
444
445 Dest = DIB_DoRop(BltInfo->Rop4, Dest, Source, Pattern);
446 Dest &= ~((1 << (31 - NoBits)) - 1);
447 Dest |= *((PBYTE)DestBits) & ((1 << (31 - NoBits)) - 1);
448
449 *DestBits = Dest;
450
451 DestX += NoBits;
452 SourceX += NoBits;
453#endif
454 }
455
456 for (; DestX < RoundedRight; DestX += 32, DestBits++, SourceX += 32)
457 {
458 Dest = *DestBits;
459
460 if (UsesSource)
461 {
462 Source = 0;
463 for (Index = 0; Index < 8; Index++)
464 {
465 Source |= DIB_GetSource(BltInfo->SourceSurface, SourceX + Index, SourceY, BltInfo->XlateSourceToDest) << (7 - Index);
466 Source |= DIB_GetSource(BltInfo->SourceSurface, SourceX + Index + 8, SourceY, BltInfo->XlateSourceToDest) << (8 + (7 - Index));
467 Source |= DIB_GetSource(BltInfo->SourceSurface, SourceX + Index + 16, SourceY, BltInfo->XlateSourceToDest) << (16 + (7 - Index));
468 Source |= DIB_GetSource(BltInfo->SourceSurface, SourceX + Index + 24, SourceY, BltInfo->XlateSourceToDest) << (24 + (7 - Index));
469 }
470 }
471
472 if (BltInfo->PatternSurface)
473 {
474 Pattern = 0;
475 for (Index = 0; Index < 8; Index++)
476 {
477 Pattern |= DIB_GetSourceIndex(BltInfo->PatternSurface, (DestX + BltInfo->BrushOrigin.x + Index) % BltInfo->PatternSurface->sizlBitmap.cx, PatternY) << (7 - Index);
478 Pattern |= DIB_GetSourceIndex(BltInfo->PatternSurface, (DestX + BltInfo->BrushOrigin.x + Index + 8) % BltInfo->PatternSurface->sizlBitmap.cx, PatternY) << (8 + (7 - Index));
479 Pattern |= DIB_GetSourceIndex(BltInfo->PatternSurface, (DestX + BltInfo->BrushOrigin.x + Index + 16) % BltInfo->PatternSurface->sizlBitmap.cx, PatternY) << (16 + (7 - Index));
480 Pattern |= DIB_GetSourceIndex(BltInfo->PatternSurface, (DestX + BltInfo->BrushOrigin.x + Index + 24) % BltInfo->PatternSurface->sizlBitmap.cx, PatternY) << (24 + (7 - Index));
481 }
482 }
483
484 *DestBits = DIB_DoRop(BltInfo->Rop4, Dest, Source, Pattern);
485 }
486
487 if (DestX < BltInfo->DestRect.right)
488 {
489 for (; DestX < BltInfo->DestRect.right; DestX++, SourceX++)
490 {
491 Dest = DIB_1BPP_GetPixel(BltInfo->DestSurface, DestX, DestY);
492
493 if (UsesSource)
494 {
495 Source = DIB_GetSource(BltInfo->SourceSurface, SourceX, SourceY, BltInfo->XlateSourceToDest);
496 }
497
498 if (BltInfo->PatternSurface)
499 {
500 Pattern = DIB_GetSourceIndex(BltInfo->PatternSurface, (DestX + BltInfo->BrushOrigin.x) % BltInfo->PatternSurface->sizlBitmap.cx, PatternY);
501 }
502
503 DIB_1BPP_PutPixel(BltInfo->DestSurface, DestX, DestY, DIB_DoRop(BltInfo->Rop4, Dest, Source, Pattern) & 0xF);
504 }
505 }
506
507 SourceY++;
508 if (BltInfo->PatternSurface)
509 {
510 PatternY++;
511 PatternY %= BltInfo->PatternSurface->sizlBitmap.cy;
512 }
513 }
514
515 return TRUE;
516}
517
518/* BitBlt Optimize */
520DIB_1BPP_ColorFill(SURFOBJ* DestSurface, RECTL* DestRect, ULONG color)
521{
522 LONG DestY;
523
524 /* Make WellOrdered with top < bottom and left < right */
525 RECTL_vMakeWellOrdered(DestRect);
526
527 for (DestY = DestRect->top; DestY< DestRect->bottom; DestY++)
528 {
529 DIB_1BPP_HLine(DestSurface, DestRect->left, DestRect->right, DestY, color);
530 }
531 return TRUE;
532}
533#endif // !_USE_DIBLIB_
534
537 RECTL* DestRect, RECTL *SourceRect,
538 XLATEOBJ *ColorTranslation, ULONG iTransColor)
539{
540 return FALSE;
541}
542
543/* EOF */
#define ALIGN_UP_BY(size, align)
unsigned char BOOLEAN
VOID DIB_1BPP_PutPixel(SURFOBJ *SurfObj, LONG x, LONG y, ULONG c)
Definition: dib1bpp.c:19
#define DEC_OR_INC(var, decTrue, amount)
Definition: dib1bpp.c:15
VOID DIB_1BPP_HLine(SURFOBJ *SurfObj, LONG x1, LONG x2, LONG y, ULONG c)
Definition: dib1bpp.c:38
BOOLEAN DIB_1BPP_ColorFill(SURFOBJ *DestSurface, RECTL *DestRect, ULONG color)
Definition: dib1bpp.c:520
BOOLEAN DIB_1BPP_BitBltSrcCopy(PBLTINFO BltInfo)
Definition: dib1bpp.c:171
BOOLEAN DIB_1BPP_TransparentBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf, RECTL *DestRect, RECTL *SourceRect, XLATEOBJ *ColorTranslation, ULONG iTransColor)
Definition: dib1bpp.c:536
ULONG DIB_1BPP_GetPixel(SURFOBJ *SurfObj, LONG x, LONG y)
Definition: dib1bpp.c:30
static BOOLEAN DIB_1BPP_BitBltSrcCopy_From1BPP(SURFOBJ *DestSurf, SURFOBJ *SourceSurf, XLATEOBJ *pxlo, PRECTL DestRect, POINTL *SourcePoint, BOOLEAN bTopToBottom, BOOLEAN bLeftToRight)
Definition: dib1bpp.c:59
VOID DIB_1BPP_VLine(SURFOBJ *SurfObj, LONG x, LONG y1, LONG y2, ULONG c)
Definition: dib1bpp.c:48
BOOLEAN DIB_1BPP_BitBlt(PBLTINFO BltInfo)
Definition: dib1bpp.c:379
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define PagedPool
Definition: env_spec_w32.h:308
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
GLint GLint GLint GLint GLint GLint y
Definition: gl.h:1548
GLuint color
Definition: glext.h:6243
const GLubyte * c
Definition: glext.h:8905
GLint GLint bottom
Definition: glext.h:7726
GLenum const GLvoid * addr
Definition: glext.h:9621
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
Definition: glfuncs.h:250
#define DbgPrint
Definition: hal.h:12
#define ROP4_USES_PATTERN(Rop4)
Definition: inteng.h:46
#define ROP4_USES_SOURCE(Rop4)
Definition: inteng.h:45
#define ASSERT(a)
Definition: mode.c:44
#define ExFreePoolWithTag(_P, _T)
Definition: module.h:1109
FORCEINLINE PVOID ExAllocatePoolZero(ULONG PoolType, SIZE_T NumberOfBytes, ULONG Tag)
Definition: precomp.h:45
int k
Definition: mpi.c:3369
_In_ UINT _In_ UINT _In_ PNDIS_PACKET Source
Definition: ndis.h:3169
BYTE * PBYTE
Definition: pedump.c:66
long LONG
Definition: pedump.c:60
#define DPRINT
Definition: sndvol32.h:73
long bottom
Definition: polytest.cpp:53
long right
Definition: polytest.cpp:53
long top
Definition: polytest.cpp:53
long left
Definition: polytest.cpp:53
Definition: dib.h:21
RECTL DestRect
Definition: dib.h:26
POINTL BrushOrigin
Definition: dib.h:29
SURFOBJ * SourceSurface
Definition: dib.h:23
SURFOBJ * DestSurface
Definition: dib.h:22
ROP4 Rop4
Definition: dib.h:30
SURFOBJ * PatternSurface
Definition: dib.h:24
BRUSHOBJ * Brush
Definition: dib.h:28
POINTL SourcePoint
Definition: dib.h:27
XLATEOBJ * XlateSourceToDest
Definition: dib.h:25
ULONG iSolidColor
Definition: winddi.h:234
LONG y
Definition: windef.h:130
LONG x
Definition: windef.h:129
LONG cx
Definition: kdterminal.h:27
LONG cy
Definition: kdterminal.h:28
SIZEL sizlBitmap
Definition: winddi.h:1209
ULONG iBitmapFormat
Definition: winddi.h:1215
PVOID pvScan0
Definition: winddi.h:1212
LONG lDelta
Definition: winddi.h:1213
uint32_t * PULONG
Definition: typedefs.h:59
uint32_t ULONG
Definition: typedefs.h:59
_In_ HFONT _Out_ PUINT _Out_ PUINT Width
Definition: font.h:89
_In_ HFONT _Out_ PUINT Height
Definition: font.h:88
_In_ WDFCOLLECTION _In_ ULONG Index
ULONG DIB_DoRop(ULONG Rop, ULONG Dest, ULONG Source, ULONG Pattern)
Definition: dib.c:92
ULONG DIB_8BPP_GetPixel(SURFOBJ *, LONG, LONG)
Definition: dib8bpp.c:29
ULONG DIB_24BPP_GetPixel(SURFOBJ *, LONG, LONG)
Definition: dib24bpp.c:29
#define DIB_GetSource(SourceSurf, sx, sy, ColorTranslation)
Definition: dib.h:136
ULONG DIB_4BPP_GetPixel(SURFOBJ *, LONG, LONG)
Definition: dib4bpp.c:26
ULONG DIB_16BPP_GetPixel(SURFOBJ *, LONG, LONG)
Definition: dib16bpp.c:30
#define DIB_GetSourceIndex(SourceSurf, sx, sy)
Definition: dib.h:141
ULONG DIB_32BPP_GetPixel(SURFOBJ *, LONG, LONG)
Definition: dib32bpp.c:30
#define MASK1BPP(x)
Definition: dib.h:132
#define BitsPerFormat(Format)
Definition: surface.h:109
VOID FASTCALL RECTL_vMakeWellOrdered(_Inout_ RECTL *prcl)
Definition: rect.c:81
FORCEINLINE LONG RECTL_lGetWidth(_In_ const RECTL *prcl)
Definition: rect.h:93
FORCEINLINE LONG RECTL_lGetHeight(_In_ const RECTL *prcl)
Definition: rect.h:86
#define TAG_DIB
Definition: tags.h:17
#define BMF_16BPP
Definition: winddi.h:358
_In_ SURFOBJ _In_ CLIPOBJ _In_opt_ XLATEOBJ _In_ RECTL _In_ RECTL _In_ ULONG iTransColor
Definition: winddi.h:4195
#define BMF_8BPP
Definition: winddi.h:357
#define BMF_1BPP
Definition: winddi.h:355
ENGAPI ULONG APIENTRY XLATEOBJ_iXlate(_In_ XLATEOBJ *pxlo, _In_ ULONG iColor)
Definition: xlateobj.c:909
_In_ SURFOBJ _In_ CLIPOBJ _In_opt_ XLATEOBJ * pxlo
Definition: winddi.h:3416
#define BMF_24BPP
Definition: winddi.h:359
_In_ CLIPOBJ _In_ BRUSHOBJ _In_ LONG x1
Definition: winddi.h:3708
#define BMF_32BPP
Definition: winddi.h:360
_In_ CLIPOBJ _In_ BRUSHOBJ _In_ LONG _In_ LONG y1
Definition: winddi.h:3709
_In_ CLIPOBJ _In_ BRUSHOBJ _In_ LONG _In_ LONG _In_ LONG _In_ LONG y2
Definition: winddi.h:3711
_In_ CLIPOBJ _In_ BRUSHOBJ _In_ LONG _In_ LONG _In_ LONG x2
Definition: winddi.h:3710
#define BMF_4BPP
Definition: winddi.h:356
unsigned char BYTE
Definition: xxhash.c:193