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

Last change on this file since 2174 was 2174, checked in by hugh, 26 years ago

Added ODIn lic header with ID to all files where missing

Cleaned up Surface handling by movefing colorfill and
colorconversion into own files and use functionpointers
setup during creation.

updated makefile to add files

removed inhertiance from IBASE in DDrectangle class

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