-PROJECT = project1
-SRCS = main.c common.c list.c pixmap.c scene.c tri.c
+PROJECT = project2
+IUSE = CLIPPING DEPTH_TEST SMOOTH_COLOR \
+ EXTRA_INLINE NDEBUG RASTER_STATS RENDER_PROGRESS RENDER_TIMER
+
+# BACKFACE_CULLING avoid drawing triangles that are not facing forward
+# CLIPPING turn on clipping (you really always want this)
+# DEPTH_TEST enable the z buffer for depth testing
+# EXTRA_INLINE allow the compiler to inline even more aggressively
+# LIGHTING turn the lights on (experimental)
+# NDEBUG disable assertions and other nonessential checks
+# FIND_NORMALS[=n] pre-compute vertex normals at loading time
+# set to 1 for per-face normals, 2 for averaged normals
+# RASTER_STATS print triangle count and optimization savings at the end
+# RENDER_PROGRESS print progress while drawing the scene
+# RENDER_TIMER add a timer to see how long the renderer takes
+# SMOOTH_COLOR interpolate colors smoothly between triangle vertices
VIEWER = feh
CC = gcc
-CFLAGS = -std=c99 -O0 -ggdb
-CPPFLAGS= -MMD -DDEBUG
+CFLAGS = -std=c99 -O2 -g -pg
+CPPFLAGS= -MMD $(IUSE:%=-D%)
LDLIBS = -lm
+SRCS = main.c common.c list.c raster.c rbtree.c scene.c
OBJS = $(SRCS:%.c=%.o)
DEPS = $(OBJS:%.o=%.d)
rm -f $(PROJECT) $(OBJS) $(DEPS)
distclean: clean
- rm -f scene.ppm scene.bmp
+ rm -f tags gmon.out scene.ppm scene.bmp
+
+dist:
+ git archive $(PROJECT) --prefix=$(PROJECT)/ --output=$(PROJECT).zip
run: $(PROJECT)
./$< && $(VIEWER) scene.ppm
gdb ./$<
-include $(DEPS)
+$(OBJS): Makefile
+
+.PHONY: all clean distclean run debug