From b659c412263f6dd7df962f7d42f4f51b7c3d5609 Mon Sep 17 00:00:00 2001 From: Tomasz Kramkowski Date: Wed, 2 May 2018 21:22:03 +0100 Subject: Implement diffuse texture loading and basic material support --- mtl.c | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 mtl.c (limited to 'mtl.c') diff --git a/mtl.c b/mtl.c new file mode 100644 index 0000000..7f53fa2 --- /dev/null +++ b/mtl.c @@ -0,0 +1,54 @@ +#include +#include +#include + +#include "ensize.h" +#include "eprintf.h" +#include "mtl.h" +#include "tex.h" + +struct mtl { + char name[50]; + GLuint diffuse; +}; + +static struct mtl *mtls; +static int lmtls; +static size_t nmtls; + +int mtl_load(char *name) +{ + struct mtl *m; + char loc[100]; + FILE *f; + + for (int i = 0; i < lmtls; i++) + if (strcmp(mtls[i].name, name) == 0) + return i; + + mtls = ENSIZE(mtls, lmtls + 1, &nmtls, 16); + m = &mtls[lmtls]; + + snprintf(m->name, sizeof m->name, "%s", name); + + snprintf(loc, sizeof loc, "./tex/%s.png", name); + f = fopen(loc, "rb"); + if (f == NULL) + eprintf("Could not open '%s':", loc); + m->diffuse = png2tex(f); + fclose(f); + + return lmtls++; +} + +void mtl_use(int mtl) +{ + assert(mtl < lmtls); + + // TODO: Blank textures or something + if (mtl < 0) + return; + + gl_tex_active(GL_TEXTURE0); + gl_tex_bind(GL_TEXTURE_2D, mtls[mtl].diffuse); +} -- cgit v1.2.3-54-g00ecf