summaryrefslogtreecommitdiff
path: root/c2.cpp
blob: bb1b2e1b81722f6f514edb727c33644751ac9bc1 (plain) (blame)
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
#include "app.hpp"
#include "video.hpp"
extern "C" {
#include "plat.h"
#include "memory.h"
}

#define video_arena_size (1024 * 1024 * 16)
#define per_frame_memory_size (1024 * 1024)

struct C2 : public App {
	Device* dev;
	void on_resize() override {
		dev->on_resize();
	}
};

int main() {
	Arena video_arena;
	Device* dev;
	Shader* shader;
	C2* app = App::create<C2>("c2");
	void* per_frame;
	app->running = 1;
	init_arena(
		&video_arena,
		arena_alloc(app->arena, video_arena_size),
		video_arena_size
	);
	dev = Device::create(&video_arena, app); 
	app->dev = dev;
	shader = dev->load_shader("data/triangle.csh");

	per_frame = heap_alloc(
		dev->heap,
		per_frame_memory_size
	);
	uint8_t r = 0;
	while (app->running) {
		Arena frame_arena;
		init_arena(&frame_arena, per_frame, per_frame_memory_size);

		app->begin();
		dev->begin_frame();

		Pipeline_Builder pb(&frame_arena);
		pb.begin_rp();
		pb.rp_target(dev->get_backbuffer(), { r, 0x00, 0xff, 0xff });
		Render_Pass& pass = pb.build_rp();

		dev->get_ctx().submit(*dev, pass);

		r += 10;
		dev->present();
		app->end();
	}
	shader->destroy(dev);
	dev->destroy();
	app->destroy();
}