#include "sprite.h" #include "shader.h" struct sprite_renderer init_renderer(u32 shader) { struct sprite_renderer renderer = {0}; renderer.shader = shader; f32 vertices[] = { 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f }; u32 vao, vbo; glGenVertexArrays(1, &vao); glGenBuffers(1, &vbo); glBindBuffer(GL_ARRAY_BUFFER, vbo); glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); glBindVertexArray(vao); glEnableVertexAttribArray(0); glVertexAttribPointer(0, 4, GL_FLOAT, 0, 4 * sizeof(f32), 0); glBindBuffer(GL_ARRAY_BUFFER, 0); glBindVertexArray(0); renderer.vao = vao; return renderer; } void render_sprite(struct sprite_renderer renderer, u32 texture, v2 pos, v2 size, f32 rotate, v3 color) { glUseProgram(renderer.shader); mat model = mat_identity; model = scale_mat(model, (v3){size.x, size.y, 0.0f}); model = translate_mat(model, (v3){-0.5f * size.x, -0.5f * size.y, 0.0f}); model = rotate_mat(model, (v3){0.0f, 0.0f, rotate}); model = translate_mat(model, (v3){0.5f * size.x, 0.5f * size.y, 0.0f}); model = translate_mat(model, (v3){pos.x, pos.y, 0.0f}); uniform_mat(renderer.shader, "model", model); uniform_v3(renderer.shader, "color", color); glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, texture); glBindVertexArray(renderer.vao); glDrawArrays(GL_TRIANGLES, 0, 6); glBindVertexArray(0); glUseProgram(0); }