From d2c76fd62fa735f3d4fc3ceb55a75d6f0b2dc758 Mon Sep 17 00:00:00 2001 From: quou Date: Mon, 22 Jul 2024 20:21:34 +1000 Subject: sampling textures in game. --- testbc1.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'testbc1.c') diff --git a/testbc1.c b/testbc1.c index 2b9aab4..8475bb2 100644 --- a/testbc1.c +++ b/testbc1.c @@ -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; -- cgit v1.2.3-54-g00ecf