Made render a system again
This commit is contained in:
parent
933cf2f1f4
commit
a8071bd783
5 changed files with 25 additions and 36 deletions
|
|
@ -11,7 +11,6 @@ pub const SystemGroup = []const System;
|
||||||
pub const SyncGroup = []const System;
|
pub const SyncGroup = []const System;
|
||||||
|
|
||||||
pub const Resources = struct {
|
pub const Resources = struct {
|
||||||
window: Renderer.Window,
|
|
||||||
renderer: Renderer,
|
renderer: Renderer,
|
||||||
input: Input,
|
input: Input,
|
||||||
delta_time: f64 = 0.0,
|
delta_time: f64 = 0.0,
|
||||||
|
|
|
||||||
36
src/main.zig
36
src/main.zig
|
|
@ -5,6 +5,7 @@ const Input = @import("sideros").Input;
|
||||||
const mods = @import("sideros").mods;
|
const mods = @import("sideros").mods;
|
||||||
const ecs = @import("sideros").ecs;
|
const ecs = @import("sideros").ecs;
|
||||||
const builtin = @import("builtin");
|
const builtin = @import("builtin");
|
||||||
|
const Renderer = @import("sideros").Renderer;
|
||||||
|
|
||||||
const platform = if (builtin.target.os.tag == .linux) (if (config.wayland) @import("wayland.zig") else @import("xorg.zig")) else @import("xorg.zig");
|
const platform = if (builtin.target.os.tag == .linux) (if (config.wayland) @import("wayland.zig") else @import("xorg.zig")) else @import("xorg.zig");
|
||||||
|
|
||||||
|
|
@ -43,30 +44,15 @@ pub fn main() !void {
|
||||||
//var w = try Renderer.Window.create(800, 600, "sideros");
|
//var w = try Renderer.Window.create(800, 600, "sideros");
|
||||||
//defer w.destroy();
|
//defer w.destroy();
|
||||||
|
|
||||||
//var r = try Renderer.init(allocator, w);
|
const resources = ecs.Resources{
|
||||||
//defer r.deinit();
|
.renderer = undefined,
|
||||||
|
.input = .{ .key_pressed = .{false} ** @intFromEnum(Input.KeyCode.menu) },
|
||||||
|
};
|
||||||
|
var pool = try ecs.Pool.init(allocator, resources);
|
||||||
|
defer pool.deinit();
|
||||||
|
try pool.addSystemGroup(&[_]ecs.System{
|
||||||
|
Renderer.render,
|
||||||
|
}, true);
|
||||||
|
|
||||||
//const resources = ecs.Resources{
|
try platform.init(allocator, &pool);
|
||||||
// .window = w,
|
|
||||||
// .renderer = r,
|
|
||||||
// .input = .{ .key_pressed = .{false} ** @intFromEnum(Input.KeyCode.menu) },
|
|
||||||
//};
|
|
||||||
|
|
||||||
//var pool = try ecs.Pool.init(allocator, resources);
|
|
||||||
//defer pool.deinit();
|
|
||||||
//w.setResources(&pool.resources);
|
|
||||||
//try pool.addSystemGroup(&[_]ecs.System{
|
|
||||||
// Renderer.render,
|
|
||||||
//}, true);
|
|
||||||
//try pool.addSystemGroup(&[_]ecs.System{
|
|
||||||
// testSystem2,
|
|
||||||
//});
|
|
||||||
|
|
||||||
// for (0..1000) |_| {
|
|
||||||
// const entity = try pool.createEntity();
|
|
||||||
// try pool.addComponent(entity, ecs.components.Position{ .x = 1.0, .y = 0.5, .z = 3.0 });
|
|
||||||
// try pool.addComponent(entity, ecs.components.Speed{ .speed = 5.0 });
|
|
||||||
// }
|
|
||||||
|
|
||||||
try platform.init(allocator);
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -74,9 +74,8 @@ pub fn deinit(self: Renderer) void {
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: render is maybe a bad name? something like present() or submit() is better?
|
// TODO: render is maybe a bad name? something like present() or submit() is better?
|
||||||
//pub fn render(pool: *ecs.Pool) anyerror!void {
|
pub fn render(pool: *ecs.Pool) anyerror!void {
|
||||||
pub fn render(renderer: *Renderer) anyerror!void {
|
var renderer = pool.resources.renderer;
|
||||||
//var renderer = pool.resources.renderer;
|
|
||||||
|
|
||||||
try renderer.device.waitFence(renderer.current_frame);
|
try renderer.device.waitFence(renderer.current_frame);
|
||||||
const image = try renderer.swapchain.nextImage(renderer.device, renderer.current_frame);
|
const image = try renderer.swapchain.nextImage(renderer.device, renderer.current_frame);
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
const c = @import("sideros").c;
|
const c = @import("sideros").c;
|
||||||
const std = @import("std");
|
const std = @import("std");
|
||||||
const Renderer = @import("sideros").Renderer;
|
const Renderer = @import("sideros").Renderer;
|
||||||
|
const ecs = @import("sideros").ecs;
|
||||||
|
|
||||||
var resize = false;
|
var resize = false;
|
||||||
var quit = false;
|
var quit = false;
|
||||||
|
|
@ -11,7 +12,7 @@ const State = struct {
|
||||||
compositor: ?*c.wl_compositor = null,
|
compositor: ?*c.wl_compositor = null,
|
||||||
shell: ?*c.xdg_wm_base = null,
|
shell: ?*c.xdg_wm_base = null,
|
||||||
surface: ?*c.wl_surface = null,
|
surface: ?*c.wl_surface = null,
|
||||||
renderer: *Renderer = undefined,
|
pool: *ecs.Pool = undefined,
|
||||||
configured: bool = false,
|
configured: bool = false,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -77,7 +78,7 @@ fn frameHandleDone(data: ?*anyopaque, callback: ?*c.wl_callback, time: u32) call
|
||||||
const cb = c.wl_surface_frame(state.surface);
|
const cb = c.wl_surface_frame(state.surface);
|
||||||
_ = c.wl_callback_add_listener(cb, &frame_listener, state);
|
_ = c.wl_callback_add_listener(cb, &frame_listener, state);
|
||||||
|
|
||||||
state.renderer.render() catch @panic("can't render");
|
state.pool.tick();
|
||||||
_ = c.wl_surface_commit(state.surface);
|
_ = c.wl_surface_commit(state.surface);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -104,7 +105,7 @@ const registry_listener: c.wl_registry_listener = .{
|
||||||
.global_remove = registryHandleGlobalRemove,
|
.global_remove = registryHandleGlobalRemove,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub fn init(allocator: std.mem.Allocator) !void {
|
pub fn init(allocator: std.mem.Allocator, pool: *ecs.Pool) !void {
|
||||||
var state: State = .{};
|
var state: State = .{};
|
||||||
const display = c.wl_display_connect(null);
|
const display = c.wl_display_connect(null);
|
||||||
defer c.wl_display_disconnect(display);
|
defer c.wl_display_disconnect(display);
|
||||||
|
|
@ -138,9 +139,10 @@ pub fn init(allocator: std.mem.Allocator) !void {
|
||||||
|
|
||||||
var renderer = try Renderer.init(@TypeOf(display), @TypeOf(surface), allocator, display, surface);
|
var renderer = try Renderer.init(@TypeOf(display), @TypeOf(surface), allocator, display, surface);
|
||||||
defer renderer.deinit();
|
defer renderer.deinit();
|
||||||
try renderer.render();
|
|
||||||
|
|
||||||
state.renderer = &renderer;
|
pool.resources.renderer = renderer;
|
||||||
|
state.pool = pool;
|
||||||
|
pool.tick();
|
||||||
|
|
||||||
const cb = c.wl_surface_frame(surface);
|
const cb = c.wl_surface_frame(surface);
|
||||||
_ = c.wl_callback_add_listener(cb, &frame_listener, @ptrCast(&state));
|
_ = c.wl_callback_add_listener(cb, &frame_listener, @ptrCast(&state));
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,9 @@
|
||||||
const std = @import("std");
|
const std = @import("std");
|
||||||
const Renderer = @import("sideros").Renderer;
|
const Renderer = @import("sideros").Renderer;
|
||||||
const c = @import("sideros").c;
|
const c = @import("sideros").c;
|
||||||
|
const ecs = @import("sideros").ecs;
|
||||||
|
|
||||||
pub fn init(allocator: std.mem.Allocator) !void {
|
pub fn init(allocator: std.mem.Allocator, pool: *ecs.Pool) !void {
|
||||||
const connection = c.xcb_connect(null, null);
|
const connection = c.xcb_connect(null, null);
|
||||||
defer c.xcb_disconnect(connection);
|
defer c.xcb_disconnect(connection);
|
||||||
|
|
||||||
|
|
@ -28,6 +29,8 @@ pub fn init(allocator: std.mem.Allocator) !void {
|
||||||
var renderer = try Renderer.init(@TypeOf(connection), @TypeOf(window), allocator, connection, window);
|
var renderer = try Renderer.init(@TypeOf(connection), @TypeOf(window), allocator, connection, window);
|
||||||
defer renderer.deinit();
|
defer renderer.deinit();
|
||||||
|
|
||||||
|
pool.resources.renderer = renderer;
|
||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
if (c.xcb_poll_for_event(connection)) |e| {
|
if (c.xcb_poll_for_event(connection)) |e| {
|
||||||
switch (e.*.response_type & ~@as(u32, 0x80)) {
|
switch (e.*.response_type & ~@as(u32, 0x80)) {
|
||||||
|
|
@ -36,6 +39,6 @@ pub fn init(allocator: std.mem.Allocator) !void {
|
||||||
std.c.free(e);
|
std.c.free(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
try renderer.render();
|
pool.tick();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue