feat(render3d): Vulkan in a macOS window through MoltenVK; window built-ins take a slice's elements; the NEAR_FADE SPIR-V
- a CAMetalLayer on the view (cocoa.ll win_metal_layer), VK_EXT_metal_surface, QuartzCore linked with Vk.*; the drawable measured after the layer sets the backing scale - vk_mac.ll opens MoltenVK directly after any loader: a bundle ships only libMoltenVK.dylib - a covered window is not presented to (win_visible); one frame in flight on macOS (R3D_VK_INFLIGHT), with images, buffers and descriptor pools held until it is done - win_held / win_mouse / win_pad / win_touch / win_text / win_present pass slice elements (arg_buf): every windowed program died on its first input poll - variants.list and SPIR-V for the three NEAR_FADE foliage programs Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
9862ec82e3
commit
38d4ea72b1
25 changed files with 627 additions and 164 deletions
|
|
@ -49,9 +49,10 @@ function gpu_select(render3d_st: mut Render3dState) -> int {
|
|||
if render3d_st.gpu_wanted == 0 { render3d_st.gpu_wanted = GPU_GL }
|
||||
render3d_st.gpu_kind = GPU_GL
|
||||
if render3d_st.gpu_wanted == GPU_VK {
|
||||
# a window needs a surface, and only the Win32 one is built
|
||||
# a window needs a surface: Win32 on Windows, a CAMetalLayer through MoltenVK on macOS
|
||||
render3d_st.gvk_want_surface = is_windowed()
|
||||
if is_windowed() and Os.platform() != "windows" { render3d_st.gpu_fallback_reason = "the Vulkan window is built for Windows only" }
|
||||
let os = Os.platform()
|
||||
if is_windowed() and os != "windows" and os != "macos" { render3d_st.gpu_fallback_reason = `no Vulkan window is built for {os}` }
|
||||
else if not gvk_init(render3d_st) { render3d_st.gpu_fallback_reason = render3d_st.gvk_why }
|
||||
else if not gvk_manifest(render3d_st) { render3d_st.gpu_fallback_reason = "the renderer's SPIR-V manifest is missing" }
|
||||
else { render3d_st.gpu_kind = GPU_VK }
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue