1 | /* |
1 | /* |
2 | * This file is part of Deliantra, the Roguelike Realtime MMORPG. |
2 | * This file is part of Deliantra, the Roguelike Realtime MMORPG. |
3 | * |
3 | * |
|
|
4 | * Copyright (©) 2017,2018 Marc Alexander Lehmann / the Deliantra team |
4 | * Copyright (©) 2007,2008,2009,2010,2011,2012 Marc Alexander Lehmann / Robin Redeker / the Deliantra team |
5 | * Copyright (©) 2007,2008,2009,2010,2011,2012,2013,2014,2015,2016 Marc Alexander Lehmann / Robin Redeker / the Deliantra team |
5 | * Copyright (©) 2003 MaxSt <maxst@hiend3d.com> |
6 | * Copyright (©) 2003 MaxSt <maxst@hiend3d.com> |
6 | * |
7 | * |
7 | * Deliantra is free software: you can redistribute it and/or modify it under |
8 | * Deliantra is free software: you can redistribute it and/or modify it under |
8 | * the terms of the Affero GNU General Public License as published by the |
9 | * the terms of the Affero GNU General Public License as published by the |
9 | * Free Software Foundation, either version 3 of the License, or (at your |
10 | * Free Software Foundation, either version 3 of the License, or (at your |
… | |
… | |
52 | |
53 | |
53 | # define trY 0x30 |
54 | # define trY 0x30 |
54 | # define trU 0x11 |
55 | # define trU 0x11 |
55 | # define trV 0x10 |
56 | # define trV 0x10 |
56 | # define trA 0x40 |
57 | # define trA 0x40 |
|
|
58 | |
|
|
59 | static int32_t |
|
|
60 | udiff (uint32_t a, uint32_t b) |
|
|
61 | { |
|
|
62 | return a > b ? a - b : b - a; |
|
|
63 | |
|
|
64 | } |
57 | |
65 | |
58 | static inline pixel lerp (pixel c1, int w1, pixel c2, int w2, pixel c3, int w3, int shift) |
66 | static inline pixel lerp (pixel c1, int w1, pixel c2, int w2, pixel c3, int w3, int shift) |
59 | { |
67 | { |
60 | #if 0 |
68 | #if 0 |
61 | if (!(c1 >> Ashift) & Cmask) w1 = 0; |
69 | if (!(c1 >> Ashift) & Cmask) w1 = 0; |
… | |
… | |
180 | static inline bool Diff (pixel w1, pixel w2) |
188 | static inline bool Diff (pixel w1, pixel w2) |
181 | { |
189 | { |
182 | pixel YUV1 = RGBAtoYUVA (w1); |
190 | pixel YUV1 = RGBAtoYUVA (w1); |
183 | pixel YUV2 = RGBAtoYUVA (w2); |
191 | pixel YUV2 = RGBAtoYUVA (w2); |
184 | |
192 | |
185 | return ((abs (((YUV1 >> Rshift) & Cmask) - ((YUV2 >> Rshift) & Cmask)) > trY) || |
193 | return ((udiff ((YUV1 >> Rshift) & Cmask, (YUV2 >> Rshift) & Cmask) > trY) || |
186 | (abs (((YUV1 >> Gshift) & Cmask) - ((YUV2 >> Gshift) & Cmask)) > trU) || |
194 | (udiff ((YUV1 >> Gshift) & Cmask, (YUV2 >> Gshift) & Cmask) > trU) || |
187 | (abs (((YUV1 >> Bshift) & Cmask) - ((YUV2 >> Bshift) & Cmask)) > trV) || |
195 | (udiff ((YUV1 >> Bshift) & Cmask, (YUV2 >> Bshift) & Cmask) > trV) || |
188 | (abs (((YUV1 >> Ashift) & Cmask) - ((YUV2 >> Ashift) & Cmask)) > trA) ); |
196 | (udiff ((YUV1 >> Ashift) & Cmask, (YUV2 >> Ashift) & Cmask) > trA) ); |
189 | } |
197 | } |
190 | |
198 | |
191 | static void |
199 | static void |
192 | hq2x_32 (unsigned char *pIn, unsigned char *pOut, int Xres, int Yres, int BpL, bool wrap) |
200 | hq2x_32 (unsigned char *pIn, unsigned char *pOut, int Xres, int Yres, int BpL, bool wrap) |
193 | { |
201 | { |