1 // Graphics format: 8 � 8 pixel tiles, 4 bits/pixel.
2
3 // Create a unique name for each of the functions
4 #define FN(a,b,c,d,e) RenderTile ## a ## _ROT ## b ## c ## d ## e
5 #define FUNCTIONNAME(a,b,c,d,e) FN(a,b,c,d,e)
6
7 #if ROT == 0
8
9 #if XFLIP == 0
10 #define ADVANCECOLUMN pPixel += (BPP >> 3)
11 #elif XFLIP == 1
12 #define ADVANCECOLUMN pPixel -= (BPP >> 3)
13 #else
14 #error illegal XFLIP value
15 #endif
16
17 #if YFLIP == 0
18 #define ADVANCEROW pTileRow += ((BPP >> 3) * 320)
19 #elif YFLIP == 1
20 #define ADVANCEROW pTileRow -= ((BPP >> 3) * 320)
21 #else
22 #error illegal YFLIP value
23 #endif
24
25 #elif ROT == 270
26
27 #if XFLIP == 0
28 #define ADVANCECOLUMN pPixel -= ((BPP >> 3) * 240)
29 #elif XFLIP == 1
30 #define ADVANCECOLUMN pPixel += ((BPP >> 3) * 240)
31 #else
32 #error illegal XFLIP value
33 #endif
34
35 #if YFLIP == 0
36 #define ADVANCEROW pTileRow += (BPP >> 3)
37 #elif YFLIP == 1
38 #define ADVANCEROW pTileRow -= (BPP >> 3)
39 #else
40 #error illegal YFLIP value
41 #endif
42
43 #else
44 #error unsupported rotation angle specified
45 #endif
46
47 #if DOCLIP == 0
48 #define CLIP _NOCLIP
49 #define TESTCLIP(x) (1)
50 #elif DOCLIP == 1
51 #define CLIP _CLIP
52 #define TESTCLIP(x) (nTileXPos >= -(x) && nTileXPos < (320 - (x)))
53 #else
54 #error illegal doclip value.
55 #endif
56
57 #if ISOPAQUE == 0
58 #define OPACITY _TRANS
59 #define TESTCOLOUR(x) (x)
60 #elif ISOPAQUE == 1
61 #define OPACITY _OPAQUE
62 #define TESTCOLOUR(x) (1)
63 #else
64 #error illegal isopaque value
65 #endif
66
67 #if BPP == 16
68 #define PLOTPIXEL(a,b) if (TESTCOLOUR(b) && TESTCLIP(a)) { \
69 *((UINT16*)pPixel) = (UINT16)pTilePalette[b]; \
70 }
71 #elif BPP == 24
72 #define PLOTPIXEL(a,b) if (TESTCOLOUR(b) && TESTCLIP(a)) { \
73 UINT32 nRGB = pTilePalette[b]; \
74 pPixel[0] = (UINT8)nRGB; \
75 pPixel[1] = (UINT8)(nRGB >> 8); \
76 pPixel[2] = (UINT8)(nRGB >> 16); \
77 }
78 #elif BPP == 32
79 #define PLOTPIXEL(a,b) if (TESTCOLOUR(b) && TESTCLIP(a)) { \
80 *((UINT32*)pPixel) = (UINT32)pTilePalette[b]; \
81 }
82 #else
83 #error unsupported bitdepth specified.
84 #endif
85
86 // For decorating the function name
87 #if XFLIP == 1
88 #if YFLIP == 1
89 #define FLIP _FLIPXY
90 #else
91 #define FLIP _FLIPX
92 #endif
93 #elif YFLIP == 1
94 #define FLIP _FLIPY
95 #else
96 #define FLIP _NOFLIP
97 #endif
98
FUNCTIONNAME(BPP,ROT,FLIP,CLIP,OPACITY)99 static void FUNCTIONNAME(BPP,ROT,FLIP,CLIP,OPACITY)()
100 {
101 UINT8 *pTileRow, *pPixel;
102 INT32 y, nColour;
103
104 #if ROT == 0
105 #if YFLIP == 0
106 for (y = 0, pTileRow = pTile; y < 8; y++, ADVANCEROW) {
107 #else
108 for (y = 7, pTileRow = pTile + ((BPP >> 3) * 320 * 7); y >= 0; y--, ADVANCEROW) {
109 #endif
110 #else
111 #if YFLIP == 0
112 for (y = 0, pTileRow = pTile; y < 8; y++, ADVANCEROW) {
113 #else
114 for (y = 7, pTileRow = pTile + ((BPP >> 3) * 7); y >= 0; y--, ADVANCEROW) {
115 #endif
116 #endif
117
118 #if DOCLIP == 1
119 if (nTileYPos + y < 0 || nTileYPos + y >= 240) {
120 pTileData++;
121 continue;
122 }
123 #endif
124
125 #if ROT == 0
126 #if XFLIP == 0
127 #define OFFSET(a) a
128 pPixel = pTileRow;
129 #else
130 #define OFFSET(a) (7 - a)
131 pPixel = pTileRow + ((BPP >> 3) * 7);
132 #endif
133 #else
134 #if XFLIP == 0
135 #define OFFSET(a) a
136 pPixel = pTileRow;
137 #else
138 #define OFFSET(a) (7 - a)
139 pPixel = pTileRow - ((BPP >> 3) * 240 * 7);
140 #endif
141 #endif
142
143 nColour = BURN_ENDIAN_SWAP_INT32(*pTileData++);
144 PLOTPIXEL(OFFSET(0), nColour & 0x0F);
145 ADVANCECOLUMN;
146 nColour >>= 4;
147 PLOTPIXEL(OFFSET(1), nColour & 0x0F);
148 ADVANCECOLUMN;
149
150 nColour >>= 4;
151 PLOTPIXEL(OFFSET(2), nColour & 0x0F);
152 ADVANCECOLUMN;
153 nColour >>= 4;
154 PLOTPIXEL(OFFSET(3), nColour & 0x0F);
155 ADVANCECOLUMN;
156
157 nColour >>= 4;
158 PLOTPIXEL(OFFSET(4), nColour & 0x0F);
159 ADVANCECOLUMN;
160 nColour >>= 4;
161 PLOTPIXEL(OFFSET(5), nColour & 0x0F);
162 ADVANCECOLUMN;
163
164 nColour >>= 4;
165 PLOTPIXEL(OFFSET(6), nColour & 0x0F);
166 ADVANCECOLUMN;
167 nColour >>= 4;
168 PLOTPIXEL(OFFSET(7), nColour & 0x0F);
169
170 #undef OFFSET
171
172 }
173 }
174
175 #undef FLIP
176 #undef CLIP
177 #undef PLOTPIXEL
178 #undef TESTCLIP
179 #undef TESTCOLOUR
180 #undef ADVANCEROW
181 #undef ADVANCECOLUMN
182 #undef OPACITY
183 #undef FUNCTIONNAME
184 #undef FN
185
186