diff options
author | quou <quou@disroot.org> | 2024-07-22 20:21:34 +1000 |
---|---|---|
committer | quou <quou@disroot.org> | 2024-07-22 20:21:34 +1000 |
commit | d2c76fd62fa735f3d4fc3ceb55a75d6f0b2dc758 (patch) | |
tree | 92351ab512c5ec914ec5cbd918a5d72ed60bc0b6 /testbc1.c | |
parent | cf193ce71bd1f13cebcafac718c124640c912060 (diff) |
sampling textures in game.
Diffstat (limited to 'testbc1.c')
-rw-r--r-- | testbc1.c | 22 |
1 files changed, 22 insertions, 0 deletions
@@ -13,6 +13,8 @@ void lerp(vec3* d, const vec3* a, const vec3* b, float t) { d->b = a->b + t * (b->b - a->b); } +#define use_float_sample 0 +#if use_float_sample Colour get_pixel(unsigned* data, int x, int y, int w) { vec3 start, end, col; float t; @@ -35,6 +37,26 @@ Colour get_pixel(unsigned* data, int x, int y, int w) { r.b = (int)(col.b * 255.0f); return r; } +#else +Colour get_pixel(unsigned* data, int x, int y, int w) { + Colour r; + int s[3]; + int i; + int coord = ((x >> 2) + (y >> 2) * (w >> 2)) << 1; + unsigned pal = data[coord]; + unsigned ind = data[coord + 1]; + s[0] = (pal & (31 << 27)) >> 24; + s[1] = (pal & (63 << 21)) >> 19; + s[2] = (pal & (31 << 16)) >> 13; + i = ((x & 3) + ((y & 3) << 2)) << 1; + i = (ind & (3 << i)) >> i; + r.r = s[0] + (i * ((int)((pal & (31 << 11)) >> 8) - s[0]) / 3); + r.g = s[1] + (i * ((int)((pal & (63 << 5)) >> 3) - s[1]) / 3); + r.b = s[2] + (i * ((int)((pal & (31 )) << 3) - s[2]) / 3); + r.a = 0xff; + return r; +} +#endif int main(int argc, const char** argv) { FILE* infile, * outfile; |