mach: Create binding methods for all glfw methods in use and update
examples
This commit is contained in:
parent
9106a9839d
commit
8b46f46cf8
11 changed files with 62 additions and 24 deletions
|
|
@ -23,7 +23,7 @@ cube: Cube,
|
||||||
camera: Camera,
|
camera: Camera,
|
||||||
light: Light,
|
light: Light,
|
||||||
depth: Texture,
|
depth: Texture,
|
||||||
depth_size: glfw.Window.Size,
|
depth_size: mach.Size,
|
||||||
keys: u8 = 0,
|
keys: u8 = 0,
|
||||||
|
|
||||||
const Dir = struct {
|
const Dir = struct {
|
||||||
|
|
@ -48,12 +48,12 @@ pub fn init(app: *App, engine: *mach.Engine) !void {
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
// }.callback);
|
// }.callback);
|
||||||
try engine.core.internal.window.setSizeLimits(.{ .width = 20, .height = 20 }, .{ .width = null, .height = null });
|
try engine.core.setSizeLimits(.{ .width = 20, .height = 20 }, .{ .width = null, .height = null });
|
||||||
|
|
||||||
const eye = vec3(5.0, 7.0, 5.0);
|
const eye = vec3(5.0, 7.0, 5.0);
|
||||||
const target = vec3(0.0, 0.0, 0.0);
|
const target = vec3(0.0, 0.0, 0.0);
|
||||||
|
|
||||||
const size = try engine.core.internal.window.getFramebufferSize();
|
const size = try engine.core.getFramebufferSize();
|
||||||
const aspect_ratio = @intToFloat(f32, size.width) / @intToFloat(f32, size.height);
|
const aspect_ratio = @intToFloat(f32, size.width) / @intToFloat(f32, size.height);
|
||||||
|
|
||||||
app.queue = engine.gpu_driver.device.getQueue();
|
app.queue = engine.gpu_driver.device.getQueue();
|
||||||
|
|
@ -68,7 +68,7 @@ pub fn deinit(_: *App, _: *mach.Engine) void {}
|
||||||
|
|
||||||
pub fn update(app: *App, engine: *mach.Engine) !bool {
|
pub fn update(app: *App, engine: *mach.Engine) !bool {
|
||||||
// If window is resized, recreate depth buffer otherwise we cannot use it.
|
// If window is resized, recreate depth buffer otherwise we cannot use it.
|
||||||
const size = engine.core.internal.window.getFramebufferSize() catch unreachable; // TODO: return type inference can't handle this
|
const size = engine.core.getFramebufferSize() catch unreachable; // TODO: return type inference can't handle this
|
||||||
if (size.width != app.depth_size.width or size.height != app.depth_size.height) {
|
if (size.width != app.depth_size.width or size.height != app.depth_size.height) {
|
||||||
app.depth = Texture.depth(engine.gpu_driver.device, size.width, size.height);
|
app.depth = Texture.depth(engine.gpu_driver.device, size.width, size.height);
|
||||||
app.depth_size = size;
|
app.depth_size = size;
|
||||||
|
|
@ -874,7 +874,7 @@ const Instance = struct {
|
||||||
fn keyCallback(app: *App, engine: *mach.Engine, key: mach.Key, action: mach.Action) void {
|
fn keyCallback(app: *App, engine: *mach.Engine, key: mach.Key, action: mach.Action) void {
|
||||||
if (action == .press) {
|
if (action == .press) {
|
||||||
switch (key) {
|
switch (key) {
|
||||||
.q, .escape, .space => engine.core.internal.window.setShouldClose(true),
|
.q, .escape, .space => engine.core.setShouldClose(true),
|
||||||
.w, .up => {
|
.w, .up => {
|
||||||
app.keys |= Dir.up;
|
app.keys |= Dir.up;
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -44,13 +44,13 @@ pub fn init(app: *App, engine: *mach.Engine) !void {
|
||||||
fn callback(_: *App, eng: *mach.Engine, key: mach.Key, action: mach.Action) void {
|
fn callback(_: *App, eng: *mach.Engine, key: mach.Key, action: mach.Action) void {
|
||||||
if (action == .press) {
|
if (action == .press) {
|
||||||
switch (key) {
|
switch (key) {
|
||||||
.space => eng.core.internal.window.setShouldClose(true),
|
.space => eng.core.setShouldClose(true),
|
||||||
else => {},
|
else => {},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}.callback);
|
}.callback);
|
||||||
try engine.core.internal.window.setSizeLimits(.{ .width = 20, .height = 20 }, .{ .width = null, .height = null });
|
try engine.core.setSizeLimits(.{ .width = 20, .height = 20 }, .{ .width = null, .height = null });
|
||||||
|
|
||||||
const vs_module = engine.gpu_driver.device.createShaderModule(&.{
|
const vs_module = engine.gpu_driver.device.createShaderModule(&.{
|
||||||
.label = "my vertex shader",
|
.label = "my vertex shader",
|
||||||
|
|
|
||||||
|
|
@ -50,19 +50,17 @@ frag_uniform_buffer: gpu.Buffer,
|
||||||
bind_group: gpu.BindGroup,
|
bind_group: gpu.BindGroup,
|
||||||
|
|
||||||
pub fn init(app: *App, engine: *mach.Engine) !void {
|
pub fn init(app: *App, engine: *mach.Engine) !void {
|
||||||
engine.core.internal.window.setKeyCallback(struct {
|
engine.core.setKeyCallback(struct {
|
||||||
fn callback(window: glfw.Window, key: glfw.Key, scancode: i32, action: glfw.Action, mods: glfw.Mods) void {
|
fn callback(_: *App, eng: *mach.Engine, key: mach.Key, action: mach.Action) void {
|
||||||
_ = scancode;
|
|
||||||
_ = mods;
|
|
||||||
if (action == .press) {
|
if (action == .press) {
|
||||||
switch (key) {
|
switch (key) {
|
||||||
.space => window.setShouldClose(true),
|
.space => eng.core.setShouldClose(true),
|
||||||
else => {},
|
else => {},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}.callback);
|
}.callback);
|
||||||
try engine.core.internal.window.setSizeLimits(.{ .width = 20, .height = 20 }, .{ .width = null, .height = null });
|
try engine.core.setSizeLimits(.{ .width = 20, .height = 20 }, .{ .width = null, .height = null });
|
||||||
|
|
||||||
const vs_module = engine.gpu_driver.device.createShaderModule(&.{
|
const vs_module = engine.gpu_driver.device.createShaderModule(&.{
|
||||||
.label = "my vertex shader",
|
.label = "my vertex shader",
|
||||||
|
|
|
||||||
|
|
@ -27,13 +27,13 @@ pub fn init(app: *App, engine: *mach.Engine) !void {
|
||||||
fn callback(_: *App, eng: *mach.Engine, key: mach.Key, action: mach.Action) void {
|
fn callback(_: *App, eng: *mach.Engine, key: mach.Key, action: mach.Action) void {
|
||||||
if (action == .press) {
|
if (action == .press) {
|
||||||
switch (key) {
|
switch (key) {
|
||||||
.space => eng.core.internal.window.setShouldClose(true),
|
.space => eng.core.setShouldClose(true),
|
||||||
else => {},
|
else => {},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}.callback);
|
}.callback);
|
||||||
try engine.core.internal.window.setSizeLimits(.{ .width = 20, .height = 20 }, .{ .width = null, .height = null });
|
try engine.core.setSizeLimits(.{ .width = 20, .height = 20 }, .{ .width = null, .height = null });
|
||||||
|
|
||||||
const vs_module = engine.gpu_driver.device.createShaderModule(&.{
|
const vs_module = engine.gpu_driver.device.createShaderModule(&.{
|
||||||
.label = "my vertex shader",
|
.label = "my vertex shader",
|
||||||
|
|
|
||||||
|
|
@ -28,13 +28,13 @@ pub fn init(app: *App, engine: *mach.Engine) !void {
|
||||||
fn callback(_: *App, eng: *mach.Engine, key: mach.Key, action: mach.Action) void {
|
fn callback(_: *App, eng: *mach.Engine, key: mach.Key, action: mach.Action) void {
|
||||||
if (action == .press) {
|
if (action == .press) {
|
||||||
switch (key) {
|
switch (key) {
|
||||||
.space => eng.core.internal.window.setShouldClose(true),
|
.space => eng.core.setShouldClose(true),
|
||||||
else => {},
|
else => {},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}.callback);
|
}.callback);
|
||||||
try engine.core.internal.window.setSizeLimits(.{ .width = 20, .height = 20 }, .{ .width = null, .height = null });
|
try engine.core.setSizeLimits(.{ .width = 20, .height = 20 }, .{ .width = null, .height = null });
|
||||||
|
|
||||||
const vs_module = engine.gpu_driver.device.createShaderModule(&.{
|
const vs_module = engine.gpu_driver.device.createShaderModule(&.{
|
||||||
.label = "my vertex shader",
|
.label = "my vertex shader",
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@ vertex_buffer: gpu.Buffer,
|
||||||
uniform_buffer: gpu.Buffer,
|
uniform_buffer: gpu.Buffer,
|
||||||
bind_group: gpu.BindGroup,
|
bind_group: gpu.BindGroup,
|
||||||
depth_texture: gpu.Texture,
|
depth_texture: gpu.Texture,
|
||||||
depth_size: glfw.Window.Size,
|
depth_size: mach.Size,
|
||||||
|
|
||||||
const App = @This();
|
const App = @This();
|
||||||
|
|
||||||
|
|
@ -30,13 +30,13 @@ pub fn init(app: *App, engine: *mach.Engine) !void {
|
||||||
fn callback(_: *App, eng: *mach.Engine, key: mach.Key, action: mach.Action) void {
|
fn callback(_: *App, eng: *mach.Engine, key: mach.Key, action: mach.Action) void {
|
||||||
if (action == .press) {
|
if (action == .press) {
|
||||||
switch (key) {
|
switch (key) {
|
||||||
.space => eng.core.internal.window.setShouldClose(true),
|
.space => eng.core.setShouldClose(true),
|
||||||
else => {},
|
else => {},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}.callback);
|
}.callback);
|
||||||
try engine.core.internal.window.setSizeLimits(.{ .width = 20, .height = 20 }, .{ .width = null, .height = null });
|
try engine.core.setSizeLimits(.{ .width = 20, .height = 20 }, .{ .width = null, .height = null });
|
||||||
|
|
||||||
const vs_module = engine.gpu_driver.device.createShaderModule(&.{
|
const vs_module = engine.gpu_driver.device.createShaderModule(&.{
|
||||||
.label = "my vertex shader",
|
.label = "my vertex shader",
|
||||||
|
|
@ -165,7 +165,7 @@ pub fn init(app: *App, engine: *mach.Engine) !void {
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
const size = try engine.core.internal.window.getFramebufferSize();
|
const size = try engine.core.getFramebufferSize();
|
||||||
const depth_texture = engine.gpu_driver.device.createTexture(&gpu.Texture.Descriptor{
|
const depth_texture = engine.gpu_driver.device.createTexture(&gpu.Texture.Descriptor{
|
||||||
.size = gpu.Extent3D{
|
.size = gpu.Extent3D{
|
||||||
.width = size.width,
|
.width = size.width,
|
||||||
|
|
@ -198,7 +198,7 @@ pub fn deinit(app: *App, _: *mach.Engine) void {
|
||||||
|
|
||||||
pub fn update(app: *App, engine: *mach.Engine) !bool {
|
pub fn update(app: *App, engine: *mach.Engine) !bool {
|
||||||
// If window is resized, recreate depth buffer otherwise we cannot use it.
|
// If window is resized, recreate depth buffer otherwise we cannot use it.
|
||||||
const size = engine.core.internal.window.getFramebufferSize() catch unreachable; // TODO: return type inference can't handle this
|
const size = engine.core.getFramebufferSize() catch unreachable; // TODO: return type inference can't handle this
|
||||||
if (size.width != app.depth_size.width or size.height != app.depth_size.height) {
|
if (size.width != app.depth_size.width or size.height != app.depth_size.height) {
|
||||||
app.depth_texture = engine.gpu_driver.device.createTexture(&gpu.Texture.Descriptor{
|
app.depth_texture = engine.gpu_driver.device.createTexture(&gpu.Texture.Descriptor{
|
||||||
.size = gpu.Extent3D{
|
.size = gpu.Extent3D{
|
||||||
|
|
|
||||||
|
|
@ -28,13 +28,13 @@ pub fn init(app: *App, engine: *mach.Engine) !void {
|
||||||
fn callback(_: *App, eng: *mach.Engine, key: mach.Key, action: mach.Action) void {
|
fn callback(_: *App, eng: *mach.Engine, key: mach.Key, action: mach.Action) void {
|
||||||
if (action == .press) {
|
if (action == .press) {
|
||||||
switch (key) {
|
switch (key) {
|
||||||
.space => eng.core.internal.window.setShouldClose(true),
|
.space => eng.core.setShouldClose(true),
|
||||||
else => {},
|
else => {},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}.callback);
|
}.callback);
|
||||||
try engine.core.internal.window.setSizeLimits(.{ .width = 20, .height = 20 }, .{ .width = null, .height = null });
|
try engine.core.setSizeLimits(.{ .width = 20, .height = 20 }, .{ .width = null, .height = null });
|
||||||
|
|
||||||
const vs_module = engine.gpu_driver.device.createShaderModule(&.{
|
const vs_module = engine.gpu_driver.device.createShaderModule(&.{
|
||||||
.label = "my vertex shader",
|
.label = "my vertex shader",
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ const Allocator = std.mem.Allocator;
|
||||||
const glfw = @import("glfw");
|
const glfw = @import("glfw");
|
||||||
const gpu = @import("gpu");
|
const gpu = @import("gpu");
|
||||||
const App = @import("app");
|
const App = @import("app");
|
||||||
|
const structs = @import("structs.zig");
|
||||||
const enums = @import("enums.zig");
|
const enums = @import("enums.zig");
|
||||||
|
|
||||||
pub const VSyncMode = enum {
|
pub const VSyncMode = enum {
|
||||||
|
|
@ -71,6 +72,18 @@ timer: std.time.Timer,
|
||||||
pub const Core = struct {
|
pub const Core = struct {
|
||||||
internal: GetCoreInternalType(),
|
internal: GetCoreInternalType(),
|
||||||
|
|
||||||
|
pub fn setShouldClose(core: *Core, value: bool) void {
|
||||||
|
core.internal.setShouldClose(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn getFramebufferSize(core: *Core) !structs.Size {
|
||||||
|
return core.internal.getFramebufferSize();
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn setSizeLimits(core: *Core, min: structs.SizeOptional, max: structs.SizeOptional) !void {
|
||||||
|
return core.internal.setSizeLimits(min, max);
|
||||||
|
}
|
||||||
|
|
||||||
pub fn setKeyCallback(core: *Core, comptime cb: fn (app: *App, engine: *Engine, key: enums.Key, action: enums.Action) void) void {
|
pub fn setKeyCallback(core: *Core, comptime cb: fn (app: *App, engine: *Engine, key: enums.Key, action: enums.Action) void) void {
|
||||||
core.internal.setKeyCallback(cb);
|
core.internal.setKeyCallback(cb);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,2 +1,3 @@
|
||||||
|
pub usingnamespace @import("structs.zig");
|
||||||
pub usingnamespace @import("enums.zig");
|
pub usingnamespace @import("enums.zig");
|
||||||
pub const Engine = @import("Engine.zig");
|
pub const Engine = @import("Engine.zig");
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ const glfw = @import("glfw");
|
||||||
const gpu = @import("gpu");
|
const gpu = @import("gpu");
|
||||||
const App = @import("app");
|
const App = @import("app");
|
||||||
const Engine = @import("Engine.zig");
|
const Engine = @import("Engine.zig");
|
||||||
|
const structs = @import("structs.zig");
|
||||||
const enums = @import("enums.zig");
|
const enums = @import("enums.zig");
|
||||||
const util = @import("util.zig");
|
const util = @import("util.zig");
|
||||||
const c = @import("c.zig").c;
|
const c = @import("c.zig").c;
|
||||||
|
|
@ -50,6 +51,22 @@ pub const CoreGlfw = struct {
|
||||||
self.window.setUserPointer(&self.user_ptr);
|
self.window.setUserPointer(&self.user_ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn setShouldClose(self: *CoreGlfw, value: bool) void {
|
||||||
|
self.window.setShouldClose(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn getFramebufferSize(self: *CoreGlfw) !structs.Size {
|
||||||
|
const size = try self.window.getFramebufferSize();
|
||||||
|
return @bitCast(structs.Size, size);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn setSizeLimits(self: *CoreGlfw, min: structs.SizeOptional, max: structs.SizeOptional) !void {
|
||||||
|
try self.window.setSizeLimits(
|
||||||
|
@bitCast(glfw.Window.SizeOptional, min),
|
||||||
|
@bitCast(glfw.Window.SizeOptional, max),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
pub fn setKeyCallback(self: *CoreGlfw, comptime cb: fn (app: *App, engine: *Engine, key: enums.Key, action: enums.Action) void) void {
|
pub fn setKeyCallback(self: *CoreGlfw, comptime cb: fn (app: *App, engine: *Engine, key: enums.Key, action: enums.Action) void) void {
|
||||||
const callback = struct {
|
const callback = struct {
|
||||||
fn callback(window: glfw.Window, key: glfw.Key, scancode: i32, action: glfw.Action, mods: glfw.Mods) void {
|
fn callback(window: glfw.Window, key: glfw.Key, scancode: i32, action: glfw.Action, mods: glfw.Mods) void {
|
||||||
|
|
|
||||||
9
src/structs.zig
Normal file
9
src/structs.zig
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
pub const Size = struct {
|
||||||
|
width: u32,
|
||||||
|
height: u32,
|
||||||
|
};
|
||||||
|
|
||||||
|
pub const SizeOptional = struct {
|
||||||
|
width: ?u32,
|
||||||
|
height: ?u32,
|
||||||
|
};
|
||||||
Loading…
Add table
Add a link
Reference in a new issue