vulkan_android.go 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. // SPDX-License-Identifier: Unlicense OR MIT
  2. //go:build !nowayland
  3. // +build !nowayland
  4. package vk
  5. /*
  6. #define VK_USE_PLATFORM_ANDROID_KHR
  7. #define VK_NO_PROTOTYPES 1
  8. #define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef uint64_t object;
  9. #include <android/native_window.h>
  10. #include <vulkan/vulkan.h>
  11. static VkResult vkCreateAndroidSurfaceKHR(PFN_vkCreateAndroidSurfaceKHR f, VkInstance instance, const VkAndroidSurfaceCreateInfoKHR *pCreateInfo, const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface) {
  12. return f(instance, pCreateInfo, pAllocator, pSurface);
  13. }
  14. */
  15. import "C"
  16. import (
  17. "fmt"
  18. "unsafe"
  19. )
  20. var wlFuncs struct {
  21. vkCreateAndroidSurfaceKHR C.PFN_vkCreateAndroidSurfaceKHR
  22. }
  23. func init() {
  24. loadFuncs = append(loadFuncs, func(dlopen func(name string) *[0]byte) {
  25. wlFuncs.vkCreateAndroidSurfaceKHR = dlopen("vkCreateAndroidSurfaceKHR")
  26. })
  27. }
  28. func CreateAndroidSurface(inst Instance, window unsafe.Pointer) (Surface, error) {
  29. inf := C.VkAndroidSurfaceCreateInfoKHR{
  30. sType: C.VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR,
  31. window: (*C.ANativeWindow)(window),
  32. }
  33. var surf Surface
  34. if err := vkErr(C.vkCreateAndroidSurfaceKHR(wlFuncs.vkCreateAndroidSurfaceKHR, inst, &inf, nil, &surf)); err != nil {
  35. return 0, fmt.Errorf("vulkan: vkCreateAndroidSurfaceKHR: %w", err)
  36. }
  37. return surf, nil
  38. }