text drawing using freetype

This commit is contained in:
2023-09-12 03:21:54 +02:00
parent 6f70018892
commit 41d28a222c
18 changed files with 697 additions and 50 deletions
+28 -8
View File
@@ -1,9 +1,12 @@
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <glad/gl.h>
#include "3rdparty/stb/stb_image.h"
#include "cudoku.h"
#include "font.h"
#include "shader.h"
static const float quad_vertices[] = {
@@ -31,7 +34,7 @@ void set_scale_factor(int width, int height, float *x, float *y) {
}
}
unsigned int prepare_bg(bool use_texture) {
unsigned int prepare_bg(bool use_texture, unsigned int *texture) {
unsigned int vbo, vao, ebo;
glGenVertexArrays(1, &vao);
glGenBuffers(1, &vbo);
@@ -49,12 +52,11 @@ unsigned int prepare_bg(bool use_texture) {
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 5 * sizeof(float), (void *)0);
if (use_texture) {
unsigned int texture;
int tex_width = 0, tex_height = 0;
unsigned char *tex_data = NULL;
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);
glGenTextures(1, &(*texture));
glBindTexture(GL_TEXTURE_2D, *texture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
@@ -80,20 +82,38 @@ unsigned int prepare_bg(bool use_texture) {
return vao;
}
void draw_bg_grid_shader(Shader shader, int vao, float* transform, float resolution) {
void draw_bg_grid_shader(Shader shader, unsigned int vao, float* transform, float resolution) {
use_shader(shader);
set_mat4(shader, "transform", transform);
set_mat4f(shader, "transform", transform);
set_float(shader, "resolution", resolution);
glBindVertexArray(vao);
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);
}
void draw_bg_grid_texture(Shader shader, int vao, float* transform) {
void draw_bg_grid_texture(Shader shader, unsigned int vao, unsigned int texture, float* transform) {
use_shader(shader);
set_mat4(shader, "transform", transform);
set_mat4f(shader, "transform", transform);
glBindVertexArray(vao);
glBindTexture(GL_TEXTURE_2D, texture);
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);
}
void draw_numbers(Shader shader, unsigned int vao, unsigned int vbo, float *transform, int board[9][9]) {
// TODO: go thru the board state and call draw_text() with the appropriate number
// and position
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
draw_number(shader, board[i][j], i, j, 5.0f, vao, vbo, transform);
}
}
}
void draw_win_overlay(Shader shader, unsigned int vao, unsigned int vbo, float *transform) {
const char *text = "You won!";
Size text_size = calculate_text_size(text, 1.0f);
draw_text(shader, text, text_size, 1.0f, vao, vbo, transform);
}