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
|
#include "konprogram.h"
typedef struct demo {
kon_camera_t camera;
kon_material_t material;
kon_light_t light;
float angle;
int ortho;
} demo_t;
static int init(kon_program_t *program, void *user)
{
demo_t *demo = user;
(void)program;
demo->camera = kon_cameraDefault();
demo->camera.position = KON_VEC3(3, 3, 6);
demo->material = kon_materialColor(0xFFC8C8FF);
demo->light = kon_lightDefault();
return 1;
}
static int event(kon_program_t *program, const kon_event_t *ev, void *user)
{
demo_t *demo = user;
(void)program;
if (ev->type == KON_EVENT_KEY_DOWN && ev->key == KON_KEY_O) {
demo->ortho = !demo->ortho;
demo->camera.projection = demo->ortho ? KON_PROJECTION_ORTHOGRAPHIC : KON_PROJECTION_PERSPECTIVE;
return 1;
}
return 0;
}
static void update(kon_program_t *program, double dt, void *user)
{
demo_t *demo = user;
(void)program;
demo->angle += (float)dt;
}
static void draw(kon_program_t *program, kon_framebuffer_t *game, void *user)
{
demo_t *demo = user;
kon_mat4_t model = kon_mat4Rotate(kon_mat4Identity(), KON_VEC3(demo->angle * 0.5f, demo->angle, 0));
kon_mat4_t viewProjection = kon_cameraViewProjection(&demo->camera, game->width, game->height);
(void)program;
kon_drawMesh(game, viewProjection, model, &kon_cubeMesh, &demo->material, &demo->light, KON_RENDER_DEFAULT);
}
int main(void)
{
demo_t demo = {0};
kon_programConfig_t config = {0};
config.title = "engine";
config.user = &demo;
config.init = init;
config.event = event;
config.update = update;
config.draw = draw;
return kon_programRun(&config);
}
|