RyanHub - file viewer
filename: src/render/texture.c
branch: main
back to repo
// texture.c

#include "texture.h"
#include <stdlib.h>
#include <stdio.h>

#define STB_IMAGE_IMPLEMENTATION
#include "stb_image.h"


Texture* load_texture(const char* path) {
    Texture* tex = malloc(sizeof(Texture));
    if (!tex) return NULL;

    int channels;
    unsigned char* data = stbi_load(path, &tex->width, &tex->height, &channels, 0);
    if (!data) {
        printf("failed to load texture: %s\n", path);
        free(tex);
        return NULL;
    }

    glGenTextures(1, &tex->id);
    glBindTexture(GL_TEXTURE_2D, tex->id);

    GLenum format = (channels == 4) ? GL_RGBA : GL_RGB;
    glTexImage2D(GL_TEXTURE_2D, 0, format, tex->width, tex->height, 0, format, GL_UNSIGNED_BYTE, data);
    glGenerateMipmap(GL_TEXTURE_2D);

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

    stbi_image_free(data);
    return tex;
}