static struct nk_image
icon_load(const char *filename)
{
    int x,y,n;
    GLuint tex;
    unsigned char *data = stbi_load(filename, &x, &y, &n, 0);
    if (!data) die("[SDL]: failed to load image: %s", filename);

    glGenTextures(1, &tex);
    glBindTexture(GL_TEXTURE_2D, tex);
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST);
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR_MIPMAP_NEAREST);
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, x, y, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);
    glGenerateMipmap(GL_TEXTURE_2D);
    stbi_image_free(data);
    return nk_image_id((int)tex);
}
struct nk_image nk_common_image_load(const char *filename)
{
    int x,y,n;
    struct texture_image ti;
    uintptr_t tex;

    ti.width         = 0;
    ti.height        = 0;
    ti.pixels        = NULL;
    ti.supports_rgba = video_driver_supports_rgba();

    image_texture_load(&ti, filename);

    if (!ti.pixels)
       printf("Failed to load image: %s\n", filename);

    video_driver_texture_load(&ti, TEXTURE_FILTER_MIPMAP_NEAREST, &tex);

    image_texture_free(&ti);

    return nk_image_id((int)tex);
}