aboutsummaryrefslogtreecommitdiffstats
path: root/mtl.c
diff options
context:
space:
mode:
Diffstat (limited to 'mtl.c')
-rw-r--r--mtl.c54
1 files changed, 54 insertions, 0 deletions
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 <assert.h>
+#include <stdio.h>
+#include <string.h>
+
+#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);
+}