ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/utils/cfhq2xa.C
(Generate patch)

Comparing deliantra/server/utils/cfhq2xa.C (file contents):
Revision 1.4 by root, Sat Aug 18 20:39:13 2007 UTC vs.
Revision 1.7 by root, Fri Nov 6 12:27:06 2009 UTC

1/* 1/*
2 * This file is part of Crossfire TRT, the Roguelike Realtime MORPG. 2 * This file is part of Deliantra, the Roguelike Realtime MMORPG.
3 * 3 *
4 * Copyright (©) 2007 Marc Alexander Lehmann / Robin Redeker / the Crossfire TRT team 4 * Copyright (©) 2007 Marc Alexander Lehmann / Robin Redeker / the Deliantra team
5 * Copyright (©) 2003,2007 MaxSt <maxst@hiend3d.com> 5 * Copyright (©) 2003,2007 MaxSt <maxst@hiend3d.com>
6 * 6 *
7 * Crossfire TRT is free software: you can redistribute it and/or modify 7 * Deliantra is free software: you can redistribute it and/or modify it under
8 * it under the terms of the GNU General Public License as published by 8 * the terms of the Affero GNU General Public License as published by the
9 * the Free Software Foundation, either version 3 of the License, or 9 * Free Software Foundation, either version 3 of the License, or (at your
10 * (at your option) any later version. 10 * option) any later version.
11 * 11 *
12 * This program is distributed in the hope that it will be useful, 12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details. 15 * GNU General Public License for more details.
16 * 16 *
17 * You should have received a copy of the GNU General Public License 17 * You should have received a copy of the Affero GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>. 18 * and the GNU General Public License along with this program. If not, see
19 * <http://www.gnu.org/licenses/>.
19 * 20 *
20 * The authors can be reached via e-mail to <crossfire@schmorp.de> 21 * The authors can be reached via e-mail to <support@deliantra.net>
21 */ 22 */
22 23
23// note: the original code was released under the LGPL version 2.1 24// note: the original code was released under the LGPL version 2.1
24 25
25#include <cstdio> 26#include <cstdio>
65 int w = w1 + w2 + w3; 66 int w = w1 + w2 + w3;
66 67
67 return ((((c1 >> shift) & Cmask) * w1 + ((c2 >> shift) & Cmask) * w2 + ((c3 >> shift) & Cmask) * w3 + w / 2) / w) << shift; 68 return ((((c1 >> shift) & Cmask) * w1 + ((c2 >> shift) & Cmask) * w2 + ((c3 >> shift) & Cmask) * w3 + w / 2) / w) << shift;
68} 69}
69 70
70inline void lerp (unsigned char *pc, pixel c1, int w1, pixel c2, int w2, pixel c3 = 0, int w3 = 0) 71static inline void lerp (unsigned char *pc, pixel c1, int w1, pixel c2, int w2, pixel c3 = 0, int w3 = 0)
71{ 72{
72 *(pixel *)pc = lerp (c1, w1, c2, w2, c3, w3, Rshift) 73 *(pixel *)pc = lerp (c1, w1, c2, w2, c3, w3, Rshift)
73 | lerp (c1, w1, c2, w2, c3, w3, Gshift) 74 | lerp (c1, w1, c2, w2, c3, w3, Gshift)
74 | lerp (c1, w1, c2, w2, c3, w3, Bshift) 75 | lerp (c1, w1, c2, w2, c3, w3, Bshift)
75 | lerp (c1, w1, c2, w2, c3, w3, Ashift); 76 | lerp (c1, w1, c2, w2, c3, w3, Ashift);
76} 77}
77 78
78inline void Interp1 (unsigned char *pc, pixel c1, pixel c2) 79static inline void Interp1 (unsigned char *pc, pixel c1, pixel c2)
79{ 80{
80 lerp (pc, c1, 3, c2, 1); 81 lerp (pc, c1, 3, c2, 1);
81} 82}
82 83
83inline void Interp2 (unsigned char *pc, pixel c1, pixel c2, pixel c3) 84static inline void Interp2 (unsigned char *pc, pixel c1, pixel c2, pixel c3)
84{ 85{
85 lerp (pc, c1, 2, c2, 1, c3, 1); 86 lerp (pc, c1, 2, c2, 1, c3, 1);
86} 87}
87 88
88inline void Interp5 (unsigned char *pc, pixel c1, pixel c2) 89static inline void Interp5 (unsigned char *pc, pixel c1, pixel c2)
89{ 90{
90 lerp (pc, c1, 1, c2, 1); 91 lerp (pc, c1, 1, c2, 1);
91} 92}
92 93
93inline void Interp6 (unsigned char *pc, pixel c1, pixel c2, pixel c3) 94static inline void Interp6 (unsigned char *pc, pixel c1, pixel c2, pixel c3)
94{ 95{
95 lerp (pc, c1, 5, c2, 2, c3, 1); 96 lerp (pc, c1, 5, c2, 2, c3, 1);
96} 97}
97 98
98inline void Interp7 (unsigned char *pc, pixel c1, pixel c2, pixel c3) 99static inline void Interp7 (unsigned char *pc, pixel c1, pixel c2, pixel c3)
99{ 100{
100 lerp (pc, c1, 6, c2, 1, c3, 1); 101 lerp (pc, c1, 6, c2, 1, c3, 1);
101} 102}
102 103
103inline void Interp9 (unsigned char *pc, pixel c1, pixel c2, pixel c3) 104static inline void Interp9 (unsigned char *pc, pixel c1, pixel c2, pixel c3)
104{ 105{
105 lerp (pc, c1, 2, c2, 3, c2, 3); 106 lerp (pc, c1, 2, c2, 3, c2, 3);
106} 107}
107 108
108inline void Interp10 (unsigned char *pc, pixel c1, pixel c2, pixel c3) 109static inline void Interp10 (unsigned char *pc, pixel c1, pixel c2, pixel c3)
109{ 110{
110 lerp (pc, c1, 14, c2, 1, c3, 1); 111 lerp (pc, c1, 14, c2, 1, c3, 1);
111} 112}
112 113
113#define PIXEL00_0 *((pixel *)(pOut)) = w[5]; 114#define PIXEL00_0 *((pixel *)(pOut)) = w[5];
157#define PIXEL11_61 Interp6(pOut+BpL + sizeof (pixel), w[5], w[6], w[8]); 158#define PIXEL11_61 Interp6(pOut+BpL + sizeof (pixel), w[5], w[6], w[8]);
158#define PIXEL11_70 Interp7(pOut+BpL + sizeof (pixel), w[5], w[6], w[8]); 159#define PIXEL11_70 Interp7(pOut+BpL + sizeof (pixel), w[5], w[6], w[8]);
159#define PIXEL11_90 Interp9(pOut+BpL + sizeof (pixel), w[5], w[6], w[8]); 160#define PIXEL11_90 Interp9(pOut+BpL + sizeof (pixel), w[5], w[6], w[8]);
160#define PIXEL11_100 Interp10(pOut+BpL + sizeof (pixel), w[5], w[6], w[8]); 161#define PIXEL11_100 Interp10(pOut+BpL + sizeof (pixel), w[5], w[6], w[8]);
161 162
162inline pixel RGBAtoYUVA (pixel w) 163static inline pixel RGBAtoYUVA (pixel w)
163{ 164{
164 int r = (w >> Rshift) & Cmask; 165 int r = (w >> Rshift) & Cmask;
165 int g = (w >> Gshift) & Cmask; 166 int g = (w >> Gshift) & Cmask;
166 int b = (w >> Bshift) & Cmask; 167 int b = (w >> Bshift) & Cmask;
167 int a = (w >> Ashift) & Cmask; 168 int a = (w >> Ashift) & Cmask;
174 | (u << Gshift) 175 | (u << Gshift)
175 | (v << Bshift) 176 | (v << Bshift)
176 | (a << Ashift); 177 | (a << Ashift);
177} 178}
178 179
179inline bool Diff (pixel w1, pixel w2) 180static inline bool Diff (pixel w1, pixel w2)
180{ 181{
181 pixel YUV1 = RGBAtoYUVA (w1); 182 pixel YUV1 = RGBAtoYUVA (w1);
182 pixel YUV2 = RGBAtoYUVA (w2); 183 pixel YUV2 = RGBAtoYUVA (w2);
183 184
184 return ((abs (((YUV1 >> Rshift) & Cmask) - ((YUV2 >> Rshift) & Cmask)) > trY) || 185 return ((abs (((YUV1 >> Rshift) & Cmask) - ((YUV2 >> Rshift) & Cmask)) > trY) ||

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines