contributed by <Weinux
>
raytracing
Weinux
make PROFILE=1
EXEC = raytracing
.PHONY: all
all: $(EXEC)
CC ?= gcc
CFLAGS = \
-std=gnu99 -Wall -O0 -g
LDFLAGS = \
-lm
ifeq ($(strip $(PROFILE)),1)
PROF_FLAGS = -pg
CFLAGS += $(PROF_FLAGS)
LDFLAGS += $(PROF_FLAGS)
endif
OBJS := \
objects.o \
raytracing.o \
main.o
%.o: %.c
$(CC) $(CFLAGS) -c -o $@ $<
$(EXEC): $(OBJS)
$(CC) -o $@ $^ $(LDFLAGS)
main.o: use-models.h
use-models.h: models.inc Makefile
@echo '#include "models.inc"' > use-models.h
@egrep "^(light|sphere|rectangular) " models.inc | \
sed -e 's/^light /append_light/g' \
-e 's/light[0-9]/(\&&, \&lights);/g' \
-e 's/^sphere /append_sphere/g' \
-e 's/sphere[0-9]/(\&&, \&spheres);/g' \
-e 's/^rectangular /append_rectangular/g' \
-e 's/rectangular[0-9]/(\&&, \&rectangulars);/g' \
-e 's/ = {//g' >> use-models.h
check: $(EXEC)
@./$(EXEC) && diff -u baseline.ppm out.ppm || (echo Fail; exit)
@echo "Verified OK"
clean:
$(RM) $(EXEC) $(OBJS) use-models.h \
out.ppm gmon.out
Flat profile:
Each sample counts as 0.01 seconds.
% cumulative self self total
time seconds seconds calls s/call s/call name
20.85 0.65 0.65 56956357 0.00 0.00 subtract_vector
15.71 1.14 0.49 69646433 0.00 0.00 dot_product
13.79 1.57 0.43 10598450 0.00 0.00 normalize
10.10 1.89 0.32 31410180 0.00 0.00 multiply_vector
8.02 2.14 0.25 13861875 0.00 0.00 rayRectangularIntersection
6.90 2.35 0.22 17836094 0.00 0.00 add_vector
6.09 2.54 0.19 4620625 0.00 0.00 ray_hit_object
3.53 2.65 0.11 17821809 0.00 0.00 cross_product
2.73 2.74 0.09 4221152 0.00 0.00 multiply_vectors
2.57 2.82 0.08 1048576 0.00 0.00 ray_color
1.92 2.88 0.06 13861875 0.00 0.00 raySphereIntersection
1.60 2.93 0.05 2110576 0.00 0.00 compute_specular_diffuse
1.44 2.97 0.05 2520791 0.00 0.00 idx_stack_top
1.28 3.01 0.04 1241598 0.00 0.00 protect_color_overflow
0.96 3.04 0.03 2110576 0.00 0.00 localColor
0.80 3.07 0.03 3838091 0.00 0.00 length
0.64 3.09 0.02 1 0.02 3.12 raytracing
0.32 3.10 0.01 1241598 0.00 0.00 refraction
0.32 3.11 0.01 1204003 0.00 0.00 idx_stack_push
0.32 3.12 0.01 1048576 0.00 0.00 rayConstruction
0.16 3.12 0.01 37595 0.00 0.00 idx_stack_pop
0.00 3.12 0.00 2558386 0.00 0.00 idx_stack_empty
0.00 3.12 0.00 1241598 0.00 0.00 reflection
0.00 3.12 0.00 1048576 0.00 0.00 idx_stack_init
0.00 3.12 0.00 113297 0.00 0.00 fresnel
0.00 3.12 0.00 3 0.00 0.00 append_rectangular
0.00 3.12 0.00 3 0.00 0.00 append_sphere
0.00 3.12 0.00 2 0.00 0.00 append_light
0.00 3.12 0.00 1 0.00 0.00 calculateBasisVectors
0.00 3.12 0.00 1 0.00 0.00 delete_light_list
./raytracing
gprof ./raytracing | less
Raytracing結果圖