ona/src/demos/graphics.zig

74 lines
2.0 KiB
Zig

const ona = @import("ona");
const std = @import("std");
const CRT = extern struct {
width: f32,
height: f32,
time: f32,
padding: [4]u8 = undefined,
};
const Effects = struct {
render_texture: ona.AssetHandle = .default,
image_textures: [2]ona.AssetHandle = [_]ona.AssetHandle{.default} ** 2,
last_time: f64 = 0,
image_index: usize = 0,
crt_effect: ona.AssetHandle = .default,
};
pub fn main() void {
ona.realtime_app
.with(.initModule(ona.hid))
.with(.initModule(ona.gfx))
// .with(.initSystem(.render, .of(render)))
.run();
}
// fn update(effects: ona.Write(Effects), loop: ona.Read(ona.Loop)) void {
// const update_seconds = 5;
// if ((loop.state.elapsed_time - effects.state.last_time) > update_seconds) {
// effects.state.image_index = (effects.state.image_index + 1) % effects.state.image_textures.len;
// effects.state.last_time = loop.state.elapsed_time;
// }
// }
// fn render(commands: ona.gfx.Commands) void {
// try commands.setTarget(.{
// .texture = effects.state.render_texture,
// .clear_color = gfx.colors.black,
// .clear_depth = 0,
// .clear_stencil = 0,
// });
// const width: f32 = @floatFromInt(display.state.width);
// const height: f32 = @floatFromInt(display.state.height);
// try commands.draw_texture(.{
// .texture = effects.state.image_textures[effects.state.image_index],
// .size = .{ width, height },
// });
// try commands.set_effect(.{
// .effect = effects.state.crt_effect,
// .properties = std.mem.asBytes(&CRT{
// .width = width,
// .height = height,
// .time = @floatCast(loop.state.elapsed_time),
// }),
// });
// try commands.set_target(.{
// .clear_color = null,
// .clear_depth = null,
// .clear_stencil = null,
// });
// try commands.draw_texture(.{
// .texture = effects.state.render_texture,
// .size = .{ width, height },
// });
// }