package instance //#cgo LDFLAGS: -LF:/Coding/GoModule/cgo -lvulkan import "C" import ( "github.com/vkngwrapper/core/v2" "github.com/vkngwrapper/core/v2/common" "github.com/vkngwrapper/core/v2/core1_0" "github.com/vkngwrapper/extensions/v2/khr_surface" "github.com/vkngwrapper/extensions/v2/khr_swapchain" "zworld/engine/window" ) type T interface { EnumeratePhysicalDevices() []core1_0.PhysicalDevice Destroy() Init() error Ptr() core1_0.Instance } type FLoaderCreate func() *core.VulkanLoader type FInstance struct { loader *core.VulkanLoader win *window.FSDLWindow ptr core1_0.Instance surface khr_surface.Surface physicalDevice core1_0.PhysicalDevice device core1_0.Device graphicsQueue core1_0.Queue presentQueue core1_0.Queue swapchainExtension khr_swapchain.Extension swapchain khr_swapchain.Swapchain swapchainImages []core1_0.Image swapchainImageFormat core1_0.Format swapchainExtent core1_0.Extent2D swapchainImageViews []core1_0.ImageView swapchainFramebuffers []core1_0.Framebuffer } func New(appName string, win *window.FSDLWindow, LoaderCreate FLoaderCreate) T { loader := LoaderCreate() instanceOptions := &core1_0.InstanceCreateInfo{ APIVersion: common.APIVersion(common.CreateVersion(1, 1, 0)), ApplicationName: appName, ApplicationVersion: common.CreateVersion(0, 1, 0), EngineName: engineName, EngineVersion: common.CreateVersion(0, 2, 1), } err := help.getCreateInstanceExtension(instanceOptions, loader, win) if err != nil { return nil } err = help.getCreateInstanceLayer(instanceOptions, loader, win) if err != nil { return nil } handle, _, err := loader.CreateInstance(nil, *instanceOptions) if err != nil { panic(err) } return &FInstance{ ptr: handle, loader: loader, win: win, } } func (e *FInstance) Ptr() core1_0.Instance { return e.ptr } func (e *FInstance) Destroy() { e.ptr.Destroy(nil) e.ptr = nil } func (e *FInstance) EnumeratePhysicalDevices() []core1_0.PhysicalDevice { r, _, err := e.ptr.EnumeratePhysicalDevices() if err != nil { panic(err) } return r }