/* * Copyright (C) 2018 Tomasz Kramkowski * SPDX-License-Identifier: MIT */ #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); }