Commit graph

3677 commits

Author SHA1 Message Date
Stephen Gutekanst
a065c79200 examples: glyphs: do not use event arguments
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-05-06 14:00:54 -07:00
Stephen Gutekanst
7ad38d6eff Audio: do not use event arguments
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-05-06 14:00:54 -07:00
Ali Chraghi
e711f69fad Audio: duplicate mono sounds to all channels 2024-05-06 14:00:36 -07:00
Stephen Gutekanst
9d95fcf0c2 Audio: always target 48000hz f32 audio
Resampling, which requires fairly involved (and certainly not free) filters,
is needed if the audio we are mixing does not match the sample rate of the
output device. Most OS audio APIs support resampling on their own, but have
preferred hardware formats. Most console hardware since Xbox/PS2/GC supposedly
prefers 48khz natively, but otherwise there seems to be no big preference
between 48khz or 44.1khz.

The important aspect is that we pick one, and encourage people to keep their
audio in one, so that runtime resampling is not required (both in mach itself,
and potentially without-our-knowledge in the OS audio system if we chose a
sample rate which the native hardware does not prefer.)

General guidance will be:

* `mach.Audio` module will always aim to select 48khz, f32 audio output from the
  OS APIs. Let the OS APIs do resampling, or if they do not then we can do so.
* We will prefer 48khz, f32 audio samples everywhere internally in our basic audio
  mixing etc. APIs.
* Tooling will aim to convert audio to Opus (or flac for lossless) format, with 48khz
  and number of channels depending on audio type (e.g. 1ch for most sfx, any number of
  channels for bgm, and maybe some exception for multi-channel sfx in the future.)

Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-05-05 12:56:21 -07:00
Ali Chraghi
5bd6d0cf3d add play-opus example 2024-05-05 21:10:07 +03:30
Stephen Gutekanst
cbf066ade5 {gfx,examples}: improve sysgpu compatibility with higher-level examples
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-04-29 20:17:26 -07:00
Stephen Gutekanst
15fd2c3a64 Core: use an explicit .start event sent by app to begin .tick events
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-04-29 20:17:26 -07:00
Stephen Gutekanst
8089d3356e sysgpu: implement texture getWidth/getHeight
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-04-29 20:17:26 -07:00
Stephen Gutekanst
44f950a7f3 core: provide a default sysgpu interface implementation
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-04-29 20:17:26 -07:00
Stephen Gutekanst
fc0ff2fffd all: rename local_events -> events
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-04-29 20:17:26 -07:00
Stephen Gutekanst
33bfdee520 {module,Audio}: ability to store event name and send it later
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-04-29 20:17:26 -07:00
Stephen Gutekanst
d690814b16 Core: fix potential printTitle leak
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-04-29 20:17:26 -07:00
Stephen Gutekanst
136c86e929 examples: fix/improve custom-renderer example
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-04-29 20:17:26 -07:00
Stephen Gutekanst
2c8ba82aa3 Core: use .app local init/deinit/tick events (avoid global events)
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-04-29 20:17:26 -07:00
Stephen Gutekanst
fb37f74d41 examples: rename main modules -> App
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-04-29 20:17:26 -07:00
Stephen Gutekanst
e0640cc948 TextPipeline: make .init and .deinit explicit
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-04-29 20:17:26 -07:00
Stephen Gutekanst
ed9137fe98 SpritePipeline: make .init and .deinit explicit
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-04-29 20:17:26 -07:00
Stephen Gutekanst
3504dfcab6 Audio: make deinit explicit
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-04-29 20:17:26 -07:00
Stephen Gutekanst
4a000c7995 {Core,examples}: add TODO markers for core APIs that require module exposure
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-04-29 20:17:26 -07:00
Stephen Gutekanst
03a089610b Core: store framebuffer information as components
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-04-29 20:17:26 -07:00
Stephen Gutekanst
656b0202f2 Core: add .present_frame event replacing swapbuffers call
Note that on e.g. web platform, swapbuffers is not an explicit call.
We also need a signal that the frame has been submitted and finished,
and this is it.

Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-04-29 20:17:26 -07:00
Stephen Gutekanst
431e0dbbe1 {gfx,examples}: use core.state().queue
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-04-29 20:17:26 -07:00
Stephen Gutekanst
68677b3448 {Core,examples}: set window title via component
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-04-29 20:17:26 -07:00
Stephen Gutekanst
79dccb4d73 {gfx,examples}: use core.state().device
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-04-29 20:17:26 -07:00
Stephen Gutekanst
bffc668005 {gfx,examples}: add labels to gpu objects
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-04-21 20:29:14 -07:00
Liam Swayne
2b8bfcaa3e [math] simplify algorithm finding greatest vector 2024-04-21 17:34:15 -07:00
pfg
6a09787496 sysgpu: fix overflow trying to report an error 2024-04-21 17:33:57 -07:00
Ali Chraghi
7991053b37 spirv: sqrt instruction 2024-04-21 17:33:22 -07:00
Stephen Gutekanst
487beaabde examples: rename sysaudio example -> piano
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-04-21 16:38:15 -07:00
Stephen Gutekanst
58ffa2c870 examples: sysaudio: provide better controls
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-04-21 16:34:46 -07:00
Stephen Gutekanst
c90dcb4275 build: update version
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-04-21 16:28:11 -07:00
Stephen Gutekanst
fc56f296e9 build: organize dependencies; remove currently-unused spirv deps
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-04-21 16:27:14 -07:00
Stephen Gutekanst
f078e8f3f9 build: update mach-glfw (fix linux build)
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-04-21 15:01:45 -07:00
Stephen Gutekanst
d04cd26c84 use lazyDependency to optimize freetype/font-assets dependency fetching
Helps hexops/mach#1197

Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-04-21 15:01:45 -07:00
Stephen Gutekanst
38fb23e22a build: fix core example imports
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-04-21 15:01:45 -07:00
Stephen Gutekanst
c26d9a40d1 build: use lazy dependencies
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-04-21 15:01:45 -07:00
Stephen Gutekanst
51f5721f8b build: remove currently-unused basisu dependency
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-04-21 15:01:45 -07:00
Stephen Gutekanst
e8b95d5076 build: cleanup sysjs dependency utilization
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-04-21 15:01:45 -07:00
Stephen Gutekanst
a681a10170 build: use lazyDependency to only download required dependencies
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-04-21 15:01:45 -07:00
Stephen Gutekanst
2889468c6b build: remove App (not CoreApp)
This removes the old `App` builder, leaving only `CoreApp` as something
to resolve/remove.

