diff --git a/README.md b/README.md
index a435e42..f02d249 100644
--- a/README.md
+++ b/README.md
@@ -4,6 +4,8 @@
- vulcandraw
- vulcancube
+Using CGO then requare C/C++ compiler on path.
+
## Supported platforms
- Windows (GLFW)
@@ -18,18 +20,18 @@
### GLFW v3.3
A standard `go run main.go` / `go build` in each of the glfw demo folders should work out of the box for most platforms.
+Optionally make file can help.
-For macOS / iOS the MoltenVK.framework needs to be installed in the /Library/Frameworks folder for the build to find it. It can be downloaded as part of he Vulkan SDK: https://vulkan.lunarg.com/sdk/home
+For macOS / iOS the [MoltenVK](https://github.com/KhronosGroup/MoltenVK) dylib needs to be installed.
+On macOS you can use [Homebrew](https://docs.brew.sh/Installation) and install `molten-vk` package like `brew install molten-vk`.
### Manual configuration
-For **OS X / macOS** you'll need to install the latest GLFW 3.3 from master https://github.com/glfw/glfw
+For **OS X / macOS** you'll need to install. the latest GLFW 3.3 from master https://github.com/glfw/glfw
and prepare MoltenVK https://moltengl.com/moltenvk/ SDK beforehand so CMake could find it.
There is a Makefile https://github.com/vulkan-go/demos/blob/master/vulkancube/vulkancube_desktop/Makefile to show how to properly invoke `go install` specifying the path to GLFW.
-For **Windows** you don't need to compile MoltenVK and can use GLFW 3.2.1 distro from the site http://www.glfw.org then just specify paths in Makefile or run commands by hand, specifying paths to GLFW distro folders.
-
Make sure your graphics card and driver are supported:
- https://developer.nvidia.com/vulkan-driver
@@ -39,6 +41,21 @@ In all cases you will run `XXX_desktop` demos.
## How to run on Android
+Prerequisites are
+- installed [Android SDK](https://developer.android.com/studio/releases/platform-tools)
+- installed [Android NDK](https://developer.android.com/ndk/downloads)
+- installed application "make"
+- set system variable [ANDROID_HOME](https://developer.android.com/studio/command-line/variables)
+- set system variable [NDK](https://developer.android.com/ndk/guides/other_build_systems)
+- set system variable [HOST_TAG](https://developer.android.com/ndk/guides/other_build_systems)
+
+Recommended:
+- installed [Android Studio](https://developer.android.com/studio)
+- [validation layers binaries](https://github.com/KhronosGroup/Vulkan-ValidationLayers/releases)
+
+In the "android" folder is "make" file which run as `make all` will clean, build and make application APK file in ./android/app/build/outputs/apk/debug.
+Using Android Studio is very easy to deploy APK file into physical device or emulator.
+
Refer to [xlab/android-go/examples/minimal](https://github.com/xlab/android-go/tree/master/examples/minimal)
## License
diff --git a/vulkandraw/vulkandraw.go b/vulkandraw/vulkandraw.go
index 9fe1e42..d889fdf 100644
--- a/vulkandraw/vulkandraw.go
+++ b/vulkandraw/vulkandraw.go
@@ -132,8 +132,7 @@ func VulkanInit(v *VulkanDeviceInfo, s *VulkanSwapchainInfo,
check(ret, "vk.CreateSemaphore")
}
-func VulkanDrawFrame(v VulkanDeviceInfo,
- s VulkanSwapchainInfo, r VulkanRenderInfo) bool {
+func DrawFrame(v VulkanDeviceInfo, s VulkanSwapchainInfo, r VulkanRenderInfo) bool {
var nextIdx uint32
// Phase 1: vk.AcquireNextImage
@@ -158,6 +157,9 @@ func VulkanDrawFrame(v VulkanDeviceInfo,
SType: vk.StructureTypeSubmitInfo,
WaitSemaphoreCount: 1,
PWaitSemaphores: r.semaphores,
+ PWaitDstStageMask: []vk.PipelineStageFlags{
+ vk.PipelineStageFlags(vk.PipelineStageColorAttachmentOutputBit),
+ },
CommandBufferCount: 1,
PCommandBuffers: r.cmdBuffers[nextIdx:],
}}
@@ -218,8 +220,8 @@ func CreateRenderer(device vk.Device, displayFormat vk.Format) (VulkanRenderInfo
StoreOp: vk.AttachmentStoreOpStore,
StencilLoadOp: vk.AttachmentLoadOpDontCare,
StencilStoreOp: vk.AttachmentStoreOpDontCare,
- InitialLayout: vk.ImageLayoutColorAttachmentOptimal,
- FinalLayout: vk.ImageLayoutColorAttachmentOptimal,
+ InitialLayout: vk.ImageLayoutUndefined,
+ FinalLayout: vk.ImageLayoutPresentSrc,
}}
colorAttachments := []vk.AttachmentReference{{
Attachment: 0,
@@ -257,30 +259,21 @@ func CreateRenderer(device vk.Device, displayFormat vk.Format) (VulkanRenderInfo
return r, nil
}
-func NewVulkanDevice(appInfo *vk.ApplicationInfo, window uintptr, instanceExtensions []string, createSurfaceFunc func(interface{}) uintptr) (VulkanDeviceInfo, error) {
+func NewVulkanDevice(appInfo *vk.ApplicationInfo, instanceExtensions []string, createSurfaceFunc func(vk.Instance) vk.Surface) (VulkanDeviceInfo, error) {
// Phase 1: vk.CreateInstance with vk.InstanceCreateInfo
existingExtensions := getInstanceExtensions()
log.Println("[INFO] Instance extensions:", existingExtensions)
- // instanceExtensions := vk.GetRequiredInstanceExtensions()
+ //TODO deprecated extension, use VK_EXT_debug_utils instead - https://developer.android.com/ndk/guides/graphics/validation-layer
if enableDebug {
- instanceExtensions = append(instanceExtensions,
- "VK_EXT_debug_report\x00")
+ instanceExtensions = append(instanceExtensions, "VK_EXT_debug_report\x00")
}
- // ANDROID:
- // these layers must be included in APK,
- // see Android.mk and ValidationLayers.mk
- instanceLayers := []string{
- // "VK_LAYER_GOOGLE_threading\x00",
- // "VK_LAYER_LUNARG_parameter_validation\x00",
- // "VK_LAYER_LUNARG_object_tracker\x00",
- // "VK_LAYER_LUNARG_core_validation\x00",
- // "VK_LAYER_LUNARG_api_dump\x00",
- // "VK_LAYER_LUNARG_image\x00",
- // "VK_LAYER_LUNARG_swapchain\x00",
- // "VK_LAYER_GOOGLE_unique_objects\x00",
+ // ANDROID: these layers must be included in APK
+ var instanceLayers []string
+ if enableDebug {
+ instanceLayers = append(instanceLayers, "VK_LAYER_KHRONOS_validation\x00")
}
instanceCreateInfo := vk.InstanceCreateInfo{
@@ -302,13 +295,8 @@ func NewVulkanDevice(appInfo *vk.ApplicationInfo, window uintptr, instanceExtens
// Phase 2: vk.CreateAndroidSurface with vk.AndroidSurfaceCreateInfo
- v.Surface = vk.SurfaceFromPointer(createSurfaceFunc(v.Instance))
- // err = vk.Error(vk.CreateWindowSurface(v.Instance, window, nil, &v.Surface))
- if err != nil {
- vk.DestroyInstance(v.Instance, nil)
- err = fmt.Errorf("vkCreateWindowSurface failed with %s", err)
- return v, err
- }
+ v.Surface = createSurfaceFunc(v.Instance)
+
if v.gpuDevices, err = getPhysicalDevices(v.Instance); err != nil {
v.gpuDevices = nil
vk.DestroySurface(v.Instance, v.Surface, nil)
@@ -321,19 +309,8 @@ func NewVulkanDevice(appInfo *vk.ApplicationInfo, window uintptr, instanceExtens
// Phase 3: vk.CreateDevice with vk.DeviceCreateInfo (a logical device)
- // ANDROID:
- // these layers must be included in APK,
- // see Android.mk and ValidationLayers.mk
- deviceLayers := []string{
- // "VK_LAYER_GOOGLE_threading\x00",
- // "VK_LAYER_LUNARG_parameter_validation\x00",
- // "VK_LAYER_LUNARG_object_tracker\x00",
- // "VK_LAYER_LUNARG_core_validation\x00",
- // "VK_LAYER_LUNARG_api_dump\x00",
- // "VK_LAYER_LUNARG_image\x00",
- // "VK_LAYER_LUNARG_swapchain\x00",
- // "VK_LAYER_GOOGLE_unique_objects\x00",
- }
+ //TODO Device layers are deprecated
+ //deviceLayers := []string{}
queueCreateInfos := []vk.DeviceQueueCreateInfo{{
SType: vk.StructureTypeDeviceQueueCreateInfo,
@@ -349,8 +326,8 @@ func NewVulkanDevice(appInfo *vk.ApplicationInfo, window uintptr, instanceExtens
PQueueCreateInfos: queueCreateInfos,
EnabledExtensionCount: uint32(len(deviceExtensions)),
PpEnabledExtensionNames: deviceExtensions,
- EnabledLayerCount: uint32(len(deviceLayers)),
- PpEnabledLayerNames: deviceLayers,
+ //EnabledLayerCount: uint32(len(deviceLayers)),
+ //PpEnabledLayerNames: deviceLayers,
}
var device vk.Device // we choose the first GPU available for this device
err = vk.Error(vk.CreateDevice(v.gpuDevices[0], &deviceCreateInfo, nil, &device))
@@ -511,6 +488,7 @@ func (v *VulkanDeviceInfo) CreateSwapchain() (VulkanSwapchainInfo, error) {
PresentMode: vk.PresentModeFifo,
OldSwapchain: vk.NullSwapchain,
Clipped: vk.False,
+ CompositeAlpha: vk.CompositeAlphaInheritBit,
}
s.Swapchains = make([]vk.Swapchain, 1)
err = vk.Error(vk.CreateSwapchain(v.Device, &swapchainCreateInfo, nil, &(s.Swapchains[0])))
@@ -585,7 +563,7 @@ func (s *VulkanSwapchainInfo) CreateFramebuffers(renderPass vk.RenderPass, depth
SType: vk.StructureTypeFramebufferCreateInfo,
RenderPass: renderPass,
Layers: 1,
- AttachmentCount: 1, // 2 if has depthView
+ AttachmentCount: 1, // 2 if it has depthView
PAttachments: attachments,
Width: s.DisplaySize.Width,
Height: s.DisplaySize.Height,
@@ -823,7 +801,7 @@ func CreateGraphicsPipeline(device vk.Device,
inputAssemblyState := vk.PipelineInputAssemblyStateCreateInfo{
SType: vk.StructureTypePipelineInputAssemblyStateCreateInfo,
Topology: vk.PrimitiveTopologyTriangleList,
- PrimitiveRestartEnable: vk.True,
+ PrimitiveRestartEnable: vk.False,
}
vertexInputBindings := []vk.VertexInputBindingDescription{{
Binding: 0,
diff --git a/vulkandraw/vulkandraw_android/.gitignore b/vulkandraw/vulkandraw_android/.gitignore
deleted file mode 100644
index e01d8fd..0000000
--- a/vulkandraw/vulkandraw_android/.gitignore
+++ /dev/null
@@ -1,10 +0,0 @@
-.DS_Store
-android/bin/
-android/build.xml
-android/jni/lib/
-android/libs/
-android/local.properties
-android/obj/
-android/proguard-project.txt
-android/project.properties
-toolchain/
diff --git a/vulkandraw/vulkandraw_android/Makefile b/vulkandraw/vulkandraw_android/Makefile
index 8b76c5b..5be1b7c 100644
--- a/vulkandraw/vulkandraw_android/Makefile
+++ b/vulkandraw/vulkandraw_android/Makefile
@@ -1,26 +1,48 @@
-OS=linux
-ANDROID_API ?= 23
-ANDROID_TOOLCHAIN_DIR ?= $(ANDROID_NDK_HOME)/toolchains/llvm/prebuilt/$(OS)-x86_64/bin
+HOST_TAG ?= linux-x86_64
+API_LEVEL ?= 26
+TOOLCHAIN ?= $(NDK)/toolchains/llvm/prebuilt/$(HOST_TAG)/bin
-all: build apk
+all: clean build apk
+ echo "WORK DONE"
-build:
- mkdir -p android/jni/lib
- CC="$(ANDROID_TOOLCHAIN_DIR)/aarch64-linux-android$(ANDROID_API)-clang" \
- CXX="$(ANDROID_TOOLCHAIN_DIR)/aarch64-linux-android$(ANDROID_API)-clang++" \
+build: build32 build64 build-amd64
+ echo "builded all"
+
+build32:
+ echo "compile for old phones with arm (32bit)"
+ CC="$(TOOLCHAIN)/armv7a-linux-androideabi$(API_LEVEL)-clang" \
+ CXX="$(TOOLCHAIN)/armv7a-linux-androideabi$(API_LEVEL)-clang++" \
+ GOOS=android \
+ GOARCH=arm \
+ CGO_ENABLED=1 \
+ go build -buildmode=c-shared -o android/app/src/main/jniLibs/armeabi-v7a/libvulkandraw.so
+
+build64:
+ echo "compile for arm64 (64bit)"
+ CC="$(TOOLCHAIN)/aarch64-linux-android$(API_LEVEL)-clang" \
+ CXX="$(TOOLCHAIN)/aarch64-linux-android$(API_LEVEL)-clang++" \
GOOS=android \
GOARCH=arm64 \
CGO_ENABLED=1 \
- go build -buildmode=c-shared -o android/jni/lib/libvulkandraw.so
-
-apk:
- cd android && make
+ go build -buildmode=c-shared -o android/app/src/main/jniLibs/arm64-v8a/libvulkandraw.so
+
+build-amd64:
+ echo "compile for emulator"
+ CC="$(TOOLCHAIN)/x86_64-linux-android$(API_LEVEL)-clang" \
+ CXX="$(TOOLCHAIN)/x86_64-linux-android$(API_LEVEL)-clang++" \
+ GOOS=android \
+ GOARCH=amd64 \
+ CGO_ENABLED=1 \
+ go build -buildmode=c-shared -o android/app/src/main/jniLibs/x86_64/libvulkandraw.so
clean:
- cd android && make clean
+ echo "delete generated files"
+ rm -rf android/app/build
+ rm -rf android/app/build-native
-install:
- cd android && make install
+apk:
+ echo "run gradle"
+ cd android; ./gradlew -q clean assembleDebug > /dev/null 2>&1
listen:
adb logcat -c
diff --git a/vulkandraw/vulkandraw_android/android/.gitattributes b/vulkandraw/vulkandraw_android/android/.gitattributes
new file mode 100644
index 0000000..61793db
--- /dev/null
+++ b/vulkandraw/vulkandraw_android/android/.gitattributes
@@ -0,0 +1,6 @@
+#
+# https://help.github.com/articles/dealing-with-line-endings/
+#
+# These are explicitly windows files and should use crlf
+*.bat text eol=crlf
+
diff --git a/vulkandraw/vulkandraw_android/android/.gitignore b/vulkandraw/vulkandraw_android/android/.gitignore
new file mode 100644
index 0000000..6f67361
--- /dev/null
+++ b/vulkandraw/vulkandraw_android/android/.gitignore
@@ -0,0 +1,7 @@
+# Ignore Gradle project-specific cache directory
+.gradle
+
+# Ignore Gradle build output directory
+build
+build-native
+local.properties
diff --git a/vulkandraw/vulkandraw_android/android/AndroidManifest.xml b/vulkandraw/vulkandraw_android/android/AndroidManifest.xml
deleted file mode 100644
index 81dd8d8..0000000
--- a/vulkandraw/vulkandraw_android/android/AndroidManifest.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/vulkandraw/vulkandraw_android/android/Makefile b/vulkandraw/vulkandraw_android/android/Makefile
deleted file mode 100644
index accf698..0000000
--- a/vulkandraw/vulkandraw_android/android/Makefile
+++ /dev/null
@@ -1,23 +0,0 @@
-all: project build
-
-build:
- ant debug
-
-install:
- ant debug install
-
-project:
- # command "android-project" require installation:
- # go get github.com/xlab/treeprint
- # go get github.com/jawher/mow.cli
- # go install github.com/xlab/android-go/cmd/android-project
-
- android-project update --target android-23 --name VulkanDraw --path .
-
-project-n:
- android-project update --target android-N --name VulkanDraw --path .
-
-clean:
- rm -rf libs obj bin gen jni/lib
- rm -f proguard-project.txt project.properties
- rm -f local.properties build.xml
diff --git a/vulkandraw/vulkandraw_android/android/app/CMakeLists.txt b/vulkandraw/vulkandraw_android/android/app/CMakeLists.txt
new file mode 100644
index 0000000..15dafc9
--- /dev/null
+++ b/vulkandraw/vulkandraw_android/android/app/CMakeLists.txt
@@ -0,0 +1,13 @@
+
+# Mention the cmake version name.
+cmake_minimum_required(VERSION 3.4.1)
+
+project( VulkanDraw )
+
+# Application
+add_library(vulkandraw SHARED IMPORTED)
+
+set_target_properties( vulkandraw
+ PROPERTIES IMPORTED_LOCATION
+ ${CMAKE_SOURCE_DIR}/src/main/jniLibs/${ANDROID_ABI}/libvulkandraw.so
+)
diff --git a/vulkandraw/vulkandraw_android/android/app/build.gradle b/vulkandraw/vulkandraw_android/android/app/build.gradle
new file mode 100644
index 0000000..a074751
--- /dev/null
+++ b/vulkandraw/vulkandraw_android/android/app/build.gradle
@@ -0,0 +1,57 @@
+plugins {
+ id 'com.android.application'
+}
+
+android {
+ namespace 'org.golang.android.vulkan.draw'
+ compileSdk 26
+ buildToolsVersion '33.0.0'
+ ndkVersion '25.1.8937393'
+
+ defaultConfig {
+ applicationId "org.golang.android.vulkan.draw"
+ minSdk 26
+ //noinspection ExpiredTargetSdkVersion
+ targetSdk 26
+ versionCode 1
+ versionName "1.0"
+
+ externalNativeBuild {
+ cmake {
+ abiFilters.addAll('armeabi-v7a', 'arm64-v8a', 'x86_64')
+ }
+ }
+ }
+
+ buildTypes {
+ debug {
+ debuggable true
+ jniDebuggable true
+ minifyEnabled false
+ }
+
+ release {
+ debuggable false
+ jniDebuggable false
+ minifyEnabled false
+ }
+ }
+
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+
+ sourceSets {
+ main.assets.srcDirs = ['assets']
+ main {
+ res.srcDirs += [ '../../../app/android/res' ]
+ }
+ }
+ externalNativeBuild {
+ cmake {
+ path 'CMakeLists.txt'
+ buildStagingDirectory 'build-native'
+ }
+ }
+}
diff --git a/vulkandraw/vulkandraw_android/android/app/src/main/AndroidManifest.xml b/vulkandraw/vulkandraw_android/android/app/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..d09fb03
--- /dev/null
+++ b/vulkandraw/vulkandraw_android/android/app/src/main/AndroidManifest.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vulkandraw/vulkandraw_android/android/app/src/main/res/drawable-hdpi/icon.png b/vulkandraw/vulkandraw_android/android/app/src/main/res/drawable-hdpi/icon.png
new file mode 100644
index 0000000..bd90f0a
Binary files /dev/null and b/vulkandraw/vulkandraw_android/android/app/src/main/res/drawable-hdpi/icon.png differ
diff --git a/vulkandraw/vulkandraw_android/android/app/src/main/res/drawable-mdpi/icon.png b/vulkandraw/vulkandraw_android/android/app/src/main/res/drawable-mdpi/icon.png
new file mode 100644
index 0000000..e3ce50a
Binary files /dev/null and b/vulkandraw/vulkandraw_android/android/app/src/main/res/drawable-mdpi/icon.png differ
diff --git a/vulkandraw/vulkandraw_android/android/app/src/main/res/drawable-xhdpi/icon.png b/vulkandraw/vulkandraw_android/android/app/src/main/res/drawable-xhdpi/icon.png
new file mode 100644
index 0000000..d73e1c3
Binary files /dev/null and b/vulkandraw/vulkandraw_android/android/app/src/main/res/drawable-xhdpi/icon.png differ
diff --git a/vulkandraw/vulkandraw_android/android/app/src/main/res/drawable-xxhdpi/icon.png b/vulkandraw/vulkandraw_android/android/app/src/main/res/drawable-xxhdpi/icon.png
new file mode 100644
index 0000000..3dbd600
Binary files /dev/null and b/vulkandraw/vulkandraw_android/android/app/src/main/res/drawable-xxhdpi/icon.png differ
diff --git a/vulkandraw/vulkandraw_android/android/app/src/main/res/values/strings.xml b/vulkandraw/vulkandraw_android/android/app/src/main/res/values/strings.xml
new file mode 100644
index 0000000..5bede67
--- /dev/null
+++ b/vulkandraw/vulkandraw_android/android/app/src/main/res/values/strings.xml
@@ -0,0 +1,4 @@
+
+
+ Vulkan Draw
+
diff --git a/vulkandraw/vulkandraw_android/android/build.gradle b/vulkandraw/vulkandraw_android/android/build.gradle
new file mode 100644
index 0000000..596498c
--- /dev/null
+++ b/vulkandraw/vulkandraw_android/android/build.gradle
@@ -0,0 +1,5 @@
+// Top-level build file where you can add configuration options common to all sub-projects/modules.
+plugins {
+ id 'com.android.application' version '7.3.1' apply false
+ id 'com.android.library' version '7.3.1' apply false
+}
diff --git a/vulkandraw/vulkandraw_android/android/gradle.properties b/vulkandraw/vulkandraw_android/android/gradle.properties
new file mode 100644
index 0000000..c68b058
--- /dev/null
+++ b/vulkandraw/vulkandraw_android/android/gradle.properties
@@ -0,0 +1,4 @@
+android.useAndroidX=true
+android.enableJetifier=true
+org.gradle.parallel=true
+org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
diff --git a/vulkandraw/vulkandraw_android/android/gradle/wrapper/gradle-wrapper.jar b/vulkandraw/vulkandraw_android/android/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 0000000..41d9927
Binary files /dev/null and b/vulkandraw/vulkandraw_android/android/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/vulkandraw/vulkandraw_android/android/gradle/wrapper/gradle-wrapper.properties b/vulkandraw/vulkandraw_android/android/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..41dfb87
--- /dev/null
+++ b/vulkandraw/vulkandraw_android/android/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,5 @@
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
diff --git a/vulkandraw/vulkandraw_android/android/gradlew b/vulkandraw/vulkandraw_android/android/gradlew
new file mode 100644
index 0000000..1b6c787
--- /dev/null
+++ b/vulkandraw/vulkandraw_android/android/gradlew
@@ -0,0 +1,234 @@
+#!/bin/sh
+
+#
+# Copyright © 2015-2021 the original authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+##############################################################################
+#
+# Gradle start up script for POSIX generated by Gradle.
+#
+# Important for running:
+#
+# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
+# noncompliant, but you have some other compliant shell such as ksh or
+# bash, then to run this script, type that shell name before the whole
+# command line, like:
+#
+# ksh Gradle
+#
+# Busybox and similar reduced shells will NOT work, because this script
+# requires all of these POSIX shell features:
+# * functions;
+# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
+# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
+# * compound commands having a testable exit status, especially «case»;
+# * various built-in commands including «command», «set», and «ulimit».
+#
+# Important for patching:
+#
+# (2) This script targets any POSIX shell, so it avoids extensions provided
+# by Bash, Ksh, etc; in particular arrays are avoided.
+#
+# The "traditional" practice of packing multiple parameters into a
+# space-separated string is a well documented source of bugs and security
+# problems, so this is (mostly) avoided, by progressively accumulating
+# options in "$@", and eventually passing that to Java.
+#
+# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
+# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
+# see the in-line comments for details.
+#
+# There are tweaks for specific operating systems such as AIX, CygWin,
+# Darwin, MinGW, and NonStop.
+#
+# (3) This script is generated from the Groovy template
+# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
+# within the Gradle project.
+#
+# You can find Gradle at https://github.com/gradle/gradle/.
+#
+##############################################################################
+
+# Attempt to set APP_HOME
+
+# Resolve links: $0 may be a link
+app_path=$0
+
+# Need this for daisy-chained symlinks.
+while
+ APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
+ [ -h "$app_path" ]
+do
+ ls=$( ls -ld "$app_path" )
+ link=${ls#*' -> '}
+ case $link in #(
+ /*) app_path=$link ;; #(
+ *) app_path=$APP_HOME$link ;;
+ esac
+done
+
+APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
+
+APP_NAME="Gradle"
+APP_BASE_NAME=${0##*/}
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD=maximum
+
+warn () {
+ echo "$*"
+} >&2
+
+die () {
+ echo
+ echo "$*"
+ echo
+ exit 1
+} >&2
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "$( uname )" in #(
+ CYGWIN* ) cygwin=true ;; #(
+ Darwin* ) darwin=true ;; #(
+ MSYS* | MINGW* ) msys=true ;; #(
+ NONSTOP* ) nonstop=true ;;
+esac
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD=$JAVA_HOME/jre/sh/java
+ else
+ JAVACMD=$JAVA_HOME/bin/java
+ fi
+ if [ ! -x "$JAVACMD" ] ; then
+ die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+ fi
+else
+ JAVACMD=java
+ which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
+ case $MAX_FD in #(
+ max*)
+ MAX_FD=$( ulimit -H -n ) ||
+ warn "Could not query maximum file descriptor limit"
+ esac
+ case $MAX_FD in #(
+ '' | soft) :;; #(
+ *)
+ ulimit -n "$MAX_FD" ||
+ warn "Could not set maximum file descriptor limit to $MAX_FD"
+ esac
+fi
+
+# Collect all arguments for the java command, stacking in reverse order:
+# * args from the command line
+# * the main class name
+# * -classpath
+# * -D...appname settings
+# * --module-path (only if needed)
+# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
+
+# For Cygwin or MSYS, switch paths to Windows format before running java
+if "$cygwin" || "$msys" ; then
+ APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
+ CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
+
+ JAVACMD=$( cygpath --unix "$JAVACMD" )
+
+ # Now convert the arguments - kludge to limit ourselves to /bin/sh
+ for arg do
+ if
+ case $arg in #(
+ -*) false ;; # don't mess with options #(
+ /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
+ [ -e "$t" ] ;; #(
+ *) false ;;
+ esac
+ then
+ arg=$( cygpath --path --ignore --mixed "$arg" )
+ fi
+ # Roll the args list around exactly as many times as the number of
+ # args, so each arg winds up back in the position where it started, but
+ # possibly modified.
+ #
+ # NB: a `for` loop captures its iteration list before it begins, so
+ # changing the positional parameters here affects neither the number of
+ # iterations, nor the values presented in `arg`.
+ shift # remove old arg
+ set -- "$@" "$arg" # push replacement arg
+ done
+fi
+
+# Collect all arguments for the java command;
+# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
+# shell script including quotes and variable substitutions, so put them in
+# double quotes to make sure that they get re-expanded; and
+# * put everything else in single quotes, so that it's not re-expanded.
+
+set -- \
+ "-Dorg.gradle.appname=$APP_BASE_NAME" \
+ -classpath "$CLASSPATH" \
+ org.gradle.wrapper.GradleWrapperMain \
+ "$@"
+
+# Use "xargs" to parse quoted args.
+#
+# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
+#
+# In Bash we could simply go:
+#
+# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
+# set -- "${ARGS[@]}" "$@"
+#
+# but POSIX shell has neither arrays nor command substitution, so instead we
+# post-process each arg (as a line of input to sed) to backslash-escape any
+# character that might be a shell metacharacter, then use eval to reverse
+# that process (while maintaining the separation between arguments), and wrap
+# the whole thing up as a single "set" statement.
+#
+# This will of course break if any of these variables contains a newline or
+# an unmatched quote.
+#
+
+eval "set -- $(
+ printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
+ xargs -n1 |
+ sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
+ tr '\n' ' '
+ )" '"$@"'
+
+exec "$JAVACMD" "$@"
diff --git a/vulkandraw/vulkandraw_android/android/gradlew.bat b/vulkandraw/vulkandraw_android/android/gradlew.bat
new file mode 100644
index 0000000..107acd3
--- /dev/null
+++ b/vulkandraw/vulkandraw_android/android/gradlew.bat
@@ -0,0 +1,89 @@
+@rem
+@rem Copyright 2015 the original author or authors.
+@rem
+@rem Licensed under the Apache License, Version 2.0 (the "License");
+@rem you may not use this file except in compliance with the License.
+@rem You may obtain a copy of the License at
+@rem
+@rem https://www.apache.org/licenses/LICENSE-2.0
+@rem
+@rem Unless required by applicable law or agreed to in writing, software
+@rem distributed under the License is distributed on an "AS IS" BASIS,
+@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@rem See the License for the specific language governing permissions and
+@rem limitations under the License.
+@rem
+
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Resolve any "." and ".." in APP_HOME to make it shorter.
+for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto execute
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto execute
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/vulkandraw/vulkandraw_android/android/jni/Android.mk b/vulkandraw/vulkandraw_android/android/jni/Android.mk
deleted file mode 100644
index 63ea646..0000000
--- a/vulkandraw/vulkandraw_android/android/jni/Android.mk
+++ /dev/null
@@ -1,15 +0,0 @@
-LOCAL_PATH := $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := vulkandraw
-LOCAL_SRC_FILES := lib/libvulkandraw.so
-LOCAL_LDLIBS := -llog -landroid
-
-include $(PREBUILT_SHARED_LIBRARY)
-
-# Enable Vulkan validation layers, you can obtain them at
-# https://github.com/LunarG/VulkanTools
-# mirror: https://github.com/vulkan-go/VulkanTools
-
-# include $(LOCAL_PATH)/ValidationLayers.mk
diff --git a/vulkandraw/vulkandraw_android/android/jni/Application.mk b/vulkandraw/vulkandraw_android/android/jni/Application.mk
deleted file mode 100644
index 5598db3..0000000
--- a/vulkandraw/vulkandraw_android/android/jni/Application.mk
+++ /dev/null
@@ -1,2 +0,0 @@
-APP_PLATFORM := android-23
-APP_ABI := arm64-v8a
diff --git a/vulkandraw/vulkandraw_android/android/jni/ValidationLayers.mk b/vulkandraw/vulkandraw_android/android/jni/ValidationLayers.mk
deleted file mode 100644
index a3c370e..0000000
--- a/vulkandraw/vulkandraw_android/android/jni/ValidationLayers.mk
+++ /dev/null
@@ -1,64 +0,0 @@
-LOCAL_PATH := $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := VK_LAYER_LUNARG_api_dump
-LOCAL_SRC_FILES := lib/libVkLayer_api_dump.so
-
-include $(PREBUILT_SHARED_LIBRARY)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := VK_LAYER_LUNARG_core_validation
-LOCAL_SRC_FILES := lib/libVkLayer_core_validation.so
-
-include $(PREBUILT_SHARED_LIBRARY)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := VK_LAYER_LUNARG_image
-LOCAL_SRC_FILES := lib/libVkLayer_image.so
-
-include $(PREBUILT_SHARED_LIBRARY)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := VK_LAYER_LUNARG_object_tracker
-LOCAL_SRC_FILES := lib/libVkLayer_object_tracker.so
-
-include $(PREBUILT_SHARED_LIBRARY)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := VK_LAYER_LUNARG_parameter_validation
-LOCAL_SRC_FILES := lib/libVkLayer_parameter_validation.so
-
-include $(PREBUILT_SHARED_LIBRARY)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := VK_LAYER_LUNARG_screenshot
-LOCAL_SRC_FILES := lib/libVkLayer_screenshot.so
-
-include $(PREBUILT_SHARED_LIBRARY)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := VK_LAYER_LUNARG_swapchain
-LOCAL_SRC_FILES := lib/libVkLayer_swapchain.so
-
-include $(PREBUILT_SHARED_LIBRARY)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := VK_LAYER_GOOGLE_threading
-LOCAL_SRC_FILES := lib/libVkLayer_threading.so
-
-include $(PREBUILT_SHARED_LIBRARY)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := VK_LAYER_GOOGLE_unique_objects
-LOCAL_SRC_FILES := lib/libVkLayer_unique_objects.so
-
-include $(PREBUILT_SHARED_LIBRARY)
diff --git a/vulkandraw/vulkandraw_android/android/settings.gradle b/vulkandraw/vulkandraw_android/android/settings.gradle
new file mode 100644
index 0000000..c3182f1
--- /dev/null
+++ b/vulkandraw/vulkandraw_android/android/settings.gradle
@@ -0,0 +1,16 @@
+pluginManagement {
+ repositories {
+ gradlePluginPortal()
+ google()
+ mavenCentral()
+ }
+}
+dependencyResolutionManagement {
+ repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
+ repositories {
+ google()
+ mavenCentral()
+ }
+}
+rootProject.name = 'VulkanDraw'
+include('app')
diff --git a/vulkandraw/vulkandraw_android/main.go b/vulkandraw/vulkandraw_android/main.go
index bc2ffaa..ceef620 100644
--- a/vulkandraw/vulkandraw_android/main.go
+++ b/vulkandraw/vulkandraw_android/main.go
@@ -1,13 +1,16 @@
+//go:build android
+// +build android
+
package main
import (
"log"
- "vulkandraw"
vk "github.com/vulkan-go/vulkan"
"github.com/xlab/android-go/android"
"github.com/xlab/android-go/app"
"github.com/xlab/catcher"
+ "github.com/vulkan-go/demos/vulkandraw"
)
func init() {
@@ -16,10 +19,10 @@ func init() {
var appInfo = &vk.ApplicationInfo{
SType: vk.StructureTypeApplicationInfo,
- ApiVersion: vk.MakeVersion(1, 0, 0),
ApplicationVersion: vk.MakeVersion(1, 0, 0),
PApplicationName: "VulkanDraw\x00",
PEngineName: "vulkango.com\x00",
+ ApiVersion: vk.ApiVersion10,
}
func main() {
@@ -34,13 +37,12 @@ func main() {
catcher.RecvDie(-1),
)
var (
- v vulkandraw.VulkanDeviceInfo
- s vulkandraw.VulkanSwapchainInfo
- r vulkandraw.VulkanRenderInfo
- b vulkandraw.VulkanBufferInfo
- gfx vulkandraw.VulkanGfxPipelineInfo
-
- vkActive bool
+ v vulkandraw.VulkanDeviceInfo
+ s vulkandraw.VulkanSwapchainInfo
+ r vulkandraw.VulkanRenderInfo
+ b vulkandraw.VulkanBufferInfo
+ gfx vulkandraw.VulkanGfxPipelineInfo
+ vkActive = false
)
a.HandleNativeWindowEvents(nativeWindowEvents)
@@ -65,9 +67,27 @@ func main() {
case event := <-nativeWindowEvents:
switch event.Kind {
case app.NativeWindowCreated:
- err := vk.Init()
+ err := vk.SetDefaultGetInstanceProcAddr()
+ orPanic(err)
+ err = vk.Init()
orPanic(err)
- v, err = vulkandraw.NewVulkanDevice(appInfo, event.Window.Ptr())
+
+ // differs between Android, iOS and GLFW
+ createSurface := func(instance vk.Instance) vk.Surface {
+ var surface vk.Surface
+ result := vk.CreateWindowSurface(instance, event.Window.Ptr(), nil, &surface)
+ if result == vk.Success {
+ //fmt.Println("CreateWindowSurface - Success")
+ }
+ if err := vk.Error(result); err != nil {
+ vk.DestroyInstance(instance, nil)
+ //fmt.Printf("vkCreateWindowSurface failed with %s\n", err)
+ panic(err)
+ }
+ return surface
+ }
+
+ v, err = vulkandraw.NewVulkanDevice(appInfo, vk.GetRequiredInstanceExtensions(), createSurface)
orPanic(err)
s, err = v.CreateSwapchain()
orPanic(err)
@@ -91,7 +111,7 @@ func main() {
vulkandraw.DestroyInOrder(&v, &s, &r, &b, &gfx)
case app.NativeWindowRedrawNeeded:
if vkActive {
- vulkandraw.VulkanDrawFrame(v, s, r)
+ vulkandraw.DrawFrame(v, s, r)
}
a.NativeWindowRedrawDone()
}
diff --git a/vulkandraw/vulkandraw_glfw/Makefile b/vulkandraw/vulkandraw_glfw/Makefile
index c6f851c..85bc3be 100644
--- a/vulkandraw/vulkandraw_glfw/Makefile
+++ b/vulkandraw/vulkandraw_glfw/Makefile
@@ -1,14 +1,28 @@
-GLFW_INCLUDE_DIR = "?"
-GLFW_LIB_DIR = "?"
-install:
- CGO_CFLAGS="-I$(GLFW_INCLUDE_DIR)" CGO_LDFLAGS="-L$(GLFW_LIB_DIR)" go install
+all: windows linux darwin darwin-arm
-install-pkg:
- CGO_CFLAGS="$(shell pkg-config --cflags glfw3)" CGO_LDFLAGS="$(shell pkg-config --libs glfw3)" go install
+windows:
+ GOOS=windows \
+ GOARCH=amd64 \
+ CGO_ENABLED=1 \
+ go build -ldflags="-H windowsgui"
-build:
- CGO_CFLAGS="-I$(GLFW_INCLUDE_DIR)" CGO_LDFLAGS="-L$(GLFW_LIB_DIR)" go build
+linux:
+ GOOS=linux \
+ GOARCH=amd64 \
+ CGO_ENABLED=1 \
+ go build
-build-pkg:
- CGO_CFLAGS="$(shell pkg-config --cflags glfw3)" CGO_LDFLAGS="$(shell pkg-config --libs glfw3)" go build
+darwin:
+ GOOS=darwin \
+ GOARCH=amd64 \
+ CGO_ENABLED=1 \
+ CGO_LDFLAGS="-L/usr/local/lib" \
+ go build
+
+darwin-arm:
+ GOOS=darwin \
+ GOARCH=arm64 \
+ CGO_ENABLED=1 \
+ CGO_LDFLAGS="-L/opt/homebrew/lib" \
+ go build
diff --git a/vulkandraw/vulkandraw_glfw/main.go b/vulkandraw/vulkandraw_glfw/main.go
index 4eba16c..f1ffa3f 100644
--- a/vulkandraw/vulkandraw_glfw/main.go
+++ b/vulkandraw/vulkandraw_glfw/main.go
@@ -5,18 +5,18 @@ import (
"runtime"
"time"
- "github.com/vulkan-go/demos/vulkandraw"
"github.com/go-gl/glfw/v3.3/glfw"
+ "github.com/vulkan-go/demos/vulkandraw"
vk "github.com/vulkan-go/vulkan"
"github.com/xlab/closer"
)
var appInfo = &vk.ApplicationInfo{
SType: vk.StructureTypeApplicationInfo,
- ApiVersion: vk.MakeVersion(1, 0, 0),
ApplicationVersion: vk.MakeVersion(1, 0, 0),
PApplicationName: "VulkanDraw\x00",
PEngineName: "vulkango.com\x00",
+ ApiVersion: vk.ApiVersion10,
}
func init() {
@@ -44,17 +44,17 @@ func main() {
glfw.WindowHint(glfw.ClientAPI, glfw.NoAPI)
glfw.WindowHint(glfw.Resizable, glfw.False)
- window, err := glfw.CreateWindow(640, 480, "Vulkan Info", nil, nil)
+ window, err := glfw.CreateWindow(640, 480, "Vulkan Draw", nil, nil)
orPanic(err)
- createSurface := func(instance interface{}) uintptr {
+ // differs between Android, iOS and GLFW
+ createSurface := func(instance vk.Instance) vk.Surface {
surface, err := window.CreateWindowSurface(instance, nil)
orPanic(err)
- return surface
+ return vk.SurfaceFromPointer(surface)
}
v, err = vulkandraw.NewVulkanDevice(appInfo,
- uintptr(window.Handle()),
window.GetRequiredInstanceExtensions(),
createSurface)
orPanic(err)
@@ -98,7 +98,7 @@ func main() {
}
glfw.PollEvents()
if window.GetAttrib(glfw.Iconified) != 1 {
- vulkandraw.VulkanDrawFrame(v, s, r)
+ vulkandraw.DrawFrame(v, s, r)
}
}
}
diff --git a/vulkandraw/vulkandraw_ios/main.go b/vulkandraw/vulkandraw_ios/main.go
index f41b196..e4a26e6 100644
--- a/vulkandraw/vulkandraw_ios/main.go
+++ b/vulkandraw/vulkandraw_ios/main.go
@@ -11,10 +11,10 @@ import (
var appInfo = &vk.ApplicationInfo{
SType: vk.StructureTypeApplicationInfo,
- ApiVersion: vk.MakeVersion(1, 0, 0),
ApplicationVersion: vk.MakeVersion(1, 0, 0),
PApplicationName: "VulkanDraw\x00",
PEngineName: "vulkango.com\x00",
+ ApiVersion: vk.ApiVersion10,
}
func main() {
@@ -24,13 +24,12 @@ func main() {
catcher.RecvDie(-1),
)
var (
- v vulkandraw.VulkanDeviceInfo
- s vulkandraw.VulkanSwapchainInfo
- r vulkandraw.VulkanRenderInfo
- b vulkandraw.VulkanBufferInfo
- gfx vulkandraw.VulkanGfxPipelineInfo
-
- vkActive bool
+ v vulkandraw.VulkanDeviceInfo
+ s vulkandraw.VulkanSwapchainInfo
+ r vulkandraw.VulkanRenderInfo
+ b vulkandraw.VulkanBufferInfo
+ gfx vulkandraw.VulkanGfxPipelineInfo
+ vkActive = false
)
a.InitDone()
@@ -39,9 +38,27 @@ func main() {
case event := <-a.LifecycleEvents():
switch event.Kind {
case app.ViewDidLoad:
- err := vk.Init()
+ err := vk.SetDefaultGetInstanceProcAddr()
+ orPanic(err)
+ err = vk.Init()
orPanic(err)
- v, err = vulkandraw.NewVulkanDevice(appInfo, event.View)
+
+ // differs between Android, iOS and GLFW
+ createSurface := func(instance vk.Instance) vk.Surface {
+ var surface vk.Surface
+ result := vk.CreateWindowSurface(instance, event.View, nil, &surface)
+ if result == vk.Success {
+ //fmt.Println("CreateWindowSurface - Success")
+ }
+ if err := vk.Error(result); err != nil {
+ vk.DestroyInstance(instance, nil)
+ //fmt.Printf("vkCreateWindowSurface failed with %s\n", err)
+ panic(err)
+ }
+ return surface
+ }
+
+ v, err = vulkandraw.NewVulkanDevice(appInfo, vk.GetRequiredInstanceExtensions(), createSurface)
orPanic(err)
s, err = v.CreateSwapchain()
orPanic(err)
@@ -68,7 +85,7 @@ func main() {
}
case <-a.VSync():
if vkActive {
- vulkandraw.VulkanDrawFrame(v, s, r)
+ vulkandraw.DrawFrame(v, s, r)
}
}
}
diff --git a/vulkaninfo/vulkaninfo_android/android/app/build.gradle b/vulkaninfo/vulkaninfo_android/android/app/build.gradle
index 709a8af..249bb30 100644
--- a/vulkaninfo/vulkaninfo_android/android/app/build.gradle
+++ b/vulkaninfo/vulkaninfo_android/android/app/build.gradle
@@ -11,6 +11,7 @@ android {
defaultConfig {
applicationId "org.golang.android.vulkan.info"
minSdk 26
+ //noinspection ExpiredTargetSdkVersion
targetSdk 26
versionCode 1
versionName "1.0"
diff --git a/vulkaninfo/vulkaninfo_android/main.go b/vulkaninfo/vulkaninfo_android/main.go
index 8611034..3ca1152 100644
--- a/vulkaninfo/vulkaninfo_android/main.go
+++ b/vulkaninfo/vulkaninfo_android/main.go
@@ -13,10 +13,10 @@ func init() {
var appInfo = &vk.ApplicationInfo{
SType: vk.StructureTypeApplicationInfo,
- ApiVersion: vk.MakeVersion(1, 0, 0),
ApplicationVersion: vk.MakeVersion(1, 0, 0),
PApplicationName: "VulkanInfo\x00",
PEngineName: "vulkango.com\x00",
+ ApiVersion: vk.ApiVersion10,
}
func main() {