summaryrefslogtreecommitdiff
path: root/testbc1.c
diff options
context:
space:
mode:
authorquou <quou@disroot.org>2024-07-22 20:21:34 +1000
committerquou <quou@disroot.org>2024-07-22 20:21:34 +1000
commitd2c76fd62fa735f3d4fc3ceb55a75d6f0b2dc758 (patch)
tree92351ab512c5ec914ec5cbd918a5d72ed60bc0b6 /testbc1.c
parentcf193ce71bd1f13cebcafac718c124640c912060 (diff)
sampling textures in game.
Diffstat (limited to 'testbc1.c')
-rw-r--r--testbc1.c22
1 files changed, 22 insertions, 0 deletions
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;