-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy path01_instance_creation.diff
More file actions
98 lines (89 loc) · 2.52 KB
/
01_instance_creation.diff
File metadata and controls
98 lines (89 loc) · 2.52 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
diff --git a/../steps/00_base_code/main.go b/../steps/01_instance_creation/main.go
index fa094df..c5ea41a 100644
--- a/../steps/00_base_code/main.go
+++ b/../steps/01_instance_creation/main.go
@@ -1,12 +1,20 @@
package main
import (
+ "github.com/pkg/errors"
"github.com/veandco/go-sdl2/sdl"
+ "github.com/vkngwrapper/core/v2"
+ "github.com/vkngwrapper/core/v2/common"
+ "github.com/vkngwrapper/core/v2/core1_0"
+ "github.com/vkngwrapper/extensions/v2/khr_portability_enumeration"
"log"
)
type HelloTriangleApplication struct {
+ loader core.Loader
window *sdl.Window
+
+ instance core1_0.Instance
}
func (app *HelloTriangleApplication) Run() error {
@@ -35,11 +43,16 @@ func (app *HelloTriangleApplication) initWindow() error {
}
app.window = window
+ app.loader, err = core.CreateSystemLoader()
+ if err != nil {
+ return err
+ }
+
return nil
}
func (app *HelloTriangleApplication) initVulkan() error {
- return nil
+ return app.createInstance()
}
func (app *HelloTriangleApplication) mainLoop() error {
@@ -57,12 +70,54 @@ appLoop:
}
func (app *HelloTriangleApplication) cleanup() {
+ if app.instance != nil {
+ app.instance.Destroy(nil)
+ }
+
if app.window != nil {
app.window.Destroy()
}
sdl.Quit()
}
+func (app *HelloTriangleApplication) createInstance() error {
+ instanceOptions := core1_0.InstanceCreateInfo{
+ ApplicationName: "Hello Triangle",
+ ApplicationVersion: common.CreateVersion(1, 0, 0),
+ EngineName: "No Engine",
+ EngineVersion: common.CreateVersion(1, 0, 0),
+ APIVersion: common.Vulkan1_2,
+ }
+
+ // Add extensions
+ sdlExtensions := app.window.VulkanGetInstanceExtensions()
+ extensions, _, err := app.loader.AvailableExtensions()
+ if err != nil {
+ return err
+ }
+
+ for _, ext := range sdlExtensions {
+ _, hasExt := extensions[ext]
+ if !hasExt {
+ return errors.Errorf("createinstance: cannot initialize sdl: missing extension %s", ext)
+ }
+ instanceOptions.EnabledExtensionNames = append(instanceOptions.EnabledExtensionNames, ext)
+ }
+
+ _, enumerationSupported := extensions[khr_portability_enumeration.ExtensionName]
+ if enumerationSupported {
+ instanceOptions.EnabledExtensionNames = append(instanceOptions.EnabledExtensionNames, khr_portability_enumeration.ExtensionName)
+ instanceOptions.Flags |= khr_portability_enumeration.InstanceCreateEnumeratePortability
+ }
+
+ app.instance, _, err = app.loader.CreateInstance(nil, instanceOptions)
+ if err != nil {
+ return err
+ }
+
+ return nil
+}
+
func main() {
app := &HelloTriangleApplication{}