diff --git a/main.c b/main.c index 0b7fdf7..d7eace9 100644 --- a/main.c +++ b/main.c @@ -9,6 +9,7 @@ #include "texture.h" typedef uint8_t u8; +typedef int32_t i32; #define CDEPTH 255 @@ -53,18 +54,18 @@ void drawTexInto(struct texture tex, struct texture buffer, struct rect texbound rect_dims(bufbounds, &outwidth, &outheight); // We precalculate the step through the texture to avoid division and // multiplication per pixel - float stepx = (float)texwidth / outwidth; - float stepy = (float)texheight / outheight; - float texx = texbounds.x1 * 3; - float texy = texbounds.y1 * 3; + i32 stepx = 256 * (float)texwidth / outwidth; + i32 stepy = 256 * (float)texheight / outheight; + i32 texx = 256 * texbounds.x1; + i32 texy = 256 * texbounds.y1; //log("%f,%f step %f,%f", texx, texy, stepx, stepy); // Buffer is R G B for each pixel, then across then down. If you want X, Y, // it's: 3 * (x + y * width) for(int y = bufbounds.y1; y < bufbounds.y2; y++) { texx = texbounds.x1; for(int x = bufbounds.x1; x < bufbounds.x2; x++) { - int texi = 3 * (floor(texx) + tex.width * floor(texy)); - int bufi = 3 * (x + buffer.width * y); + i32 texi = 3 * ((texx >> 8) + tex.width * (texy >> 8)); + i32 bufi = 3 * (x + buffer.width * y); // You can get rid of this for loop for more performance, but probably // not a big deal with -O3, it'll be unrolled for(int i = 0; i < 3; i++) {