From: Charles McGarvey Date: Wed, 7 Mar 2012 23:31:22 +0000 (-0700) Subject: fixes for compiling with mingw32 X-Git-Tag: project3 X-Git-Url: https://git.brokenzipper.com/gitweb?a=commitdiff_plain;h=07083c8dfbbd4fe48e84d86ce8d7e44e0719b84a;p=chaz%2Frasterize fixes for compiling with mingw32 --- diff --git a/Makefile b/Makefile index d361c49..1dee42f 100644 --- a/Makefile +++ b/Makefile @@ -6,6 +6,7 @@ IUSE = BACKFACE_CULLING BLENDING DEPTH_TEST EXTRA_INLINE NDEBUG \ VIEWER = feh CC = gcc +EXEEXT = CFLAGS = -std=c99 -O2 -g -pg CPPFLAGS= -MMD $(IUSE:%=-D%) LDLIBS = -lm @@ -13,14 +14,15 @@ LDLIBS = -lm SRCS = main.c array.c common.c list.c model.c raster.c rbtree.c scene.c OBJS = $(SRCS:%.c=%.o) DEPS = $(OBJS:%.o=%.d) +PROG = $(PROJECT)$(EXEEXT) -all: $(PROJECT) +all: $(PROG) -$(PROJECT): $(OBJS) +$(PROG): $(OBJS) $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ $(LDLIBS) clean: - rm -f $(PROJECT) $(OBJS) $(DEPS) + rm -f $(PROG) $(OBJS) $(DEPS) distclean: clean rm -f tags gmon.out @@ -31,10 +33,10 @@ realclean: distclean dist: git archive HEAD --prefix=$(PROJECT)/ --output=$(PROJECT).zip -run: $(PROJECT) +run: $(PROG) ./$< && $(VIEWER) scene.ppm -debug: $(PROJECT) +debug: $(PROG) gdb ./$< -include $(DEPS) diff --git a/README b/README index 4a1a889..4a614ea 100644 --- a/README +++ b/README @@ -8,8 +8,27 @@ Project 3 Notes To build, just `make' it. You will need GNU make; it won't work well with any other kind of make(1). Once built, the executable is called rasterize. +Caveats: + +1. I happened to do Phong interpolation a little differently (i.e. not as +good) compared to what is described in the project handout. Instead of +calculating the lighting vectors in eye-coordinates, I did it all in world +coordinates. So I had to save the camera position (already in world +coordinates) from the scene file and transform each point vector of the +geometry by just the view matrix. Anyway, the results look a little bit +different than the provide images, so maybe I didn't do it quite right. + +2. Contrary to the specification, the geometry color is not overridden by a +texture map in this implementation. Rather, the geometry color is +multiplied by the texture color, so blending can work with texture mapping. + +3. The PPM importer doesn't handle comments, and the BMP importer is also +quite picky about the depth and color space, though importing will fail +without any useful explanation. + Known to run on: - * Linux 3.2.1-gentoo - * NetBSD 5.1.2 + * Linux 3.2.1-gentoo (x86_64) + * NetBSD 5.1.2 (amd64) * Darwin 10.8.0 (in the Mac lab) + * Win32 (tried with i686-mingw32-gcc) diff --git a/raster.c b/raster.c index 9ab926a..9cb12c5 100644 --- a/raster.c +++ b/raster.c @@ -305,14 +305,15 @@ raster_t* raster_import_ppm(const char* filename) for (int y = h - 1; y >= 0; --y) { for (int x = 0; x < w; ++x) { - rgbachan_t r, g, b; - if (fscanf(file, "%hhu %hhu %hhu ", &r, &g, &b) != 3) { + uint16_t r, g, b; + /* mingw32 does not like %hhu conversion type */ + if (fscanf(file, "%hu %hu %hu ", &r, &g, &b) != 3) { fprintf(stderr, "Failed reading color values from %s: %s\n", filename, strerror(errno)); return NULL; } - rgba_t rgba = PACK(rgba, 3, r); - rgba = PACK(rgba, 2, g); - rgba = PACK(rgba, 1, b); + rgba_t rgba = PACK(rgba, 3, (uint8_t)r); + rgba = PACK(rgba, 2, (uint8_t)g); + rgba = PACK(rgba, 1, (uint8_t)b); rgba = PACK(rgba, 0, 255); p->pixels[y * w + x] = color_from_rgba(rgba); }