Commit graph

238 commits

Author SHA1 Message Date
Emi
b14f8e69ee build: add @import("mach").addExecutable helper
This adds a helper that can be used people's `build.zig` code, called `@import("mach").addExecutable`,
a direct replacement for `b.addExecutable`.

The benefits of using this method are:

1. Your `build.zig` code does not need to be aware of platform-specifics that may be required to build an executable,
   for example setting a Windows manifest to ensure your app is DPI-aware.
2. You do not need to write `main.zig` entrypoint code, which although simple today is expected to become more complex
   over time as we add support for more platforms. For example, WASM and other platforms require different entrypoints
   and this can account for that without your `build.zig` containing that logic.

Steps to use:

1. Delete your `main.zig` file.
2. Define your `Modules` as a public const in your `App.zig` file, e.g.:

```zig
// The set of Mach modules our application may use.
pub const Modules = mach.Modules(.{
    mach.Core,
    App,
});
```

3. Update your `build.zig` code to use `@import("mach").addExecutable` like so:

```zig
const std = @import("std");

pub fn build(b: *std.Build) void {
    const target = b.standardTargetOptions(.{});
    const optimize = b.standardOptimizeOption(.{});

    const app_mod = b.createModule(.{
        .root_source_file = b.path("src/App.zig"),
        .optimize = optimize,
        .target = target,
    });

    // Add Mach to our library and executable
    const mach_dep = b.dependency("mach", .{
        .target = target,
        .optimize = optimize,
    });
    app_mod.addImport("mach", mach_dep.module("mach"));

    // Use the Mach entrypoint to write main for us
    const exe = @import("mach").addExecutable(mach_dep.builder, .{
        .name = "hello-world",
        .app = app_mod,
        .target = target,
        .optimize = optimize,
    });
    b.installArtifact(exe);

    const run_cmd = b.addRunArtifact(exe);
    run_cmd.step.dependOn(b.getInstallStep());
    if (b.args) |args| {
        run_cmd.addArgs(args);
    }
    const run_step = b.step("run", "Run the app");
    run_step.dependOn(&run_cmd.step);

    const app_unit_tests = b.addTest(.{
        .root_module = app_mod,
    });
    const run_app_unit_tests = b.addRunArtifact(app_unit_tests);
    const test_step = b.step("test", "Run unit tests");
    test_step.dependOn(&run_app_unit_tests.step);
}
```

