Small optimizations

This commit is contained in:
duarteapcoelho 2022-08-21 22:11:27 +01:00
parent 040c4ae81c
commit 2d687fadf0
4 changed files with 11 additions and 21 deletions

View File

@ -14,7 +14,7 @@ DEPS = $(patsubst $(SRCDIR)/%,build_sdl/%,$(SOURCES:.cpp=.d))
TARGET = racing
debug: CFLAGS += -O0 -g
debug: CFLAGS += -Og -g
debug: $(TARGET)
release: CFLAGS += -Ofast

View File

@ -35,7 +35,7 @@ MKG3AFLAGS := -n basic:test -i uns:../unselected.bmp -i sel:../selected.bmp
# (LTO). Doing so will usually allow the compiler to generate much better code
# (smaller and/or faster), but may expose bugs in your code that don't cause
# any trouble without LTO enabled.
CFLAGS = -Ofast -Wall -Wextra $(MACHDEP) $(INCLUDE) -DPRIZM
CFLAGS = -Ofast -Wall -Wextra $(MACHDEP) $(INCLUDE) -DPRIZM -funroll-loops
CXXFLAGS = $(CFLAGS) -fno-exceptions
LDFLAGS = $(MACHDEP) -T$(FXCGSDK)/toolchain/prizm.x -Wl,-static -Wl,-gc-sections

View File

@ -7,7 +7,7 @@
#define NEAR_PLANE 0.1
#define FAR_PLANE 100
#define PIXEL_SIZE 4
#define PIXEL_SIZE 1
#define RENDER_WIDTH (DISPLAY_WIDTH/PIXEL_SIZE)
#define RENDER_HEIGHT (DISPLAY_HEIGHT/PIXEL_SIZE)

View File

@ -137,7 +137,7 @@ namespace Rasterizer {
}
for(int y = minY; y < maxY; y++){
bool hasEntered = false;
// bool hasEntered = false;
int ie1 = e1;
int ie2 = e2;
int ie3 = e3;
@ -154,31 +154,21 @@ namespace Rasterizer {
vec3d b = {i_bary_u, i_bary_v, i_bary_w};
// i_z = (b.x * i_p0z + b.y * i_p1z + b.z * i_p2z);
i_z.i = ((b.x.i * i_p0z.i) + (b.y.i * i_p1z.i) + (b.z.i * i_p2z.i));
visible = visible && (i_z > depthBuffer[x+y*RENDER_WIDTH] || depthBuffer[x+y*RENDER_WIDTH] == -1);
}
if(visible){
// Color c = shader.fragmentShader(triangle.c, shader.uniforms);
// if((ie1 >= -2 && ie1 <= 2)
// || (ie2 >= -2 && ie2 <= 2)
// || (ie3 >= -2 && ie3 <= 2))
// c = {255 - c.r, 255 - c.g, 255 - c.b};
if(useDepth){
if(i_z > depthBuffer[x+y*RENDER_WIDTH] || depthBuffer[x+y*RENDER_WIDTH] == -1){
depthBuffer[x+y*RENDER_WIDTH] = i_z;
// if(!(i_z == 0)){
// c.r = (int)(fp(c.r) * i_z * fp(100));
// c.g = (int)(fp(c.g) * i_z * fp(100));
// c.b = (int)(fp(c.b) * i_z * fp(100));
// }
#if PIXEL_SIZE == 1
Display::drawPoint(x, y, triangle.c);
#else
Display::fillRect(x*PIXEL_SIZE, y*PIXEL_SIZE, PIXEL_SIZE, PIXEL_SIZE, triangle.c);
#endif
}
} else {
#if PIXEL_SIZE == 1
Display::drawPoint(x, y, triangle.c);
#else
Display::fillRect(x*PIXEL_SIZE, y*PIXEL_SIZE, PIXEL_SIZE, PIXEL_SIZE, triangle.c);
#endif
}
hasEntered = true;
} else if(hasEntered) {
break;
}
ie1 += (p0.y - p1.y);
ie2 += (p1.y - p2.y);