summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--render.c26
-rw-r--r--render.h5
2 files changed, 31 insertions, 0 deletions
diff --git a/render.c b/render.c
index 023c33a..c64cef3 100644
--- a/render.c
+++ b/render.c
@@ -478,6 +478,32 @@ step:
}
}
+void ren_texture(
+ Renderer* r,
+ const Rect* re,
+ const Texture* t
+) {
+ Rect rect = *re;
+ Colour* d;
+ int s, y, ey, ex;
+ rect_clipr(&rect, r->clip);
+ d = &r->t[rect.x + rect.y * r->vp[0]];
+ s = r->vp[0] - rect.w;
+ ex = rect.x + rect.w;
+ ey = rect.y + rect.h;
+ for (y = rect.y; y < ey; y++) {
+ int v = (y << fbits) / re->h;
+ int x;
+ for (x = rect.x; x < ex; x++) {
+ int u = (x << fbits) / re->w;
+ Colour c = sample_tex(t, u, v);
+ *d = blend(*d, c);
+ d++;
+ }
+ d += s;
+ }
+}
+
void ren_tri(
Renderer* r,
const int* iv0,
diff --git a/render.h b/render.h
index e655c52..e7d459f 100644
--- a/render.h
+++ b/render.h
@@ -107,6 +107,11 @@ void ren_line(
const int* s,
const int* e
);
+void ren_texture(
+ Renderer* r,
+ const Rect* re,
+ const Texture* t
+);
/* Vertex format:
* x y z u v r g b
* All fixed point values with 9 bits of precision.