]> Dogcows Code - chaz/rasterize/blobdiff - raster.c
import project 3 files; added blending
[chaz/rasterize] / raster.c
index 2be94da36538c4b31795c9827d5bf6444083e195..b4f466fcb0504dfc9b69a7a32e8770e7b01f1b93 100644 (file)
--- a/raster.c
+++ b/raster.c
@@ -334,6 +334,7 @@ color_t _do_phong_lighting(raster_t* p, vert_t vert)
 {
 #if LIGHTING
     color_t color = COLOR_BLACK;
+    color.a = vert.c.a;
     for (list_t* i = p->lights; i; i = i->link) {
         light_t light = *(light_t*)i->val;
         vec_t   mpos = vert.v;
@@ -428,18 +429,25 @@ void raster_draw_tri(raster_t* p, const tri_t* triangle)
                 if (S(-1.0) < v.z && v.z < *n) {
 #endif
                     color_t* c = p->pixels + y * p->w + x;
+                    color_t  newC;
 
 #if LIGHTING == 2 || (!LIGHTING && SMOOTH_COLOR)
-                    *c = color_interp2(color1, color2, color3, b);
+                    newC = color_interp2(color1, color2, color3, b);
 #elif LIGHTING == 3 && SMOOTH_COLOR
-                    *c = _do_phong_lighting(p, tri_interp(tl, b));
+                    newC = _do_phong_lighting(p, tri_interp(tl, b));
 #elif LIGHTING == 3 && !SMOOTH_COLOR
                     vert_t d = vert_new(tri_point(t, b));
                     d.c = tri_color(t);
                     d.n = tri_normal2(t, b);
-                    *c = _do_phong_lighting(p, d);
+                    newC = _do_phong_lighting(p, d);
 #else
-                    *c = color;
+                    newC = color;
+#endif
+
+#if BLENDING
+                    *c = color_blend(*c, newC);
+#else
+                    *c = newC;
 #endif
 
 #if DEPTH_TEST
This page took 0.019442 seconds and 4 git commands to generate.