commit a793a2cbec2d7d9b278c6d6a6dff2cbfd7d950f9 Author: Marvin Blum Date: Sun Jun 6 19:05:29 2021 +0200 Basic GLFW setup and started setting up Vulkan. diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9f11b75 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.idea/ diff --git a/01_Simple_Sprite/main.go b/01_Simple_Sprite/main.go new file mode 100644 index 0000000..01f8a01 --- /dev/null +++ b/01_Simple_Sprite/main.go @@ -0,0 +1,83 @@ +package main + +import ( + "github.com/go-gl/glfw/v3.3/glfw" + vk "github.com/vulkan-go/vulkan" + "log" + "runtime" +) + +var ( + vkInstance vk.Instance +) + +func init() { + runtime.LockOSThread() +} + +func createWindow(title string, width, height int) (*glfw.Window, error) { + if err := glfw.Init(); err != nil { + return nil, err + } + + window, err := glfw.CreateWindow(width, height, title, nil, nil) + + if err != nil { + return nil, err + } + + window.MakeContextCurrent() + + for !window.ShouldClose() { + window.SwapBuffers() + glfw.PollEvents() + } + + return window, nil +} + +func initVk() error { + vk.SetGetInstanceProcAddr(glfw.GetVulkanGetInstanceProcAddress()) + + if err := vk.Init(); err != nil { + return err + } + + return nil +} + +func load() { + vk.CreateInstance(&vk.InstanceCreateInfo{ + EnabledLayerCount: 0, + }, nil, &vkInstance) +} + +func cleanup() { + vk.DestroyInstance(vkInstance, nil) +} + +func loop(window *glfw.Window) { + for !window.ShouldClose() { + // ... + window.SwapBuffers() + glfw.PollEvents() + } +} + +func main() { + window, err := createWindow("01 Simple Sprite", 640, 480) + + if err != nil { + log.Fatalf("error creating window: %s", err) + } + + defer glfw.Terminate() + + if err := initVk(); err != nil { + log.Fatalf("error initializing Vulkan: %s", err) + } + + load() + defer cleanup() + loop(window) +} diff --git a/README.md b/README.md new file mode 100644 index 0000000..99ab2bc --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# Golang Vulkan Experiments + +Learning and experimenting with Vulkan using Golang. diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..b8260b5 --- /dev/null +++ b/go.mod @@ -0,0 +1,8 @@ +module github.com/Kugelschieber/vk-experiments + +go 1.16 + +require ( + github.com/go-gl/glfw/v3.3/glfw v0.0.0-20210410170116-ea3d685f79fb // indirect + github.com/vulkan-go/vulkan v0.0.0-20210402152248-956e3850d8f9 // indirect +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..6ec70b8 --- /dev/null +++ b/go.sum @@ -0,0 +1,4 @@ +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20210410170116-ea3d685f79fb h1:T6gaWBvRzJjuOrdCtg8fXXjKai2xSDqWTcKFUPuw8Tw= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20210410170116-ea3d685f79fb/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/vulkan-go/vulkan v0.0.0-20210402152248-956e3850d8f9 h1:WFujQpkMAAd8dqccEm10n8dly4yQ/R5d2+Us7GutowA= +github.com/vulkan-go/vulkan v0.0.0-20210402152248-956e3850d8f9/go.mod h1:Y5Ti1uUBdKDsb0W8aPtIo9krs+29Y7p6Bc9yyy4AM6g=