Signed-off-by: Emi <emi@hexops.com>
2025-02-17 20:57:14 -07:00
Joshua Holmes
caf297512c core: remove option to support non-blocking and only allow platform to control main loop 2025-01-12 09:05:09 -07:00
Stephen Gutekanst
6450e8abbf Audio: rewrite sample mixing to use SIMD properly
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-12-29 15:15:56 -07:00
Stephen Gutekanst
d848d2e26e examples: add comment to piano example
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-12-29 13:48:18 -07:00
Stephen Gutekanst
d62650276f examples: update hardware-check example to use new object system
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-12-27 17:39:30 -07:00
Stephen Gutekanst
e5f48580ba gfx: minor Sprite module cleanup/improvements
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-12-27 16:38:42 -07:00
Stephen Gutekanst
eda3e68b6e examples: text example updated to new object system
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-12-27 16:36:53 -07:00
Stephen Gutekanst
fda85f8268 examples: update glyphs example to use new object system
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-12-26 12:35:53 -07:00
Stephen Gutekanst
2529515cd8 examples: sprite example working with object system
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-12-26 11:52:32 -07:00
Stephen Gutekanst
df3091bfd5 examples: custom-renderer working
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-12-24 20:30:32 -07:00
Stephen Gutekanst
94f0648be5 examples: piano example working again
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-12-24 18:05:14 -07:00
Stephen Gutekanst
30bba9d49e examples: play-opus: minor fixes
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-12-24 16:15:36 -07:00
foxnne
c70b1817ee core: window.color -> window.transparent, window.decorated, window.decoration_color 2024-12-24 15:40:16 -07:00
foxnne
a10cbc3419 build: update mach-objc build.zig.zon, and small corrections to core-transparent-window example 2024-12-08 14:41:09 -07:00
foxnne
0a78c4cc08 darwin: first pass at trying to enable vsync 2024-12-08 10:22:42 -07:00
foxnne
6ef58d8c1f example: core-transparent-window now animates the window color and transparency 2024-12-08 10:22:42 -07:00
foxnne
19040cae25 darwin: temporarily set window background to be transparent. examples: Add core-transparent-window and remove input from core-triangle 2024-12-08 10:22:42 -07:00
foxnne
ad5700cf48 core: Remove main_window in favor of users creating their own windows. Added event window_open which is called when the platform has finished initializing the window 2024-12-01 18:32:15 -07:00
Stephen Gutekanst
b844fa7d1c examples: play-opus: make audio low-latency more obvious
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-12-01 13:55:30 -07:00
Stephen Gutekanst
314abeb988 audio: update Audio module to new object system
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-12-01 13:55:30 -07:00
Stephen Gutekanst
281884e9b0 examples: core-triangle: cleanup width/height input handler
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-12-01 13:55:30 -07:00
foxnne
06aec428de core: windows: Get triangle showing, still freezing on run. Comment out more windows, set value of window back on presentFrame. 2024-12-01 12:19:50 -07:00
Colton Franklin
1fe47b2b19
obj: Move Platform and InitOptions fields into core.windows (#1309)
* obj: Make field tracking use a single bitset

* obj: module: fix comment

* obj: Move `Platform` state and `InitOptions` fields into `core.windows`, initial push, only triangle example working on macos currently

* obj: `get` and `getValue` (renamed `getAll`) now do not return optionals, comment revisions, `device` is no longer optional, `native` is optional

* core: Lots of cleanup of unnecessary comments

* core: `Event`s now all contain `window_id`, darwin/windows: event functions now send window id

* core: comments, examples: fix `core-custom-entrypoint`
2024-11-30 15:13:14 -07:00
foxnne
319f2d8fb8 triangle: Remove input keys to change window size, this was just a test 2024-11-27 18:30:53 -07:00
foxnne
f58cb270b1 obj: Fix doc comment and update example to build 2024-11-27 18:30:53 -07:00
foxnne
0476999dc4 core: Allow tracking of individual struct fields for changes 2024-11-27 18:30:53 -07:00
Stephen Gutekanst
714f200bc1 module: implement cross-Object-pool graph relations
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-11-23 21:20:04 -07:00
Stephen Gutekanst
9d134dc72d module: object recycling
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-11-23 21:20:04 -07:00
Stephen Gutekanst
8054d03b4d unify mach.Call and mach.Runner into one type
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-11-23 21:20:04 -07:00
Stephen Gutekanst
14ccd5a93c settle module state initialization
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-11-23 21:20:04 -07:00
Stephen Gutekanst
0e12857154 examples/core: building without ECS
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-11-23 21:20:04 -07:00
Stephen Gutekanst
2a13c07d9e module: remove the ability to send "standard" arguments to systems
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-11-23 21:20:04 -07:00
Ronald M Zielaznicki
910e8f6e82 build: examples run independently & sysaudio examples renamed as tests 2024-10-29 21:55:40 -07:00
Stephen Gutekanst
26c5cb5d60 update to Zig 2024.10-mach (helps hexops/mach#1276)
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-10-08 11:42:23 -07:00
Stephen Gutekanst
09d39fb694 core: simplify event iterator
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-08-25 16:51:16 -07:00
Stephen Gutekanst
8b8489b3e2 examples: custom-entrypoint: demonstrate freeing stack space
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-08-25 16:40:58 -07:00
Stephen Gutekanst
133c89638b all: move mach.Timer, core Timer/Frequency to mach.time module
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-08-25 14:24:09 -07:00
Hordur Johannsson
13e53e7176 Fixing core to work with win32 #1257 2024-08-25 09:59:08 -07:00
Stephen Gutekanst
642cc9b7f7 make it clear how to use module system without mach.Core (remove mach.App)
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-08-24 22:33:15 -07:00
Stephen Gutekanst
80be6b7bca examples: revert to 0.4 entrypoint / control API design
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-08-24 22:33:15 -07:00
Stephen Gutekanst
bfa3b069f7 revert bad entrypoint API design changes
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-08-23 23:03:54 -07:00
Hordur Johannsson
42d2a57611
Changing resource category for textures in d3d12 issue #1225 (#1226) 2024-08-07 21:58:59 -07:00
Ali Cheraghi
0023ab14fb {vulkan,examples}: fix descriptor set bug 2024-07-13 09:06:35 -07:00
Ali Cheraghi
266e7a548b core: refactor 2024-07-13 09:06:35 -07:00
Stephen Gutekanst
98801a258e remove Dawn / WebGPU support in favor of sysgpu
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-07-07 22:08:16 -07:00
Stephen Gutekanst
4ac8de4692 examples: move core examples into core/ folder; add triangle example
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-06-02 10:15:01 -07:00
Stephen Gutekanst
205a1f33db Core: support configuring window before it opens
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-05-14 00:12:26 +02:00
Stephen Gutekanst
122a1ea9a7 {gfx,examples}: simplify text rendering API a bit
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-05-14 00:12:26 +02:00
Stephen Gutekanst
92086d8d66 examples: add hardware-check
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-05-12 16:27:52 +02:00
Stephen Gutekanst
3c778816d9 examples: improve play-opus code quality a bit
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-05-12 16:23:38 +02:00