summaryrefslogtreecommitdiff
path: root/c2.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'c2.cpp')
-rw-r--r--c2.cpp73
1 files changed, 65 insertions, 8 deletions
diff --git a/c2.cpp b/c2.cpp
index f53d59d..ac9e7d4 100644
--- a/c2.cpp
+++ b/c2.cpp
@@ -162,6 +162,61 @@ struct Orbit_Cam {
}
};
+struct Fullscreen_Quad {
+ Buffer_Id vb;
+
+ void init(Device* d) {
+ float verts[] = {
+ -1.0f, -1.0f, 0.0f, 0.0f,
+ -1.0f, 3.0f, 0.0f, 2.0f,
+ 3.0f, -1.0f, 2.0f, 0.0f
+ };
+ Buffer_Id stage;
+ void* mem;
+ stage = d->create_buffer(
+ "sky vb stage",
+ sizeof verts,
+ Buffer_Flags::cpu_readwrite |
+ Buffer_Flags::copy_src
+ );
+ mem = d->map_buffer(stage, 0, sizeof verts);
+ memcpy(mem, verts, sizeof verts);
+ d->unmap_buffer(stage);
+ vb = d->create_buffer(
+ "fullscreen quad",
+ sizeof verts,
+ Buffer_Flags::copy_dst |
+ Buffer_Flags::vertex_buffer
+ );
+ Context& ctx = d->acquire();
+ ctx.copy(vb, stage);
+ d->submit(ctx);
+ d->destroy_bufferi(stage);
+ }
+
+ void destroy(Device* d) {
+ d->destroy_buffer(vb);
+ }
+
+ void render(
+ Context& ctx,
+ Pipeline& pip,
+ Render_Pass& pass,
+ int bind
+ ) {
+ Vertex_Buffer_Binding vbb[] = {{
+ .id = vb,
+ .offset = 0,
+ .target = bind
+ }, {}};
+ Draw draw{};
+ draw.verts = vbb;
+ draw.vertex_count = 3;
+ draw.instance_count = 1;
+ ctx.submit(draw, pip, pass);
+ }
+};
+
struct Sky {
Staged_Buffer config;
Texture_Id texture;
@@ -592,6 +647,7 @@ struct C2 : public App {
Lighting lighting;
Camera_Id camera;
Orbit_Cam orbit_cam;
+ Fullscreen_Quad quad;
Sky sky;
Env_Probe eprobe;
Tonemap tonemap;
@@ -647,6 +703,7 @@ struct C2 : public App {
ui_shader = (Shader*)assets.load("ui.csh");
texture = (Texture*)assets.load("22.tex");
texture2 = (Texture*)assets.load("kita.tex");
+ quad.init(dev);
cbuf = dev->create_buffer(
"config buffer",
sizeof(Config_Buffer),
@@ -658,7 +715,7 @@ struct C2 : public App {
per_frame_memory_size
);
clamped_linear = create_clamped_linear(dev);
- renderer.init(arena, dev, assets);
+ renderer.init(arena, dev);
world = (World*)arena_alloc(arena, sizeof *world);
world->init(arena);
ui = UI::create(this, &ui_arena);
@@ -669,7 +726,7 @@ struct C2 : public App {
ui->layout(w, h);
fps_label = ui->create_element<UI::Label>(ui->root, "");
scene.init(&scene_arena, 32, clamped_linear);
- lighting.init(dev, w, h);
+ lighting.init(dev);
sky.init(dev, &assets);
eprobe.init(dev, &assets, 256);
tonemap.init(dev, &assets);
@@ -827,7 +884,7 @@ struct C2 : public App {
Render_Pass& tonemap_pass = pb.build_rp();
ctx.debug_push("environment cube");
- eprobe.render(dev, &frame_arena, renderer.quad, sky);
+ eprobe.render(dev, &frame_arena, quad, sky);
ctx.debug_pop();
renderer.env_cubemap = eprobe.get_cubemap();
@@ -836,11 +893,11 @@ struct C2 : public App {
Texture& bb = dev->get_texture(hdr_target);
pcam.asp = (float)bb.w / (float)bb.h;
- renderer.prev_vp = pcam.get_proj() * pcam.get_view();
orbit_cam.update_orbit(*this);
pcam.update();
lighting.update(dev, ctx, *world, renderer, scene);
update_scene(scene, dev, *world);
+ lr.add_box(scene.bound);
ctx.debug_push("scene");
renderer.render(
dev,
@@ -854,7 +911,7 @@ struct C2 : public App {
sky.render(
dev,
&frame_arena,
- renderer.quad,
+ quad,
sky_pass,
clamped_linear,
pcam,
@@ -868,7 +925,7 @@ struct C2 : public App {
tonemap.render(
dev,
&frame_arena,
- renderer.quad,
+ quad,
tonemap_pass,
hdr_target,
clamped_linear
@@ -902,7 +959,7 @@ struct C2 : public App {
clamped_linear
);
Pipeline& ui_pip = pb.build();
- renderer.quad.render(
+ quad.render(
ctx,
ui_pip,
ui_pass,
@@ -944,6 +1001,7 @@ struct C2 : public App {
}
void on_destroy() override {
+ quad.destroy(dev);
scene.destroy(dev);
sky.destroy(dev);
lighting.destroy(dev, renderer);
@@ -972,7 +1030,6 @@ struct C2 : public App {
dev->destroy_buffer(ui_buffer);
make_hdr_target();
make_ui_texture();
- lighting.recreate(dev, w, h);
}
void make_hdr_target() {