Mercurial > hg > dmlib
annotate src/dmscaledblit.h @ 2298:b5abfff07ca9
Add new DMGrowBuf helper functions dmGrowBufCopyOffsSize() and
dmGrowBufConstCopyOffsSize().
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Thu, 04 Jul 2019 10:54:16 +0300 |
parents | e06abfde6c39 |
children |
rev | line source |
---|---|
0 | 1 /* |
2 * DMLib | |
87 | 3 * -- Scaled sprite / surface blitting function template |
0 | 4 * Programmed and designed by Matti 'ccr' Hamalainen |
863 | 5 * (C) Copyright 2011-2015 Tecnic Software productions (TNSP) |
0 | 6 */ |
7 | |
232
79dac918c81e
Modularize line clipping etc. a lot, and export all line drawing and
Matti Hamalainen <ccr@tnsp.org>
parents:
95
diff
changeset
|
8 |
85 | 9 int DM_BLITFUNC_NAME (SDL_Surface *src, |
0 | 10 const int x0, const int y0, |
11 const int dwidth, const int dheight, | |
16
d9251dd496ce
Add new scaled blit template parameters in order to implement global alpha.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
12 SDL_Surface *dst |
85 | 13 #ifdef DM_BLITFUNC_ARGS |
14 DM_BLITFUNC_ARGS | |
16
d9251dd496ce
Add new scaled blit template parameters in order to implement global alpha.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
15 #endif |
d9251dd496ce
Add new scaled blit template parameters in order to implement global alpha.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
16 ) |
232
79dac918c81e
Modularize line clipping etc. a lot, and export all line drawing and
Matti Hamalainen <ccr@tnsp.org>
parents:
95
diff
changeset
|
17 #ifdef DM_HEADER |
79dac918c81e
Modularize line clipping etc. a lot, and export all line drawing and
Matti Hamalainen <ccr@tnsp.org>
parents:
95
diff
changeset
|
18 ; |
79dac918c81e
Modularize line clipping etc. a lot, and export all line drawing and
Matti Hamalainen <ccr@tnsp.org>
parents:
95
diff
changeset
|
19 #else |
0 | 20 { |
21 int yc; | |
22 DMFixedPoint32 xv, yv, dx, dy; | |
23 DMQValue xr, yr; | |
24 | |
85 | 25 #ifdef DM_BLITFUNC_VARS |
26 DM_BLITFUNC_VARS | |
0 | 27 #endif |
1102
e06abfde6c39
Cosmetics pass: Remove excess whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents:
863
diff
changeset
|
28 |
0 | 29 // Clip coordinates |
1102
e06abfde6c39
Cosmetics pass: Remove excess whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents:
863
diff
changeset
|
30 if (dmScaledClipCoord(&xr, x0, src->w, dwidth, |
0 | 31 dst->clip_rect.x, dst->clip_rect.x + dst->clip_rect.w) |
32 || | |
95
0430f484641b
Add unscaled blitting functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
87
diff
changeset
|
33 dmScaledClipCoord(&yr, y0, src->h, dheight, |
0 | 34 dst->clip_rect.y, dst->clip_rect.y + dst->clip_rect.h)) |
35 return -1; | |
36 | |
85 | 37 #ifdef DM_BLITFUNC_INIT |
38 DM_BLITFUNC_INIT | |
0 | 39 #endif |
40 | |
41 // Calculate "final" initial source bitmap offsets | |
42 FP_CONV(dy, yr.voffs); | |
43 FP_MUL_R(yv, dy, yr.vdelta); | |
44 | |
45 FP_CONV(dx, xr.voffs); | |
46 FP_MUL_R(dx, dx, xr.vdelta); | |
47 | |
48 // Take pitch into account | |
95
0430f484641b
Add unscaled blitting functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
87
diff
changeset
|
49 const int dstadd = xr.vadd - dst->clip_rect.w + dst->clip_rect.x + (dst->pitch / DM_BLITFUNC_DST_BYTES); |
0 | 50 |
51 // Blit scaled | |
85 | 52 DM_BLITFUNC_DST_TYPE * dp = ((DM_BLITFUNC_DST_TYPE *) dst->pixels) + (yr.v0 * dst->pitch) / DM_BLITFUNC_DST_BYTES + xr.v0; |
0 | 53 for (yc = yr.v0; yc < yr.v1; yc++) |
54 { | |
809
eba3b87f3f84
Add some separate macros for 64/32 precision fixed point types.
Matti Hamalainen <ccr@tnsp.org>
parents:
232
diff
changeset
|
55 const DM_BLITFUNC_SRC_TYPE * sp = ((DM_BLITFUNC_SRC_TYPE *) src->pixels) + (FP_GETH16(yv) * src->pitch) / DM_BLITFUNC_SRC_BYTES; |
0 | 56 int xc; |
57 | |
85 | 58 #ifdef DM_BLITFUNC_INNER_INIT |
87 | 59 DM_BLITFUNC_INNER_INIT |
0 | 60 #endif |
61 | |
62 for (xv.dw = dx.dw, xc = xr.v0; xc < xr.v1; xc++) | |
63 { | |
85 | 64 DM_BLITFUNC_INNER |
0 | 65 FP_ADD(xv, xr.vdelta); |
66 } | |
67 FP_ADD(yv, yr.vdelta); | |
95
0430f484641b
Add unscaled blitting functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
87
diff
changeset
|
68 dp += dstadd; |
0 | 69 } |
70 | |
85 | 71 #ifdef DM_BLITFUNC_FINISH |
72 DM_BLITFUNC_FINISH | |
0 | 73 #endif |
74 | |
75 return 0; | |
76 } | |
232
79dac918c81e
Modularize line clipping etc. a lot, and export all line drawing and
Matti Hamalainen <ccr@tnsp.org>
parents:
95
diff
changeset
|
77 #endif |
0 | 78 |
85 | 79 #undef DM_BLITFUNC_NAME |
80 #undef DM_BLITFUNC_ARGS | |
81 #undef DM_BLITFUNC_SRC_BYTES | |
82 #undef DM_BLITFUNC_DST_BYTES | |
83 #undef DM_BLITFUNC_SRC_TYPE | |
84 #undef DM_BLITFUNC_DST_TYPE | |
85 #undef DM_BLITFUNC_VARS | |
86 #undef DM_BLITFUNC_INIT | |
87 #undef DM_BLITFUNC_INNER_INIT | |
88 #undef DM_BLITFUNC_INNER | |
89 #undef DM_BLITFUNC_FINISH |