#include "texture.h" #include "qoi.h" #include mons_texture mons_texture_load(FILE *stream) { mons_image image = mons_load_qoi(stream); return mons_texture_from_image(image); } mons_texture mons_texture_from_image(mons_image image) { glTextureParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTextureParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTextureParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_LINEAR); glTextureParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); unsigned int texture; glGenTextures(1, &texture); glBindTexture(GL_TEXTURE_2D, texture); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, image.width, image.height, 0, GL_RGBA, GL_UNSIGNED_BYTE, image.data); glGenerateMipmap(GL_TEXTURE_2D); mons_texture result = { .id = texture, .width = image.width, .height = image.height, }; mons_image_free(&image); return result; } char *texure_uniforms[16] = { "base_texture", "normal_texture", NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, }; void mons_texture_bind(mons_program shader, unsigned int unit, mons_texture texture) { glActiveTexture(GL_TEXTURE0 + unit); glUniform1i(glGetUniformLocation(shader, texure_uniforms[unit]), unit); glBindTexture(GL_TEXTURE_2D, texture.id); }