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.2 by root, Mon May 28 21:21:42 2007 UTC vs.
Revision 1.12 by root, Tue Jan 3 11:25:37 2012 UTC

1/* 1/*
2 * This file is part of Crossfire TRT, the Multiplayer Online Role Playing Game. 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,2008,2009,2010,2011,2012 Marc Alexander Lehmann / Robin Redeker / the Deliantra team
5 * Copyright (©) 2003,2007 MaxSt <maxst@hiend3d.com> 5 * Copyright (©) 2003 MaxSt <maxst@hiend3d.com>
6 * 6 *
7 * Crossfire TRT is free software; you can redistribute it and/or modify it 7 * Deliantra is free software: you can redistribute it and/or modify it under
8 * under the terms of the GNU General Public License as published by the Free 8 * the terms of the Affero GNU General Public License as published by the
9 * Software Foundation; either version 2 of the License, or (at your option) 9 * Free Software Foundation, either version 3 of the License, or (at your
10 * any later version. 10 * option) any later version.
11 * 11 *
12 * This program is distributed in the hope that it will be useful, but 12 * This program is distributed in the hope that it will be useful,
13 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * 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 along 17 * You should have received a copy of the Affero GNU General Public License
18 * with Crossfire TRT; if not, write to the Free Software Foundation, Inc. 51 18 * and the GNU General Public License along with this program. If not, see
19 * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 19 * <http://www.gnu.org/licenses/>.
20 * 20 *
21 * 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>
22 */ 22 */
23 23
24// 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
25 25
26#include <cstdio> 26#include <cstdio>
66 int w = w1 + w2 + w3; 66 int w = w1 + w2 + w3;
67 67
68 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;
69} 69}
70 70
71inline 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)
72{ 72{
73 *(pixel *)pc = lerp (c1, w1, c2, w2, c3, w3, Rshift) 73 *(pixel *)pc = lerp (c1, w1, c2, w2, c3, w3, Rshift)
74 | lerp (c1, w1, c2, w2, c3, w3, Gshift) 74 | lerp (c1, w1, c2, w2, c3, w3, Gshift)
75 | lerp (c1, w1, c2, w2, c3, w3, Bshift) 75 | lerp (c1, w1, c2, w2, c3, w3, Bshift)
76 | lerp (c1, w1, c2, w2, c3, w3, Ashift); 76 | lerp (c1, w1, c2, w2, c3, w3, Ashift);
77} 77}
78 78
79inline void Interp1 (unsigned char *pc, pixel c1, pixel c2) 79static inline void Interp1 (unsigned char *pc, pixel c1, pixel c2)
80{ 80{
81 lerp (pc, c1, 3, c2, 1); 81 lerp (pc, c1, 3, c2, 1);
82} 82}
83 83
84inline void Interp2 (unsigned char *pc, pixel c1, pixel c2, pixel c3) 84static inline void Interp2 (unsigned char *pc, pixel c1, pixel c2, pixel c3)
85{ 85{
86 lerp (pc, c1, 2, c2, 1, c3, 1); 86 lerp (pc, c1, 2, c2, 1, c3, 1);
87} 87}
88 88
89inline void Interp5 (unsigned char *pc, pixel c1, pixel c2) 89static inline void Interp5 (unsigned char *pc, pixel c1, pixel c2)
90{ 90{
91 lerp (pc, c1, 1, c2, 1); 91 lerp (pc, c1, 1, c2, 1);
92} 92}
93 93
94inline void Interp6 (unsigned char *pc, pixel c1, pixel c2, pixel c3) 94static inline void Interp6 (unsigned char *pc, pixel c1, pixel c2, pixel c3)
95{ 95{
96 lerp (pc, c1, 5, c2, 2, c3, 1); 96 lerp (pc, c1, 5, c2, 2, c3, 1);
97} 97}
98 98
99inline void Interp7 (unsigned char *pc, pixel c1, pixel c2, pixel c3) 99static inline void Interp7 (unsigned char *pc, pixel c1, pixel c2, pixel c3)
100{ 100{
101 lerp (pc, c1, 6, c2, 1, c3, 1); 101 lerp (pc, c1, 6, c2, 1, c3, 1);
102} 102}
103 103
104inline void Interp9 (unsigned char *pc, pixel c1, pixel c2, pixel c3) 104static inline void Interp9 (unsigned char *pc, pixel c1, pixel c2, pixel c3)
105{ 105{
106 lerp (pc, c1, 2, c2, 3, c2, 3); 106 lerp (pc, c1, 2, c2, 3, c2, 3);
107} 107}
108 108
109inline void Interp10 (unsigned char *pc, pixel c1, pixel c2, pixel c3) 109static inline void Interp10 (unsigned char *pc, pixel c1, pixel c2, pixel c3)
110{ 110{
111 lerp (pc, c1, 14, c2, 1, c3, 1); 111 lerp (pc, c1, 14, c2, 1, c3, 1);
112} 112}
113 113
114#define PIXEL00_0 *((pixel *)(pOut)) = w[5]; 114#define PIXEL00_0 *((pixel *)(pOut)) = w[5];
158#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]);
159#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]);
160#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]);
161#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]);
162 162
163inline pixel RGBAtoYUVA (pixel w) 163static inline pixel RGBAtoYUVA (pixel w)
164{ 164{
165 int r = (w >> Rshift) & Cmask; 165 int r = (w >> Rshift) & Cmask;
166 int g = (w >> Gshift) & Cmask; 166 int g = (w >> Gshift) & Cmask;
167 int b = (w >> Bshift) & Cmask; 167 int b = (w >> Bshift) & Cmask;
168 int a = (w >> Ashift) & Cmask; 168 int a = (w >> Ashift) & Cmask;
175 | (u << Gshift) 175 | (u << Gshift)
176 | (v << Bshift) 176 | (v << Bshift)
177 | (a << Ashift); 177 | (a << Ashift);
178} 178}
179 179
180inline bool Diff (pixel w1, pixel w2) 180static inline bool Diff (pixel w1, pixel w2)
181{ 181{
182 pixel YUV1 = RGBAtoYUVA (w1); 182 pixel YUV1 = RGBAtoYUVA (w1);
183 pixel YUV2 = RGBAtoYUVA (w2); 183 pixel YUV2 = RGBAtoYUVA (w2);
184 184
185 return ((abs (((YUV1 >> Rshift) & Cmask) - ((YUV2 >> Rshift) & Cmask)) > trY) || 185 return ((abs (((YUV1 >> Rshift) & Cmask) - ((YUV2 >> Rshift) & Cmask)) > trY) ||
186 (abs (((YUV1 >> Gshift) & Cmask) - ((YUV2 >> Gshift) & Cmask)) > trU) || 186 (abs (((YUV1 >> Gshift) & Cmask) - ((YUV2 >> Gshift) & Cmask)) > trU) ||
187 (abs (((YUV1 >> Bshift) & Cmask) - ((YUV2 >> Bshift) & Cmask)) > trV) || 187 (abs (((YUV1 >> Bshift) & Cmask) - ((YUV2 >> Bshift) & Cmask)) > trV) ||
188 (abs (((YUV1 >> Ashift) & Cmask) - ((YUV2 >> Ashift) & Cmask)) > trA) ); 188 (abs (((YUV1 >> Ashift) & Cmask) - ((YUV2 >> Ashift) & Cmask)) > trA) );
189} 189}
190 190
191void 191static void
192hq2x_32 (unsigned char *pIn, unsigned char *pOut, int Xres, int Yres, int BpL, bool wrap) 192hq2x_32 (unsigned char *pIn, unsigned char *pOut, int Xres, int Yres, int BpL, bool wrap)
193{ 193{
194 int i, j, k; 194 int i, j, k;
195 int prevline, nextline; 195 int prevline, nextline;
196 pixel w[10]; 196 pixel w[10];
197 197
198 // +----+----+----+ 198 // +--+--+--+
199 // | | | |
200 // | w1 | w2 | w3 | 199 // |w1|w2|w3|
201 // +----+----+----+ 200 // +--+--+--+
202 // | | | |
203 // | w4 | w5 | w6 | 201 // |w4|w5|w6|
204 // +----+----+----+ 202 // +--+--+--+
205 // | | | |
206 // | w7 | w8 | w9 | 203 // |w7|w8|w9|
207 // +----+----+----+ 204 // +--+--+--+
208 205
209 for (j = 0; j < Yres; j++) 206 for (j = 0; j < Yres; j++)
210 { 207 {
211 if (j > 0) 208 if (j > 0)
212 prevline = -Xres * sizeof (pixel); 209 prevline = -Xres * sizeof (pixel);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines