tinyrenderer/src/main.c

45 lines
1.1 KiB
C

#include "img.h"
#include "mem_arena.h"
#include "mem_utils.h"
#include "obj.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
enum {
TINY_EXIT_SUCCESS,
TINY_EXIT_ARENA_INIT_FAILED,
TINY_EXIT_IMAGE_INIT_FAILED,
TINY_EXIT_MODEL_LOAD_FAILED,
};
int main(void) {
Arena *arena = NULL;
if (!wapp_mem_arena_init(&arena, 10ul * 1024ul * 1024ul * 1024ul,
WAPP_MEM_ALLOC_RESERVE, false)) {
return TINY_EXIT_ARENA_INIT_FAILED;
}
Colour bg = {.r = 42, .g = 45, .b = 52, .a = 255};
Colour teal = {.r = 14, .g = 156, .b = 208, .a = 255};
Colour orange = {.r = 242, .g = 100, .b = 48, .a = 255};
Image img = {.width = 1200, .height = 1200};
if (!init_image(arena, &img)) {
return TINY_EXIT_IMAGE_INIT_FAILED;
}
Model model = load_obj_file(arena, "resources/triangle.obj");
if (IS_NULL_MODEL(model)) {
return TINY_EXIT_MODEL_LOAD_FAILED;
}
clear_image(&img, bg);
render_model(&model, &img, teal, RENDER_TYPE_FILLED);
render_model(&model, &img, orange, RENDER_TYPE_WIREFRAME);
save_image(&img, "result.pam");
wapp_mem_arena_destroy(&arena);
return TINY_EXIT_SUCCESS;
}