From 584d4165ffe72f4658495e3117cd456e107c32c0 Mon Sep 17 00:00:00 2001 From: Dmitry Sergeev Date: Thu, 3 Sep 2026 13:16:19 +0300 Subject: [PATCH] partial fix for mac --- cmd/mxl-player/main.go | 22 +++++++++++++++++----- go.mod | 2 ++ go.sum | 2 -- internal/sdl/sdl.go | 15 +++++++++++++++ 4 files changed, 34 insertions(+), 7 deletions(-) diff --git a/cmd/mxl-player/main.go b/cmd/mxl-player/main.go index 42a261f..7726c2d 100644 --- a/cmd/mxl-player/main.go +++ b/cmd/mxl-player/main.go @@ -193,6 +193,7 @@ func main() { log.Fatalf("SDL_Init: %s", sdl.GetError()) return } + defer sdl.Quit() sdlAudioDevice := sdl.AudioDeviceDefaultPlayback if args.PlaybackId != 0 { @@ -209,12 +210,27 @@ func main() { return } + vulkanPath := os.Getenv("VULKAN_LIBRARY") + if vulkanPath != "" { + if !sdl.VulkanLoadLibrary(vulkanPath) { + log.Fatalf( + "SDL_Vulkan_LoadLibrary: %s", + sdl.GetError(), + ) + } + defer sdl.VulkanUnloadLibrary() + } + + if err := vk.Load(); err != nil { + panic(err) + } + windowHandler := sdl.CreateWindow(fmt.Sprintf("%s %s", APP_NAME, APP_VER), WIN_WIDTH, WIN_HEIGHT, sdl.WindowVulkan|sdl.WindowResizable) if windowHandler == 0 { - sdl.Quit() log.Fatalf("SDL_CreateWindow: %s", sdl.GetError()) return } + defer sdl.DestroyWindow(windowHandler) // ImGui init gui := imgui.New() @@ -236,10 +252,6 @@ func main() { defer sdl.StopTextInput(windowHandler) // fin on ImGui init - if err := vk.Load(); err != nil { - panic(err) - } - sdlExtensions := sdl.VulkanGetInstanceExtensions() if len(sdlExtensions) == 0 { log.Fatal("sdlVulkanGetInstanceExtensions is 0") diff --git a/go.mod b/go.mod index 475a75a..a150f26 100644 --- a/go.mod +++ b/go.mod @@ -2,6 +2,8 @@ module mxl-player go 1.26.0 +replace github.com/christerso/vulkan-go => /home/itten/extra/vulkan-go + require ( github.com/christerso/vulkan-go v0.0.0-20260618152204-bff25e5b7646 github.com/ebitengine/purego v0.10.2 diff --git a/go.sum b/go.sum index 525b5a2..601869e 100644 --- a/go.sum +++ b/go.sum @@ -1,7 +1,5 @@ github.com/AllenDang/cimgui-go v1.5.0 h1:wnS4h1wWyE+3x59cHJnNSszka7pIR+pehim6ifOk9Rg= github.com/AllenDang/cimgui-go v1.5.0/go.mod h1:w7LE33Ex/ZOHqaFBWBHOIVMY4yLSwGLpJMUpX/fb5p4= -github.com/christerso/vulkan-go v0.0.0-20260618152204-bff25e5b7646 h1:xfc6rFxs+U4XktxQa7jyPfg9g0xlb5STDsQn8sURsyo= -github.com/christerso/vulkan-go v0.0.0-20260618152204-bff25e5b7646/go.mod h1:DIo6W2yFav1DflNKc0W0Oc7mecbdBg2btsaHhIYmwUA= github.com/ebitengine/purego v0.10.2 h1:W809HbnvzAxgdm+aOvlSekrM16wGCdT/e76+9tS7gzE= github.com/ebitengine/purego v0.10.2/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= github.com/qvest-digital/go-mxl v1.1.0-rc.1 h1:CUg29Q5c/JA6pqyA5gP3vu7JBr8lRXbOOxC+r0W572s= diff --git a/internal/sdl/sdl.go b/internal/sdl/sdl.go index 71faa62..0a3f4aa 100644 --- a/internal/sdl/sdl.go +++ b/internal/sdl/sdl.go @@ -49,6 +49,8 @@ var ( sdlCreateWindow func(title *byte, w, h int32, flags uint64) uintptr sdlDestroyWindow func(window uintptr) + sdlVulkanLoadLibrary func(path *byte) bool + sdlVulkanUnloadLibrary func() sdlVulkanGetInstanceExtensions func(count *uint32) uintptr sdlVulkanCreateSurface func(window, instance, allocator uintptr, surface *uint64) bool @@ -153,8 +155,13 @@ func Load() error { purego.RegisterLibFunc(&sdlGetError, h, "SDL_GetError") purego.RegisterLibFunc(&sdlCreateWindow, h, "SDL_CreateWindow") purego.RegisterLibFunc(&sdlDestroyWindow, h, "SDL_DestroyWindow") + + // vulkan + purego.RegisterLibFunc(&sdlVulkanLoadLibrary, h, "SDL_Vulkan_LoadLibrary") + purego.RegisterLibFunc(&sdlVulkanUnloadLibrary, h, "SDL_Vulkan_UnloadLibrary") purego.RegisterLibFunc(&sdlVulkanGetInstanceExtensions, h, "SDL_Vulkan_GetInstanceExtensions") purego.RegisterLibFunc(&sdlVulkanCreateSurface, h, "SDL_Vulkan_CreateSurface") + purego.RegisterLibFunc(&sdlPollEvent, h, "SDL_PollEvent") purego.RegisterLibFunc(&sdlGetWindowSizeInPixels, h, "SDL_GetWindowSizeInPixels") purego.RegisterLibFunc(&sdlSetWindowFullscreen, h, "SDL_SetWindowFullscreen") @@ -186,6 +193,14 @@ func CreateWindow(title string, w, h int32, flags uint64) uintptr { } func DestroyWindow(window uintptr) { sdlDestroyWindow(window) } +func VulkanLoadLibrary(path string) bool { + return sdlVulkanLoadLibrary(cbytes(path)) +} + +func VulkanUnloadLibrary() { + sdlVulkanUnloadLibrary() +} + func VulkanGetInstanceExtensions() []string { var count uint32 vkExts := sdlVulkanGetInstanceExtensions(&count)