1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
|
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* scop.h :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2020/05/09 10:41:44 by charles #+# #+# */
/* Updated: 2020/05/14 14:58:23 by charles ### ########.fr */
/* */
/* ************************************************************************** */
#ifndef SCOP_H
# define SCOP_H
# include <unistd.h>
# include <fcntl.h>
# include <stdbool.h>
# include <stdlib.h>
# include <GL/glew.h>
# include <SDL2/SDL.h>
# include "libft.h"
# include "libft_vec.h"
# include "libftm.h"
# include "libftm_mat4.h"
# include "libftm_vec3.h"
#define WINDOW_WIDTH 640
#define WINDOW_HEIGHT 480
typedef struct
{
float *vertices;
unsigned int *indices;
size_t vertices_size;
size_t indices_size;
} t_model_data;
typedef struct
{
unsigned int vertex_buf;
unsigned int index_buf;
size_t index_buf_size;
unsigned int vertex_array;
struct
{
t_ftmmat4 center;
t_ftmmat4 model;
t_ftmmat4 view;
t_ftmmat4 proj;
} transform;
} t_scene;
typedef struct
{
unsigned int id;
struct
{
int model;
int view;
int proj;
} location;
} t_shader;
typedef struct
{
SDL_Window *window;
SDL_GLContext *context;
bool running;
int width;
int height;
t_scene scene;
t_shader shader;
GLenum polygon_mode;
float fov;
} t_state;
union u_color
{
float data[4];
struct
{
float r;
float g;
float b;
float a;
};
};
/*
** state.c
*/
bool state_init(t_state *state, t_model_data *data);
void state_run(t_state *state);
void state_quit(t_state *state);
/*
** scene.c
*/
void scene_init(t_scene *scene, t_model_data *data);
void scene_update_proj(t_scene *scene, float fov, int width, int height);
void scene_update_model(t_scene *scene, float rotation_radian);
void scene_quit(t_scene *scene);
/*
** parse.c
*/
int parse(char *filepath, t_model_data *object);
/*
** error.c
*/
# define GL_CALL(x) error_clear(); \
x; \
error_check(#x, __FILE__, __LINE__)
void error_clear(void);
void error_check(char *code, char *filename, int line_num);
/*
** shader.c
*/
bool shader_init(t_shader *shader);
void shader_update_mvp(t_shader *shader, t_scene *scene);
/*
** texture.c
*/
unsigned int texture_new(char *filepath);
/*
** helper.c
*/
bool has_extension(char *filepath, char *extension);
/*
** color.c
*/
bool color_merge_vertices(t_model_data *object, float *coords);
float *texture_coord_create(float *vertices, size_t vertices_len);
#endif
|