-
Notifications
You must be signed in to change notification settings - Fork 0
/
sokol.cpp
110 lines (87 loc) · 2.29 KB
/
sokol.cpp
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
// cl /std:c++17 /nologo /Zi /Iinclude sokol.cpp
#define SOKOL_IMPL
#define SOKOL_GLCORE33
#define SOKOL_WIN32_FORCE_MAIN
#include <sokol_app.h>
#include <sokol_gfx.h>
#include <sokol_glue.h>
#include <sokol_log.h>
sg_buffer vbuf;
sg_pipeline pip;
void init() {
sg_desc desc = {};
desc.context = sapp_sgcontext();
desc.logger.func = slog_func;
sg_setup(&desc);
struct Vertex {
float position[3];
float color[4];
};
vbuf = {};
{
Vertex vertices[] = {
{{+0.0f, +0.5f, 0.0f}, {1.0f, 0.0f, 0.0f, 1.0f}},
{{-0.5f, -0.5f, 0.0f}, {0.0f, 1.0f, 0.0f, 1.0f}},
{{+0.5f, -0.5f, 0.0f}, {0.0f, 0.0f, 1.0f, 1.0f}},
};
sg_buffer_desc desc = {};
desc.data = SG_RANGE(vertices);
vbuf = sg_make_buffer(&desc);
}
sg_shader shd = {};
{
sg_shader_desc desc = {};
desc.vs.source = R"(
#version 330 core
layout(location=0) in vec3 a_position;
layout(location=1) in vec4 a_color;
out vec4 v_color;
void main() {
gl_Position = vec4(a_position, 1.0);
v_color = a_color;
}
)";
desc.fs.source = R"(
#version 330 core
in vec4 v_color;
out vec4 f_color;
void main() {
f_color = v_color;
}
)";
shd = sg_make_shader(&desc);
}
pip = {};
{
sg_pipeline_desc desc = {};
desc.shader = shd;
desc.layout.attrs[0].format = SG_VERTEXFORMAT_FLOAT3;
desc.layout.attrs[1].format = SG_VERTEXFORMAT_FLOAT4;
pip = sg_make_pipeline(&desc);
}
}
void frame() {
sg_pass_action pass_action = {};
pass_action.colors[0].load_action = SG_LOADACTION_CLEAR;
pass_action.colors[0].clear_value = {0.5f, 0.5f, 0.5f, 1.0f};
sg_begin_default_pass(&pass_action, sapp_width(), sapp_height());
sg_bindings bind = {};
bind.vertex_buffers[0] = vbuf;
sg_apply_pipeline(pip);
sg_apply_bindings(&bind);
sg_draw(0, 3, 1);
sg_end_pass();
sg_commit();
}
void cleanup() { sg_shutdown(); }
sapp_desc sokol_main(int argc, char **argv) {
sapp_desc desc = {};
desc.init_cb = init;
desc.frame_cb = frame;
desc.cleanup_cb = cleanup;
desc.width = 800;
desc.height = 600;
desc.window_title = "Sokol";
desc.logger.func = slog_func;
return desc;
}