source: trunk/src/ddraw/bltFunc.cpp@ 8818

Last change on this file since 8818 was 8818, checked in by sandervl, 23 years ago

fill, SurfGetDC, SurfReleaseDC fixes & changes (see ChangeLog for details)

File size: 19.5 KB
Line 
1/* $Id: bltFunc.cpp,v 1.5 2002-07-01 19:15:26 sandervl Exp $ */
2
3/*
4 * Blitting functions
5 *
6 * Copyright 1999 Markus Montkowski
7 *
8 * Project Odin Software License can be found in LICENSE.TXT
9 *
10 */
11
12#define INCL_BASE
13#include <os2wrap.h>
14#include <win32type.h>
15#include <memory.h>
16#include <misc.h>
17#include "bltFunc.h"
18#include "asmutil.h"
19
20//
21// Blt Functions
22//
23
24#ifndef USE_ASM
25void __cdecl BltSolid8( char* pDst,
26 char* pSrc,
27 DWORD dwWidth,
28 DWORD dwHeight,
29 DWORD dwPitchDst,
30 DWORD dwPitchSrc)
31{
32 dprintf(("DDRAW:BltSolid8\n"));
33 while(dwHeight)
34 {
35 memcpy(pDst,pSrc,dwWidth);
36 pDst += dwPitchDst;
37 pSrc += dwPitchSrc;
38 dwHeight--;
39 }
40}
41void __cdecl BltSolid16(char* pDst,
42 char* pSrc,
43 DWORD dwWidth,
44 DWORD dwHeight,
45 DWORD dwPitchDst,
46 DWORD dwPitchSrc)
47{
48 dprintf(("DDRAW:BltSolid16\n"));
49 dwWidth *=2;
50 while(dwHeight)
51 {
52 memcpy(pDst,pSrc,dwWidth);
53 pDst += dwPitchDst;
54 pSrc += dwPitchSrc;
55 dwHeight--;
56 }
57}
58void __cdecl BltSolid24(char* pDst,
59 char* pSrc,
60 DWORD dwWidth,
61 DWORD dwHeight,
62 DWORD dwPitchDst,
63 DWORD dwPitchSrc)
64{
65 dprintf(("DDRAW:BltSolid24\n"));
66 dwWidth *=3;
67 while(dwHeight)
68 {
69 memcpy(pDst,pSrc,dwWidth);
70 pDst += dwPitchDst;
71 pSrc += dwPitchSrc;
72 dwHeight--;
73 }
74}
75void __cdecl BltSolid32(char* pDst,
76 char* pSrc,
77 DWORD dwWidth,
78 DWORD dwHeight,
79 DWORD dwPitchDst,
80 DWORD dwPitchSrc)
81{
82 dprintf(("DDRAW:BltSolid32\n"));
83 dwWidth *=4;
84 while(dwHeight)
85 {
86 memcpy(pDst,pSrc,dwWidth);
87 pDst += dwPitchDst;
88 pSrc += dwPitchSrc;
89 dwHeight--;
90 }
91}
92#else
93 #define BltSolid8 BltSolid8ASM
94 #define BltSolid16 BltSolid16ASM
95 #define BltSolid24 BltSolid24ASM
96 #define BltSolid32 BltSolid32ASM
97#endif
98
99// without ColorConversion
100void __cdecl BltSolid8to8( char *pDBDst,
101 char *pFBDst,
102 DWORD dwDstTop,
103 DWORD dwDstLeft,
104 DWORD dwPitchDBDst,
105 DWORD dwPitchFBDst,
106 char *pDBSrc,
107 char *pFBSrc,
108 DWORD dwSrcTop,
109 DWORD dwSrcLeft,
110 DWORD dwWidth,
111 DWORD dwHeight,
112 DWORD dwPitchDBSrc,
113 DWORD dwPitchFBSrc
114 )
115{
116 dprintf(("DDRAW:BltSolid8to8\n"));
117 BltSolid8( pDBDst + dwDstLeft + (dwDstTop*dwPitchDBDst),
118 pDBSrc + dwSrcLeft + (dwSrcTop*dwPitchDBSrc),
119 dwWidth,
120 dwHeight,
121 dwPitchDBDst,
122 dwPitchDBSrc);
123}
124void __cdecl BltSolid16to16( char *pDBDst,
125 char *pFBDst,
126 DWORD dwDstTop,
127 DWORD dwDstLeft,
128 DWORD dwPitchDBDst,
129 DWORD dwPitchFBDst,
130 char *pDBSrc,
131 char *pFBSrc,
132 DWORD dwSrcTop,
133 DWORD dwSrcLeft,
134 DWORD dwWidth,
135 DWORD dwHeight,
136 DWORD dwPitchDBSrc,
137 DWORD dwPitchFBSrc
138 )
139{
140 dprintf(("DDRAW:BltSolid16to16\n"));
141 BltSolid16( pDBDst + (dwDstLeft*2) + (dwDstTop*dwPitchDBDst),
142 pDBSrc + (dwSrcLeft*2) + (dwSrcTop*dwPitchDBSrc),
143 dwWidth,
144 dwHeight,
145 dwPitchDBDst,
146 dwPitchDBSrc);
147}
148void __cdecl BltSolid24to24( char *pDBDst,
149 char *pFBDst,
150 DWORD dwDstTop,
151 DWORD dwDstLeft,
152 DWORD dwPitchDBDst,
153 DWORD dwPitchFBDst,
154 char *pDBSrc,
155 char *pFBSrc,
156 DWORD dwSrcTop,
157 DWORD dwSrcLeft,
158 DWORD dwWidth,
159 DWORD dwHeight,
160 DWORD dwPitchDBSrc,
161 DWORD dwPitchFBSrc
162 )
163{
164 dprintf(("DDRAW:BltSolid24to24\n"));
165 BltSolid24( pDBDst + (dwDstLeft*3) + (dwDstTop*dwPitchDBDst),
166 pDBSrc + (dwSrcLeft*3) + (dwSrcTop*dwPitchDBSrc),
167 dwWidth,
168 dwHeight,
169 dwPitchDBDst,
170 dwPitchDBSrc);
171}
172void __cdecl BltSolid32to32( char *pDBDst,
173 char *pFBDst,
174 DWORD dwDstTop,
175 DWORD dwDstLeft,
176 DWORD dwPitchDBDst,
177 DWORD dwPitchFBDst,
178 char *pDBSrc,
179 char *pFBSrc,
180 DWORD dwSrcTop,
181 DWORD dwSrcLeft,
182 DWORD dwWidth,
183 DWORD dwHeight,
184 DWORD dwPitchDBSrc,
185 DWORD dwPitchFBSrc
186 )
187{
188 dprintf(("DDRAW:BltSolid32to32\n"));
189 BltSolid32( pDBDst + (dwDstLeft*4) + (dwDstTop*dwPitchDBDst),
190 pDBSrc + (dwSrcLeft*4) + (dwSrcTop*dwPitchDBSrc),
191 dwWidth,
192 dwHeight,
193 dwPitchDBDst,
194 dwPitchDBSrc);
195}
196
197// With ColorConversion
198
199// 8 to X bit
200void __cdecl BltSolid8to16( char *pDBDst,
201 char *pFBDst,
202 DWORD dwDstTop,
203 DWORD dwDstLeft,
204 DWORD dwPitchDBDst,
205 DWORD dwPitchFBDst,
206 char *pDBSrc,
207 char *pFBSrc,
208 DWORD dwSrcTop,
209 DWORD dwSrcLeft,
210 DWORD dwWidth,
211 DWORD dwHeight,
212 DWORD dwPitchDBSrc,
213 DWORD dwPitchFBSrc
214 )
215{
216 dprintf(("DDRAW:BltSolid8to16\n"));
217
218 BltSolid8( pFBDst + dwDstLeft + (dwDstTop*dwPitchFBDst),
219 pFBSrc + dwSrcLeft + (dwSrcTop*dwPitchFBSrc),
220 dwWidth,
221 dwHeight,
222 dwPitchFBDst,
223 dwPitchFBSrc);
224 BltSolid16( pDBDst + (dwDstLeft*2) + (dwDstTop*dwPitchDBDst),
225 pDBSrc + (dwSrcLeft*2) + (dwSrcTop*dwPitchDBSrc),
226 dwWidth,
227 dwHeight,
228 dwPitchDBDst,
229 dwPitchDBSrc);
230
231}
232
233void __cdecl BltSolid8to24( char *pDBDst,
234 char *pFBDst,
235 DWORD dwDstTop,
236 DWORD dwDstLeft,
237 DWORD dwPitchDBDst,
238 DWORD dwPitchFBDst,
239 char *pDBSrc,
240 char *pFBSrc,
241 DWORD dwSrcTop,
242 DWORD dwSrcLeft,
243 DWORD dwWidth,
244 DWORD dwHeight,
245 DWORD dwPitchDBSrc,
246 DWORD dwPitchFBSrc
247 )
248{
249 dprintf(("DDRAW:BltSolid8to24\n"));
250 BltSolid8( pFBDst + dwDstLeft + (dwDstTop*dwPitchFBDst),
251 pFBSrc + dwSrcLeft + (dwSrcTop*dwPitchFBSrc),
252 dwWidth,
253 dwHeight,
254 dwPitchFBDst,
255 dwPitchFBSrc);
256 BltSolid24( pDBDst + (dwDstLeft*3) + (dwDstTop*dwPitchDBDst),
257 pDBSrc + (dwSrcLeft*3) + (dwSrcTop*dwPitchDBSrc),
258 dwWidth,
259 dwHeight,
260 dwPitchDBDst,
261 dwPitchDBSrc);
262}
263void __cdecl BltSolid8to32( char *pDBDst,
264 char *pFBDst,
265 DWORD dwDstTop,
266 DWORD dwDstLeft,
267 DWORD dwPitchDBDst,
268 DWORD dwPitchFBDst,
269 char *pDBSrc,
270 char *pFBSrc,
271 DWORD dwSrcTop,
272 DWORD dwSrcLeft,
273 DWORD dwWidth,
274 DWORD dwHeight,
275 DWORD dwPitchDBSrc,
276 DWORD dwPitchFBSrc
277 )
278{
279 dprintf(("DDRAW:BltSolid8to32\n"));
280 BltSolid8( pFBDst + dwDstLeft + (dwDstTop*dwPitchFBDst),
281 pFBSrc + dwSrcLeft + (dwSrcTop*dwPitchFBSrc),
282 dwWidth,
283 dwHeight,
284 dwPitchFBDst,
285 dwPitchFBSrc);
286 BltSolid32( pDBDst + (dwDstLeft*4) + (dwDstTop*dwPitchDBDst),
287 pDBSrc + (dwSrcLeft*4) + (dwSrcTop*dwPitchDBSrc),
288 dwWidth,
289 dwHeight,
290 dwPitchDBDst,
291 dwPitchDBSrc);
292}
293
294// 16 to X bit
295void __cdecl BltSolid16to8( char *pDBDst,
296 char *pFBDst,
297 DWORD dwDstTop,
298 DWORD dwDstLeft,
299 DWORD dwPitchDBDst,
300 DWORD dwPitchFBDst,
301 char *pDBSrc,
302 char *pFBSrc,
303 DWORD dwSrcTop,
304 DWORD dwSrcLeft,
305 DWORD dwWidth,
306 DWORD dwHeight,
307 DWORD dwPitchDBSrc,
308 DWORD dwPitchFBSrc
309 )
310{
311 dprintf(("DDRAW:BltSolid16to8\n"));
312 BltSolid8( pDBDst + dwDstLeft + (dwDstTop*dwPitchDBDst),
313 pDBSrc + dwSrcLeft + (dwSrcTop*dwPitchDBSrc),
314 dwWidth,
315 dwHeight,
316 dwPitchDBDst,
317 dwPitchDBSrc);
318 BltSolid16( pFBDst + (dwDstLeft*2) + (dwDstTop*dwPitchFBDst),
319 pFBSrc + (dwSrcLeft*2) + (dwSrcTop*dwPitchFBSrc),
320 dwWidth,
321 dwHeight,
322 dwPitchFBDst,
323 dwPitchFBSrc);
324}
325
326void __cdecl BltSolid16to24( char *pDBDst,
327 char *pFBDst,
328 DWORD dwDstTop,
329 DWORD dwDstLeft,
330 DWORD dwPitchDBDst,
331 DWORD dwPitchFBDst,
332 char *pDBSrc,
333 char *pFBSrc,
334 DWORD dwSrcTop,
335 DWORD dwSrcLeft,
336 DWORD dwWidth,
337 DWORD dwHeight,
338 DWORD dwPitchDBSrc,
339 DWORD dwPitchFBSrc
340 )
341{
342 dprintf(("DDRAW:BltSolid16to24\n"));
343 BltSolid24( pDBDst + (dwDstLeft*3) + (dwDstTop*dwPitchDBDst),
344 pDBSrc + (dwSrcLeft*3) + (dwSrcTop*dwPitchDBSrc),
345 dwWidth,
346 dwHeight,
347 dwPitchDBDst,
348 dwPitchDBSrc);
349 BltSolid16( pFBDst + (dwDstLeft*2) + (dwDstTop*dwPitchFBDst),
350 pFBSrc + (dwSrcLeft*2) + (dwSrcTop*dwPitchFBSrc),
351 dwWidth,
352 dwHeight,
353 dwPitchFBDst,
354 dwPitchFBSrc);
355}
356void __cdecl BltSolid16to32( char *pDBDst,
357 char *pFBDst,
358 DWORD dwDstTop,
359 DWORD dwDstLeft,
360 DWORD dwPitchDBDst,
361 DWORD dwPitchFBDst,
362 char *pDBSrc,
363 char *pFBSrc,
364 DWORD dwSrcTop,
365 DWORD dwSrcLeft,
366 DWORD dwWidth,
367 DWORD dwHeight,
368 DWORD dwPitchDBSrc,
369 DWORD dwPitchFBSrc
370 )
371{
372 dprintf(("DDRAW:BltSolid16to32\n"));
373 BltSolid32( pDBDst + (dwDstLeft*4) + (dwDstTop*dwPitchDBDst),
374 pDBSrc + (dwSrcLeft*4) + (dwSrcTop*dwPitchDBSrc),
375 dwWidth,
376 dwHeight,
377 dwPitchDBDst,
378 dwPitchDBSrc);
379 BltSolid16( pFBDst + (dwDstLeft*2) + (dwDstTop*dwPitchFBDst),
380 pFBSrc + (dwSrcLeft*2) + (dwSrcTop*dwPitchFBSrc),
381 dwWidth,
382 dwHeight,
383 dwPitchFBDst,
384 dwPitchFBSrc);
385}
386
387// 24 to X bit
388void __cdecl BltSolid24to8( char *pDBDst,
389 char *pFBDst,
390 DWORD dwDstTop,
391 DWORD dwDstLeft,
392 DWORD dwPitchDBDst,
393 DWORD dwPitchFBDst,
394 char *pDBSrc,
395 char *pFBSrc,
396 DWORD dwSrcTop,
397 DWORD dwSrcLeft,
398 DWORD dwWidth,
399 DWORD dwHeight,
400 DWORD dwPitchDBSrc,
401 DWORD dwPitchFBSrc
402 )
403{
404 dprintf(("DDRAW:BltSolid24to8\n"));
405 BltSolid8( pDBDst + dwDstLeft + (dwDstTop*dwPitchDBDst),
406 pDBSrc + dwSrcLeft + (dwSrcTop*dwPitchDBSrc),
407 dwWidth,
408 dwHeight,
409 dwPitchDBDst,
410 dwPitchDBSrc);
411 BltSolid24( pFBDst + (dwDstLeft*3) + (dwDstTop*dwPitchFBDst),
412 pFBSrc + (dwSrcLeft*3) + (dwSrcTop*dwPitchFBSrc),
413 dwWidth,
414 dwHeight,
415 dwPitchFBDst,
416 dwPitchFBSrc);
417}
418void __cdecl BltSolid24to16( char *pDBDst,
419 char *pFBDst,
420 DWORD dwDstTop,
421 DWORD dwDstLeft,
422 DWORD dwPitchDBDst,
423 DWORD dwPitchFBDst,
424 char *pDBSrc,
425 char *pFBSrc,
426 DWORD dwSrcTop,
427 DWORD dwSrcLeft,
428 DWORD dwWidth,
429 DWORD dwHeight,
430 DWORD dwPitchDBSrc,
431 DWORD dwPitchFBSrc
432 )
433{
434 dprintf(("DDRAW:BltSolid24to16\n"));
435 BltSolid16( pDBDst + (dwDstLeft*2) + (dwDstTop*dwPitchDBDst),
436 pDBSrc + (dwSrcLeft*2) + (dwSrcTop*dwPitchDBSrc),
437 dwWidth,
438 dwHeight,
439 dwPitchDBDst,
440 dwPitchDBSrc);
441 BltSolid24( pFBDst + (dwDstLeft*3) + (dwDstTop*dwPitchFBDst),
442 pFBSrc + (dwSrcLeft*3) + (dwSrcTop*dwPitchFBSrc),
443 dwWidth,
444 dwHeight,
445 dwPitchFBDst,
446 dwPitchFBSrc);
447}
448void __cdecl BltSolid24to32( char *pDBDst,
449 char *pFBDst,
450 DWORD dwDstTop,
451 DWORD dwDstLeft,
452 DWORD dwPitchDBDst,
453 DWORD dwPitchFBDst,
454 char *pDBSrc,
455 char *pFBSrc,
456 DWORD dwSrcTop,
457 DWORD dwSrcLeft,
458 DWORD dwWidth,
459 DWORD dwHeight,
460 DWORD dwPitchDBSrc,
461 DWORD dwPitchFBSrc
462 )
463{
464 dprintf(("DDRAW:BltSolid24to32\n"));
465 BltSolid32( pDBDst + (dwDstLeft*4) + (dwDstTop*dwPitchDBDst),
466 pDBSrc + (dwSrcLeft*4) + (dwSrcTop*dwPitchDBSrc),
467 dwWidth,
468 dwHeight,
469 dwPitchDBDst,
470 dwPitchDBSrc);
471 BltSolid24( pFBDst + (dwDstLeft*3) + (dwDstTop*dwPitchFBDst),
472 pFBSrc + (dwSrcLeft*3) + (dwSrcTop*dwPitchFBSrc),
473 dwWidth,
474 dwHeight,
475 dwPitchFBDst,
476 dwPitchFBSrc);
477}
478
479// 32 to X bit
480void __cdecl BltSolid32to8( char *pDBDst,
481 char *pFBDst,
482 DWORD dwDstTop,
483 DWORD dwDstLeft,
484 DWORD dwPitchDBDst,
485 DWORD dwPitchFBDst,
486 char *pDBSrc,
487 char *pFBSrc,
488 DWORD dwSrcTop,
489 DWORD dwSrcLeft,
490 DWORD dwWidth,
491 DWORD dwHeight,
492 DWORD dwPitchDBSrc,
493 DWORD dwPitchFBSrc
494 )
495{
496 dprintf(("DDRAW:BltSolid32to8\n"));
497 BltSolid8( pDBDst + dwDstLeft + (dwDstTop*dwPitchDBDst),
498 pDBSrc + dwSrcLeft + (dwSrcTop*dwPitchDBSrc),
499 dwWidth,
500 dwHeight,
501 dwPitchDBDst,
502 dwPitchDBSrc);
503 BltSolid32( pFBDst + (dwDstLeft*4) + (dwDstTop*dwPitchFBDst),
504 pFBSrc + (dwSrcLeft*4) + (dwSrcTop*dwPitchFBSrc),
505 dwWidth,
506 dwHeight,
507 dwPitchFBDst,
508 dwPitchFBSrc);
509}
510void __cdecl BltSolid32to16( char *pDBDst,
511 char *pFBDst,
512 DWORD dwDstTop,
513 DWORD dwDstLeft,
514 DWORD dwPitchDBDst,
515 DWORD dwPitchFBDst,
516 char *pDBSrc,
517 char *pFBSrc,
518 DWORD dwSrcTop,
519 DWORD dwSrcLeft,
520 DWORD dwWidth,
521 DWORD dwHeight,
522 DWORD dwPitchDBSrc,
523 DWORD dwPitchFBSrc
524 )
525{
526 dprintf(("DDRAW:BltSolid32to16\n"));
527 BltSolid16( pDBDst + (dwDstLeft*2) + (dwDstTop*dwPitchDBDst),
528 pDBSrc + (dwSrcLeft*2) + (dwSrcTop*dwPitchDBSrc),
529 dwWidth,
530 dwHeight,
531 dwPitchDBDst,
532 dwPitchDBSrc);
533 BltSolid32( pFBDst + (dwDstLeft*4) + (dwDstTop*dwPitchFBDst),
534 pFBSrc + (dwSrcLeft*4) + (dwSrcTop*dwPitchFBSrc),
535 dwWidth,
536 dwHeight,
537 dwPitchFBDst,
538 dwPitchFBSrc);
539}
540
541void __cdecl BltSolid32to24( char *pDBDst,
542 char *pFBDst,
543 DWORD dwDstTop,
544 DWORD dwDstLeft,
545 DWORD dwPitchDBDst,
546 DWORD dwPitchFBDst,
547 char *pDBSrc,
548 char *pFBSrc,
549 DWORD dwSrcTop,
550 DWORD dwSrcLeft,
551 DWORD dwWidth,
552 DWORD dwHeight,
553 DWORD dwPitchDBSrc,
554 DWORD dwPitchFBSrc
555 )
556{
557 dprintf(("DDRAW:BltSolid32to24\n"));
558 BltSolid24( pDBDst + (dwDstLeft*3) + (dwDstTop*dwPitchDBDst),
559 pDBSrc + (dwSrcLeft*3) + (dwSrcTop*dwPitchDBSrc),
560 dwWidth,
561 dwHeight,
562 dwPitchDBDst,
563 dwPitchDBSrc);
564 BltSolid32( pFBDst + (dwDstLeft*4) + (dwDstTop*dwPitchFBDst),
565 pFBSrc + (dwSrcLeft*4) + (dwSrcTop*dwPitchFBSrc),
566 dwWidth,
567 dwHeight,
568 dwPitchFBDst,
569 dwPitchFBSrc);
570}
571
Note: See TracBrowser for help on using the repository browser.