Helps hexops/mach#1186

Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-04-21 15:01:45 -07:00
Stephen Gutekanst
7a1efdaa69 core: cleanup sysgpu feature flag logic
* `@import("mach").core.gpu` has been renamed to `@import("mach").gpu`
* `pub const SYSGPUInterface` now has a default value (i.e. you do not need to write it in your main.zig, if you were.)
* You can now check `if (comptime mach.use_sysgpu)` for any conditional code you might have that should only run with sysgpu.

This (old):

```
pub const mach_core_options = core.ComptimeOptions{
    .use_wgpu = false,
    .use_sysgpu = true,
};
```

Has been replaced by this:

```
pub const use_sysgpu = true;
```

Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-04-19 20:48:33 -07:00
Stephen Gutekanst
6a2358baf8 build: fix WASM builds
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-04-19 19:34:40 -07:00
Stephen Gutekanst
07d9855f73 core: examples: update import path style
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-04-19 19:05:18 -07:00
Stephen Gutekanst
78edb10446 build: fix duplicate symbol machDawnGetProcTable
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-04-19 18:46:04 -07:00
Stephen Gutekanst
2bc17a33fb module: correct alignment of dispatched arguments; move stack space to caller
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-04-19 18:05:17 -07:00
Stephen Gutekanst
09c01a79b0 build: fix test build
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-04-19 17:08:36 -07:00
Stephen Gutekanst
d2179e8f2c gfx: correct some zls autofixes
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-04-18 21:04:43 -07:00
Stephen Gutekanst
87a7cd8ed8 engine: remove mach.Engine in favor of mach.Core for now
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-04-17 11:30:51 -07:00
Stephen Gutekanst
7011ad4848 audio: handle possible invalidated pointer after buffer growth
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-04-17 11:28:37 -07:00
Stephen Gutekanst
d045b34f70 {gfx,examples}: update all to new mach.Core module API
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-04-17 11:27:48 -07:00