diff --git a/android/examples/conditionalrender/CMakeLists.txt b/android/examples/conditionalrender/CMakeLists.txt
new file mode 100644
index 000000000..bafe0d160
--- /dev/null
+++ b/android/examples/conditionalrender/CMakeLists.txt
@@ -0,0 +1,35 @@
+cmake_minimum_required(VERSION 3.4.1 FATAL_ERROR)
+
+set(NAME conditionalrender)
+
+set(SRC_DIR ../../../examples/${NAME})
+set(BASE_DIR ../../../base)
+set(EXTERNAL_DIR ../../../external)
+
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 -DVK_USE_PLATFORM_ANDROID_KHR -DVK_NO_PROTOTYPES")
+
+file(GLOB EXAMPLE_SRC "${SRC_DIR}/*.cpp")
+
+add_library(native-lib SHARED ${EXAMPLE_SRC})
+
+add_library(native-app-glue STATIC ${ANDROID_NDK}/sources/android/native_app_glue/android_native_app_glue.c)
+
+add_subdirectory(../base ${CMAKE_SOURCE_DIR}/../base)
+
+set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -u ANativeActivity_onCreate")
+
+include_directories(${BASE_DIR})
+include_directories(${EXTERNAL_DIR})
+include_directories(${EXTERNAL_DIR}/glm)
+include_directories(${EXTERNAL_DIR}/imgui)
+include_directories(${EXTERNAL_DIR}/tinygltf)
+include_directories(${ANDROID_NDK}/sources/android/native_app_glue)
+
+target_link_libraries(
+ native-lib
+ native-app-glue
+ libbase
+ android
+ log
+ z
+)
diff --git a/android/examples/conditionalrender/build.gradle b/android/examples/conditionalrender/build.gradle
new file mode 100644
index 000000000..725a46f64
--- /dev/null
+++ b/android/examples/conditionalrender/build.gradle
@@ -0,0 +1,64 @@
+apply plugin: 'com.android.application'
+apply from: '../gradle/outputfilename.gradle'
+
+android {
+ compileSdkVersion rootProject.ext.compileSdkVersion
+ defaultConfig {
+ applicationId "de.saschawillems.vulkanConditionalrender"
+ minSdkVersion rootProject.ext.minSdkVersion
+ targetSdkVersion rootProject.ext.targetSdkVersion
+ versionCode 1
+ versionName "1.0"
+ ndk {
+ abiFilters rootProject.ext.abiFilters
+ }
+ externalNativeBuild {
+ cmake {
+ cppFlags "-std=c++14"
+ arguments "-DANDROID_STL=c++_shared", '-DANDROID_TOOLCHAIN=clang'
+ }
+ }
+ }
+ sourceSets {
+ main.assets.srcDirs = ['assets']
+ }
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+ }
+ }
+ externalNativeBuild {
+ cmake {
+ path "CMakeLists.txt"
+ }
+ }
+}
+
+task copyTask {
+ copy {
+ from '../../common/res/drawable'
+ into "src/main/res/drawable"
+ include 'icon.png'
+ }
+
+ copy {
+ from rootProject.ext.shaderPath + 'glsl/base'
+ into 'assets/shaders/glsl/base'
+ include '*.spv'
+ }
+
+ copy {
+ from rootProject.ext.shaderPath + 'glsl/conditionalrender'
+ into 'assets/shaders/glsl/conditionalrender'
+ include '*.*'
+ }
+
+ copy {
+ from rootProject.ext.assetPath + 'models/gltf/glTF-Embedded'
+ into 'assets/models/gltf/glTF-Embedded'
+ include 'Buggy.gltf'
+ }
+}
+
+preBuild.dependsOn copyTask
\ No newline at end of file
diff --git a/android/examples/conditionalrender/src/main/AndroidManifest.xml b/android/examples/conditionalrender/src/main/AndroidManifest.xml
new file mode 100644
index 000000000..534a1d61d
--- /dev/null
+++ b/android/examples/conditionalrender/src/main/AndroidManifest.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/android/examples/conditionalrender/src/main/java/de/saschawillems/vulkanSample/VulkanActivity.java b/android/examples/conditionalrender/src/main/java/de/saschawillems/vulkanSample/VulkanActivity.java
new file mode 100644
index 000000000..12e14fc6d
--- /dev/null
+++ b/android/examples/conditionalrender/src/main/java/de/saschawillems/vulkanSample/VulkanActivity.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2018 by Sascha Willems - www.saschawillems.de
+ *
+ * This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
+ */
+package de.saschawillems.vulkanSample;
+
+import android.app.AlertDialog;
+import android.app.NativeActivity;
+import android.content.DialogInterface;
+import android.content.pm.ApplicationInfo;
+import android.os.Bundle;
+
+import java.util.concurrent.Semaphore;
+
+public class VulkanActivity extends NativeActivity {
+
+ static {
+ // Load native library
+ System.loadLibrary("native-lib");
+ }
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ }
+
+ // Use a semaphore to create a modal dialog
+
+ private final Semaphore semaphore = new Semaphore(0, true);
+
+ public void showAlert(final String message)
+ {
+ final VulkanActivity activity = this;
+
+ ApplicationInfo applicationInfo = activity.getApplicationInfo();
+ final String applicationName = applicationInfo.nonLocalizedLabel.toString();
+
+ this.runOnUiThread(new Runnable() {
+ public void run() {
+ AlertDialog.Builder builder = new AlertDialog.Builder(activity, android.R.style.Theme_Material_Dialog_Alert);
+ builder.setTitle(applicationName);
+ builder.setMessage(message);
+ builder.setPositiveButton("Close", new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int id) {
+ semaphore.release();
+ }
+ });
+ builder.setCancelable(false);
+ AlertDialog dialog = builder.create();
+ dialog.show();
+ }
+ });
+ try {
+ semaphore.acquire();
+ }
+ catch (InterruptedException e) { }
+ }
+}
diff --git a/android/examples/debugprintf/CMakeLists.txt b/android/examples/debugprintf/CMakeLists.txt
new file mode 100644
index 000000000..1c1a3f22b
--- /dev/null
+++ b/android/examples/debugprintf/CMakeLists.txt
@@ -0,0 +1,35 @@
+cmake_minimum_required(VERSION 3.4.1 FATAL_ERROR)
+
+set(NAME debugprintf)
+
+set(SRC_DIR ../../../examples/${NAME})
+set(BASE_DIR ../../../base)
+set(EXTERNAL_DIR ../../../external)
+
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 -DVK_USE_PLATFORM_ANDROID_KHR -DVK_NO_PROTOTYPES")
+
+file(GLOB EXAMPLE_SRC "${SRC_DIR}/*.cpp")
+
+add_library(native-lib SHARED ${EXAMPLE_SRC})
+
+add_library(native-app-glue STATIC ${ANDROID_NDK}/sources/android/native_app_glue/android_native_app_glue.c)
+
+add_subdirectory(../base ${CMAKE_SOURCE_DIR}/../base)
+
+set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -u ANativeActivity_onCreate")
+
+include_directories(${BASE_DIR})
+include_directories(${EXTERNAL_DIR})
+include_directories(${EXTERNAL_DIR}/glm)
+include_directories(${EXTERNAL_DIR}/imgui)
+include_directories(${EXTERNAL_DIR}/tinygltf)
+include_directories(${ANDROID_NDK}/sources/android/native_app_glue)
+
+target_link_libraries(
+ native-lib
+ native-app-glue
+ libbase
+ android
+ log
+ z
+)
diff --git a/android/examples/debugprintf/build.gradle b/android/examples/debugprintf/build.gradle
new file mode 100644
index 000000000..9a98a61cc
--- /dev/null
+++ b/android/examples/debugprintf/build.gradle
@@ -0,0 +1,65 @@
+apply plugin: 'com.android.application'
+apply from: '../gradle/outputfilename.gradle'
+
+android {
+ compileSdkVersion rootProject.ext.compileSdkVersion
+ defaultConfig {
+ applicationId "de.saschawillems.vulkanDebugprintf"
+ minSdkVersion rootProject.ext.minSdkVersion
+ targetSdkVersion rootProject.ext.targetSdkVersion
+ versionCode 1
+ versionName "1.0"
+ ndk {
+ abiFilters rootProject.ext.abiFilters
+ }
+ externalNativeBuild {
+ cmake {
+ cppFlags "-std=c++14"
+ arguments "-DANDROID_STL=c++_shared", '-DANDROID_TOOLCHAIN=clang'
+ }
+ }
+ }
+ sourceSets {
+ main.assets.srcDirs = ['assets']
+ }
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+ }
+ }
+ externalNativeBuild {
+ cmake {
+ path "CMakeLists.txt"
+ }
+ }
+}
+
+task copyTask {
+ copy {
+ from '../../common/res/drawable'
+ into "src/main/res/drawable"
+ include 'icon.png'
+ }
+
+ copy {
+ from rootProject.ext.shaderPath + 'glsl/base'
+ into 'assets/shaders/glsl/base'
+ include '*.spv'
+ }
+
+ copy {
+ from rootProject.ext.shaderPath + 'glsl/debugprintf'
+ into 'assets/shaders/glsl/debugprintf'
+ include '*.*'
+ }
+
+ copy {
+ from rootProject.ext.assetPath + 'models'
+ into 'assets/models'
+ include 'treasure_smooth.gltf'
+ }
+
+}
+
+preBuild.dependsOn copyTask
\ No newline at end of file
diff --git a/android/examples/debugprintf/src/main/AndroidManifest.xml b/android/examples/debugprintf/src/main/AndroidManifest.xml
new file mode 100644
index 000000000..c86a3ed45
--- /dev/null
+++ b/android/examples/debugprintf/src/main/AndroidManifest.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/android/examples/debugprintf/src/main/java/de/saschawillems/vulkanSample/VulkanActivity.java b/android/examples/debugprintf/src/main/java/de/saschawillems/vulkanSample/VulkanActivity.java
new file mode 100644
index 000000000..12e14fc6d
--- /dev/null
+++ b/android/examples/debugprintf/src/main/java/de/saschawillems/vulkanSample/VulkanActivity.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2018 by Sascha Willems - www.saschawillems.de
+ *
+ * This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
+ */
+package de.saschawillems.vulkanSample;
+
+import android.app.AlertDialog;
+import android.app.NativeActivity;
+import android.content.DialogInterface;
+import android.content.pm.ApplicationInfo;
+import android.os.Bundle;
+
+import java.util.concurrent.Semaphore;
+
+public class VulkanActivity extends NativeActivity {
+
+ static {
+ // Load native library
+ System.loadLibrary("native-lib");
+ }
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ }
+
+ // Use a semaphore to create a modal dialog
+
+ private final Semaphore semaphore = new Semaphore(0, true);
+
+ public void showAlert(final String message)
+ {
+ final VulkanActivity activity = this;
+
+ ApplicationInfo applicationInfo = activity.getApplicationInfo();
+ final String applicationName = applicationInfo.nonLocalizedLabel.toString();
+
+ this.runOnUiThread(new Runnable() {
+ public void run() {
+ AlertDialog.Builder builder = new AlertDialog.Builder(activity, android.R.style.Theme_Material_Dialog_Alert);
+ builder.setTitle(applicationName);
+ builder.setMessage(message);
+ builder.setPositiveButton("Close", new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int id) {
+ semaphore.release();
+ }
+ });
+ builder.setCancelable(false);
+ AlertDialog dialog = builder.create();
+ dialog.show();
+ }
+ });
+ try {
+ semaphore.acquire();
+ }
+ catch (InterruptedException e) { }
+ }
+}
diff --git a/android/examples/descriptorbuffer/CMakeLists.txt b/android/examples/descriptorbuffer/CMakeLists.txt
new file mode 100644
index 000000000..da2ff0495
--- /dev/null
+++ b/android/examples/descriptorbuffer/CMakeLists.txt
@@ -0,0 +1,35 @@
+cmake_minimum_required(VERSION 3.4.1 FATAL_ERROR)
+
+set(NAME descriptorbuffer)
+
+set(SRC_DIR ../../../examples/${NAME})
+set(BASE_DIR ../../../base)
+set(EXTERNAL_DIR ../../../external)
+
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 -DVK_USE_PLATFORM_ANDROID_KHR -DVK_NO_PROTOTYPES")
+
+file(GLOB EXAMPLE_SRC "${SRC_DIR}/*.cpp")
+
+add_library(native-lib SHARED ${EXAMPLE_SRC})
+
+add_library(native-app-glue STATIC ${ANDROID_NDK}/sources/android/native_app_glue/android_native_app_glue.c)
+
+add_subdirectory(../base ${CMAKE_SOURCE_DIR}/../base)
+
+set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -u ANativeActivity_onCreate")
+
+include_directories(${BASE_DIR})
+include_directories(${EXTERNAL_DIR})
+include_directories(${EXTERNAL_DIR}/glm)
+include_directories(${EXTERNAL_DIR}/imgui)
+include_directories(${EXTERNAL_DIR}/tinygltf)
+include_directories(${ANDROID_NDK}/sources/android/native_app_glue)
+
+target_link_libraries(
+ native-lib
+ native-app-glue
+ libbase
+ android
+ log
+ z
+)
diff --git a/android/examples/descriptorbuffer/build.gradle b/android/examples/descriptorbuffer/build.gradle
new file mode 100644
index 000000000..54ae5720a
--- /dev/null
+++ b/android/examples/descriptorbuffer/build.gradle
@@ -0,0 +1,72 @@
+apply plugin: 'com.android.application'
+apply from: '../gradle/outputfilename.gradle'
+
+android {
+ compileSdkVersion rootProject.ext.compileSdkVersion
+ defaultConfig {
+ applicationId "de.saschawillems.vulkanDescriptorbuffer"
+ minSdkVersion rootProject.ext.minSdkVersion
+ targetSdkVersion rootProject.ext.targetSdkVersion
+ versionCode 1
+ versionName "1.0"
+ ndk {
+ abiFilters rootProject.ext.abiFilters
+ }
+ externalNativeBuild {
+ cmake {
+ cppFlags "-std=c++14"
+ arguments "-DANDROID_STL=c++_shared", '-DANDROID_TOOLCHAIN=clang'
+ }
+ }
+ }
+ sourceSets {
+ main.assets.srcDirs = ['assets']
+ }
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+ }
+ }
+ externalNativeBuild {
+ cmake {
+ path "CMakeLists.txt"
+ }
+ }
+}
+
+task copyTask {
+ copy {
+ from '../../common/res/drawable'
+ into "src/main/res/drawable"
+ include 'icon.png'
+ }
+
+ copy {
+ from rootProject.ext.shaderPath + 'glsl/base'
+ into 'assets/shaders/glsl/base'
+ include '*.spv'
+ }
+
+ copy {
+ from rootProject.ext.shaderPath + 'glsl/descriptorbuffer'
+ into 'assets/shaders/glsl/descriptorbuffer'
+ include '*.*'
+ }
+
+ copy {
+ from rootProject.ext.assetPath + 'models'
+ into 'assets/models'
+ include 'cube.gltf'
+ }
+
+ copy {
+ from rootProject.ext.assetPath + 'textures'
+ into 'assets/textures'
+ include 'crate01_color_height_rgba.gltf'
+ include 'crate02_color_height_rgba.gltf'
+ }
+
+}
+
+preBuild.dependsOn copyTask
\ No newline at end of file
diff --git a/android/examples/descriptorbuffer/src/main/AndroidManifest.xml b/android/examples/descriptorbuffer/src/main/AndroidManifest.xml
new file mode 100644
index 000000000..3699e36b8
--- /dev/null
+++ b/android/examples/descriptorbuffer/src/main/AndroidManifest.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/android/examples/descriptorbuffer/src/main/java/de/saschawillems/vulkanSample/VulkanActivity.java b/android/examples/descriptorbuffer/src/main/java/de/saschawillems/vulkanSample/VulkanActivity.java
new file mode 100644
index 000000000..12e14fc6d
--- /dev/null
+++ b/android/examples/descriptorbuffer/src/main/java/de/saschawillems/vulkanSample/VulkanActivity.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2018 by Sascha Willems - www.saschawillems.de
+ *
+ * This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
+ */
+package de.saschawillems.vulkanSample;
+
+import android.app.AlertDialog;
+import android.app.NativeActivity;
+import android.content.DialogInterface;
+import android.content.pm.ApplicationInfo;
+import android.os.Bundle;
+
+import java.util.concurrent.Semaphore;
+
+public class VulkanActivity extends NativeActivity {
+
+ static {
+ // Load native library
+ System.loadLibrary("native-lib");
+ }
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ }
+
+ // Use a semaphore to create a modal dialog
+
+ private final Semaphore semaphore = new Semaphore(0, true);
+
+ public void showAlert(final String message)
+ {
+ final VulkanActivity activity = this;
+
+ ApplicationInfo applicationInfo = activity.getApplicationInfo();
+ final String applicationName = applicationInfo.nonLocalizedLabel.toString();
+
+ this.runOnUiThread(new Runnable() {
+ public void run() {
+ AlertDialog.Builder builder = new AlertDialog.Builder(activity, android.R.style.Theme_Material_Dialog_Alert);
+ builder.setTitle(applicationName);
+ builder.setMessage(message);
+ builder.setPositiveButton("Close", new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int id) {
+ semaphore.release();
+ }
+ });
+ builder.setCancelable(false);
+ AlertDialog dialog = builder.create();
+ dialog.show();
+ }
+ });
+ try {
+ semaphore.acquire();
+ }
+ catch (InterruptedException e) { }
+ }
+}
diff --git a/android/examples/dynamicrendering/CMakeLists.txt b/android/examples/dynamicrendering/CMakeLists.txt
new file mode 100644
index 000000000..46bef3bc3
--- /dev/null
+++ b/android/examples/dynamicrendering/CMakeLists.txt
@@ -0,0 +1,35 @@
+cmake_minimum_required(VERSION 3.4.1 FATAL_ERROR)
+
+set(NAME dynamicrendering)
+
+set(SRC_DIR ../../../examples/${NAME})
+set(BASE_DIR ../../../base)
+set(EXTERNAL_DIR ../../../external)
+
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 -DVK_USE_PLATFORM_ANDROID_KHR -DVK_NO_PROTOTYPES")
+
+file(GLOB EXAMPLE_SRC "${SRC_DIR}/*.cpp")
+
+add_library(native-lib SHARED ${EXAMPLE_SRC})
+
+add_library(native-app-glue STATIC ${ANDROID_NDK}/sources/android/native_app_glue/android_native_app_glue.c)
+
+add_subdirectory(../base ${CMAKE_SOURCE_DIR}/../base)
+
+set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -u ANativeActivity_onCreate")
+
+include_directories(${BASE_DIR})
+include_directories(${EXTERNAL_DIR})
+include_directories(${EXTERNAL_DIR}/glm)
+include_directories(${EXTERNAL_DIR}/imgui)
+include_directories(${EXTERNAL_DIR}/tinygltf)
+include_directories(${ANDROID_NDK}/sources/android/native_app_glue)
+
+target_link_libraries(
+ native-lib
+ native-app-glue
+ libbase
+ android
+ log
+ z
+)
diff --git a/android/examples/dynamicrendering/build.gradle b/android/examples/dynamicrendering/build.gradle
new file mode 100644
index 000000000..70825b840
--- /dev/null
+++ b/android/examples/dynamicrendering/build.gradle
@@ -0,0 +1,65 @@
+apply plugin: 'com.android.application'
+apply from: '../gradle/outputfilename.gradle'
+
+android {
+ compileSdkVersion rootProject.ext.compileSdkVersion
+ defaultConfig {
+ applicationId "de.saschawillems.vulkanDynamicrendering"
+ minSdkVersion rootProject.ext.minSdkVersion
+ targetSdkVersion rootProject.ext.targetSdkVersion
+ versionCode 1
+ versionName "1.0"
+ ndk {
+ abiFilters rootProject.ext.abiFilters
+ }
+ externalNativeBuild {
+ cmake {
+ cppFlags "-std=c++14"
+ arguments "-DANDROID_STL=c++_shared", '-DANDROID_TOOLCHAIN=clang'
+ }
+ }
+ }
+ sourceSets {
+ main.assets.srcDirs = ['assets']
+ }
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+ }
+ }
+ externalNativeBuild {
+ cmake {
+ path "CMakeLists.txt"
+ }
+ }
+}
+
+task copyTask {
+ copy {
+ from '../../common/res/drawable'
+ into "src/main/res/drawable"
+ include 'icon.png'
+ }
+
+ copy {
+ from rootProject.ext.shaderPath + 'glsl/base'
+ into 'assets/shaders/glsl/base'
+ include '*.spv'
+ }
+
+ copy {
+ from rootProject.ext.shaderPath + 'glsl/dynamicrendering'
+ into 'assets/shaders/glsl/dynamicrendering'
+ include '*.*'
+ }
+
+ copy {
+ from rootProject.ext.assetPath + 'models'
+ into 'assets/models'
+ include 'voyager.gltf'
+ }
+
+}
+
+preBuild.dependsOn copyTask
\ No newline at end of file
diff --git a/android/examples/dynamicrendering/src/main/AndroidManifest.xml b/android/examples/dynamicrendering/src/main/AndroidManifest.xml
new file mode 100644
index 000000000..4b572079c
--- /dev/null
+++ b/android/examples/dynamicrendering/src/main/AndroidManifest.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/android/examples/dynamicrendering/src/main/java/de/saschawillems/vulkanSample/VulkanActivity.java b/android/examples/dynamicrendering/src/main/java/de/saschawillems/vulkanSample/VulkanActivity.java
new file mode 100644
index 000000000..12e14fc6d
--- /dev/null
+++ b/android/examples/dynamicrendering/src/main/java/de/saschawillems/vulkanSample/VulkanActivity.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2018 by Sascha Willems - www.saschawillems.de
+ *
+ * This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
+ */
+package de.saschawillems.vulkanSample;
+
+import android.app.AlertDialog;
+import android.app.NativeActivity;
+import android.content.DialogInterface;
+import android.content.pm.ApplicationInfo;
+import android.os.Bundle;
+
+import java.util.concurrent.Semaphore;
+
+public class VulkanActivity extends NativeActivity {
+
+ static {
+ // Load native library
+ System.loadLibrary("native-lib");
+ }
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ }
+
+ // Use a semaphore to create a modal dialog
+
+ private final Semaphore semaphore = new Semaphore(0, true);
+
+ public void showAlert(final String message)
+ {
+ final VulkanActivity activity = this;
+
+ ApplicationInfo applicationInfo = activity.getApplicationInfo();
+ final String applicationName = applicationInfo.nonLocalizedLabel.toString();
+
+ this.runOnUiThread(new Runnable() {
+ public void run() {
+ AlertDialog.Builder builder = new AlertDialog.Builder(activity, android.R.style.Theme_Material_Dialog_Alert);
+ builder.setTitle(applicationName);
+ builder.setMessage(message);
+ builder.setPositiveButton("Close", new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int id) {
+ semaphore.release();
+ }
+ });
+ builder.setCancelable(false);
+ AlertDialog dialog = builder.create();
+ dialog.show();
+ }
+ });
+ try {
+ semaphore.acquire();
+ }
+ catch (InterruptedException e) { }
+ }
+}
diff --git a/android/examples/dynamicstate/CMakeLists.txt b/android/examples/dynamicstate/CMakeLists.txt
new file mode 100644
index 000000000..e688103b2
--- /dev/null
+++ b/android/examples/dynamicstate/CMakeLists.txt
@@ -0,0 +1,35 @@
+cmake_minimum_required(VERSION 3.4.1 FATAL_ERROR)
+
+set(NAME dynamicstate)
+
+set(SRC_DIR ../../../examples/${NAME})
+set(BASE_DIR ../../../base)
+set(EXTERNAL_DIR ../../../external)
+
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 -DVK_USE_PLATFORM_ANDROID_KHR -DVK_NO_PROTOTYPES")
+
+file(GLOB EXAMPLE_SRC "${SRC_DIR}/*.cpp")
+
+add_library(native-lib SHARED ${EXAMPLE_SRC})
+
+add_library(native-app-glue STATIC ${ANDROID_NDK}/sources/android/native_app_glue/android_native_app_glue.c)
+
+add_subdirectory(../base ${CMAKE_SOURCE_DIR}/../base)
+
+set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -u ANativeActivity_onCreate")
+
+include_directories(${BASE_DIR})
+include_directories(${EXTERNAL_DIR})
+include_directories(${EXTERNAL_DIR}/glm)
+include_directories(${EXTERNAL_DIR}/imgui)
+include_directories(${EXTERNAL_DIR}/tinygltf)
+include_directories(${ANDROID_NDK}/sources/android/native_app_glue)
+
+target_link_libraries(
+ native-lib
+ native-app-glue
+ libbase
+ android
+ log
+ z
+)
diff --git a/android/examples/dynamicstate/build.gradle b/android/examples/dynamicstate/build.gradle
new file mode 100644
index 000000000..eef78dc5b
--- /dev/null
+++ b/android/examples/dynamicstate/build.gradle
@@ -0,0 +1,65 @@
+apply plugin: 'com.android.application'
+apply from: '../gradle/outputfilename.gradle'
+
+android {
+ compileSdkVersion rootProject.ext.compileSdkVersion
+ defaultConfig {
+ applicationId "de.saschawillems.vulkanDynamicstate"
+ minSdkVersion rootProject.ext.minSdkVersion
+ targetSdkVersion rootProject.ext.targetSdkVersion
+ versionCode 1
+ versionName "1.0"
+ ndk {
+ abiFilters rootProject.ext.abiFilters
+ }
+ externalNativeBuild {
+ cmake {
+ cppFlags "-std=c++14"
+ arguments "-DANDROID_STL=c++_shared", '-DANDROID_TOOLCHAIN=clang'
+ }
+ }
+ }
+ sourceSets {
+ main.assets.srcDirs = ['assets']
+ }
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+ }
+ }
+ externalNativeBuild {
+ cmake {
+ path "CMakeLists.txt"
+ }
+ }
+}
+
+task copyTask {
+ copy {
+ from '../../common/res/drawable'
+ into "src/main/res/drawable"
+ include 'icon.png'
+ }
+
+ copy {
+ from rootProject.ext.shaderPath + 'glsl/base'
+ into 'assets/shaders/glsl/base'
+ include '*.spv'
+ }
+
+ copy {
+ from rootProject.ext.shaderPath + 'glsl/pipelines'
+ into 'assets/shaders/glsl/pipelines'
+ include '*.*'
+ }
+
+ copy {
+ from rootProject.ext.assetPath + 'models'
+ into 'assets/models'
+ include 'treasure_smooth.gltf'
+ }
+
+}
+
+preBuild.dependsOn copyTask
\ No newline at end of file
diff --git a/android/examples/dynamicstate/src/main/AndroidManifest.xml b/android/examples/dynamicstate/src/main/AndroidManifest.xml
new file mode 100644
index 000000000..7579dc3b2
--- /dev/null
+++ b/android/examples/dynamicstate/src/main/AndroidManifest.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/android/examples/dynamicstate/src/main/java/de/saschawillems/vulkanSample/VulkanActivity.java b/android/examples/dynamicstate/src/main/java/de/saschawillems/vulkanSample/VulkanActivity.java
new file mode 100644
index 000000000..12e14fc6d
--- /dev/null
+++ b/android/examples/dynamicstate/src/main/java/de/saschawillems/vulkanSample/VulkanActivity.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2018 by Sascha Willems - www.saschawillems.de
+ *
+ * This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
+ */
+package de.saschawillems.vulkanSample;
+
+import android.app.AlertDialog;
+import android.app.NativeActivity;
+import android.content.DialogInterface;
+import android.content.pm.ApplicationInfo;
+import android.os.Bundle;
+
+import java.util.concurrent.Semaphore;
+
+public class VulkanActivity extends NativeActivity {
+
+ static {
+ // Load native library
+ System.loadLibrary("native-lib");
+ }
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ }
+
+ // Use a semaphore to create a modal dialog
+
+ private final Semaphore semaphore = new Semaphore(0, true);
+
+ public void showAlert(final String message)
+ {
+ final VulkanActivity activity = this;
+
+ ApplicationInfo applicationInfo = activity.getApplicationInfo();
+ final String applicationName = applicationInfo.nonLocalizedLabel.toString();
+
+ this.runOnUiThread(new Runnable() {
+ public void run() {
+ AlertDialog.Builder builder = new AlertDialog.Builder(activity, android.R.style.Theme_Material_Dialog_Alert);
+ builder.setTitle(applicationName);
+ builder.setMessage(message);
+ builder.setPositiveButton("Close", new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int id) {
+ semaphore.release();
+ }
+ });
+ builder.setCancelable(false);
+ AlertDialog dialog = builder.create();
+ dialog.show();
+ }
+ });
+ try {
+ semaphore.acquire();
+ }
+ catch (InterruptedException e) { }
+ }
+}
diff --git a/android/examples/graphicspipelinelibrary/CMakeLists.txt b/android/examples/graphicspipelinelibrary/CMakeLists.txt
new file mode 100644
index 000000000..9aeabef77
--- /dev/null
+++ b/android/examples/graphicspipelinelibrary/CMakeLists.txt
@@ -0,0 +1,35 @@
+cmake_minimum_required(VERSION 3.4.1 FATAL_ERROR)
+
+set(NAME graphicspipelinelibrary)
+
+set(SRC_DIR ../../../examples/${NAME})
+set(BASE_DIR ../../../base)
+set(EXTERNAL_DIR ../../../external)
+
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 -DVK_USE_PLATFORM_ANDROID_KHR -DVK_NO_PROTOTYPES")
+
+file(GLOB EXAMPLE_SRC "${SRC_DIR}/*.cpp")
+
+add_library(native-lib SHARED ${EXAMPLE_SRC})
+
+add_library(native-app-glue STATIC ${ANDROID_NDK}/sources/android/native_app_glue/android_native_app_glue.c)
+
+add_subdirectory(../base ${CMAKE_SOURCE_DIR}/../base)
+
+set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -u ANativeActivity_onCreate")
+
+include_directories(${BASE_DIR})
+include_directories(${EXTERNAL_DIR})
+include_directories(${EXTERNAL_DIR}/glm)
+include_directories(${EXTERNAL_DIR}/imgui)
+include_directories(${EXTERNAL_DIR}/tinygltf)
+include_directories(${ANDROID_NDK}/sources/android/native_app_glue)
+
+target_link_libraries(
+ native-lib
+ native-app-glue
+ libbase
+ android
+ log
+ z
+)
diff --git a/android/examples/graphicspipelinelibrary/build.gradle b/android/examples/graphicspipelinelibrary/build.gradle
new file mode 100644
index 000000000..71c17e817
--- /dev/null
+++ b/android/examples/graphicspipelinelibrary/build.gradle
@@ -0,0 +1,65 @@
+apply plugin: 'com.android.application'
+apply from: '../gradle/outputfilename.gradle'
+
+android {
+ compileSdkVersion rootProject.ext.compileSdkVersion
+ defaultConfig {
+ applicationId "de.saschawillems.vulkanGraphicspipelinelibrary"
+ minSdkVersion rootProject.ext.minSdkVersion
+ targetSdkVersion rootProject.ext.targetSdkVersion
+ versionCode 1
+ versionName "1.0"
+ ndk {
+ abiFilters rootProject.ext.abiFilters
+ }
+ externalNativeBuild {
+ cmake {
+ cppFlags "-std=c++14"
+ arguments "-DANDROID_STL=c++_shared", '-DANDROID_TOOLCHAIN=clang'
+ }
+ }
+ }
+ sourceSets {
+ main.assets.srcDirs = ['assets']
+ }
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+ }
+ }
+ externalNativeBuild {
+ cmake {
+ path "CMakeLists.txt"
+ }
+ }
+}
+
+task copyTask {
+ copy {
+ from '../../common/res/drawable'
+ into "src/main/res/drawable"
+ include 'icon.png'
+ }
+
+ copy {
+ from rootProject.ext.shaderPath + 'glsl/base'
+ into 'assets/shaders/glsl/base'
+ include '*.spv'
+ }
+
+ copy {
+ from rootProject.ext.shaderPath + 'glsl/graphicspipelinelibrary'
+ into 'assets/shaders/glsl/graphicspipelinelibrary'
+ include '*.*'
+ }
+
+ copy {
+ from rootProject.ext.assetPath + 'models'
+ into 'assets/models'
+ include 'color_teapot_spheres.gltf'
+ }
+
+}
+
+preBuild.dependsOn copyTask
\ No newline at end of file
diff --git a/android/examples/graphicspipelinelibrary/src/main/AndroidManifest.xml b/android/examples/graphicspipelinelibrary/src/main/AndroidManifest.xml
new file mode 100644
index 000000000..55071d602
--- /dev/null
+++ b/android/examples/graphicspipelinelibrary/src/main/AndroidManifest.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/android/examples/graphicspipelinelibrary/src/main/java/de/saschawillems/vulkanSample/VulkanActivity.java b/android/examples/graphicspipelinelibrary/src/main/java/de/saschawillems/vulkanSample/VulkanActivity.java
new file mode 100644
index 000000000..12e14fc6d
--- /dev/null
+++ b/android/examples/graphicspipelinelibrary/src/main/java/de/saschawillems/vulkanSample/VulkanActivity.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2018 by Sascha Willems - www.saschawillems.de
+ *
+ * This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
+ */
+package de.saschawillems.vulkanSample;
+
+import android.app.AlertDialog;
+import android.app.NativeActivity;
+import android.content.DialogInterface;
+import android.content.pm.ApplicationInfo;
+import android.os.Bundle;
+
+import java.util.concurrent.Semaphore;
+
+public class VulkanActivity extends NativeActivity {
+
+ static {
+ // Load native library
+ System.loadLibrary("native-lib");
+ }
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ }
+
+ // Use a semaphore to create a modal dialog
+
+ private final Semaphore semaphore = new Semaphore(0, true);
+
+ public void showAlert(final String message)
+ {
+ final VulkanActivity activity = this;
+
+ ApplicationInfo applicationInfo = activity.getApplicationInfo();
+ final String applicationName = applicationInfo.nonLocalizedLabel.toString();
+
+ this.runOnUiThread(new Runnable() {
+ public void run() {
+ AlertDialog.Builder builder = new AlertDialog.Builder(activity, android.R.style.Theme_Material_Dialog_Alert);
+ builder.setTitle(applicationName);
+ builder.setMessage(message);
+ builder.setPositiveButton("Close", new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int id) {
+ semaphore.release();
+ }
+ });
+ builder.setCancelable(false);
+ AlertDialog dialog = builder.create();
+ dialog.show();
+ }
+ });
+ try {
+ semaphore.acquire();
+ }
+ catch (InterruptedException e) { }
+ }
+}
diff --git a/android/examples/hostimagecopy/CMakeLists.txt b/android/examples/hostimagecopy/CMakeLists.txt
index 1b87a99ce..d6cdb0d8e 100644
--- a/android/examples/hostimagecopy/CMakeLists.txt
+++ b/android/examples/hostimagecopy/CMakeLists.txt
@@ -22,6 +22,7 @@ include_directories(${BASE_DIR})
include_directories(${EXTERNAL_DIR})
include_directories(${EXTERNAL_DIR}/glm)
include_directories(${EXTERNAL_DIR}/imgui)
+include_directories(${EXTERNAL_DIR}/tinygltf)
include_directories(${ANDROID_NDK}/sources/android/native_app_glue)
target_link_libraries(
diff --git a/android/examples/meshshader/CMakeLists.txt b/android/examples/meshshader/CMakeLists.txt
new file mode 100644
index 000000000..01bc8a7f2
--- /dev/null
+++ b/android/examples/meshshader/CMakeLists.txt
@@ -0,0 +1,34 @@
+cmake_minimum_required(VERSION 3.4.1 FATAL_ERROR)
+
+set(NAME meshshader)
+
+set(SRC_DIR ../../../examples/${NAME})
+set(BASE_DIR ../../../base)
+set(EXTERNAL_DIR ../../../external)
+
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 -DVK_USE_PLATFORM_ANDROID_KHR -DVK_NO_PROTOTYPES")
+
+file(GLOB EXAMPLE_SRC "${SRC_DIR}/*.cpp")
+
+add_library(native-lib SHARED ${EXAMPLE_SRC})
+
+add_library(native-app-glue STATIC ${ANDROID_NDK}/sources/android/native_app_glue/android_native_app_glue.c)
+
+add_subdirectory(../base ${CMAKE_SOURCE_DIR}/../base)
+
+set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -u ANativeActivity_onCreate")
+
+include_directories(${BASE_DIR})
+include_directories(${EXTERNAL_DIR})
+include_directories(${EXTERNAL_DIR}/glm)
+include_directories(${EXTERNAL_DIR}/imgui)
+include_directories(${ANDROID_NDK}/sources/android/native_app_glue)
+
+target_link_libraries(
+ native-lib
+ native-app-glue
+ libbase
+ android
+ log
+ z
+)
diff --git a/android/examples/meshshader/build.gradle b/android/examples/meshshader/build.gradle
new file mode 100644
index 000000000..81e112cd7
--- /dev/null
+++ b/android/examples/meshshader/build.gradle
@@ -0,0 +1,59 @@
+apply plugin: 'com.android.application'
+apply from: '../gradle/outputfilename.gradle'
+
+android {
+ compileSdkVersion rootProject.ext.compileSdkVersion
+ defaultConfig {
+ applicationId "de.saschawillems.vulkanMeshshader"
+ minSdkVersion rootProject.ext.minSdkVersion
+ targetSdkVersion rootProject.ext.targetSdkVersion
+ versionCode 1
+ versionName "1.0"
+ ndk {
+ abiFilters rootProject.ext.abiFilters
+ }
+ externalNativeBuild {
+ cmake {
+ cppFlags "-std=c++14"
+ arguments "-DANDROID_STL=c++_shared", '-DANDROID_TOOLCHAIN=clang'
+ }
+ }
+ }
+ sourceSets {
+ main.assets.srcDirs = ['assets']
+ }
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+ }
+ }
+ externalNativeBuild {
+ cmake {
+ path "CMakeLists.txt"
+ }
+ }
+}
+
+task copyTask {
+ copy {
+ from '../../common/res/drawable'
+ into "src/main/res/drawable"
+ include 'icon.png'
+ }
+
+ copy {
+ from rootProject.ext.shaderPath + 'glsl/base'
+ into 'assets/shaders/glsl/base'
+ include '*.spv'
+ }
+
+ copy {
+ from rootProject.ext.shaderPath + 'glsl/meshshader'
+ into 'assets/shaders/glsl/meshshader'
+ include '*.*'
+ }
+
+}
+
+preBuild.dependsOn copyTask
\ No newline at end of file
diff --git a/android/examples/meshshader/src/main/AndroidManifest.xml b/android/examples/meshshader/src/main/AndroidManifest.xml
new file mode 100644
index 000000000..2153870f4
--- /dev/null
+++ b/android/examples/meshshader/src/main/AndroidManifest.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/android/examples/meshshader/src/main/java/de/saschawillems/vulkanSample/VulkanActivity.java b/android/examples/meshshader/src/main/java/de/saschawillems/vulkanSample/VulkanActivity.java
new file mode 100644
index 000000000..12e14fc6d
--- /dev/null
+++ b/android/examples/meshshader/src/main/java/de/saschawillems/vulkanSample/VulkanActivity.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2018 by Sascha Willems - www.saschawillems.de
+ *
+ * This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
+ */
+package de.saschawillems.vulkanSample;
+
+import android.app.AlertDialog;
+import android.app.NativeActivity;
+import android.content.DialogInterface;
+import android.content.pm.ApplicationInfo;
+import android.os.Bundle;
+
+import java.util.concurrent.Semaphore;
+
+public class VulkanActivity extends NativeActivity {
+
+ static {
+ // Load native library
+ System.loadLibrary("native-lib");
+ }
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ }
+
+ // Use a semaphore to create a modal dialog
+
+ private final Semaphore semaphore = new Semaphore(0, true);
+
+ public void showAlert(final String message)
+ {
+ final VulkanActivity activity = this;
+
+ ApplicationInfo applicationInfo = activity.getApplicationInfo();
+ final String applicationName = applicationInfo.nonLocalizedLabel.toString();
+
+ this.runOnUiThread(new Runnable() {
+ public void run() {
+ AlertDialog.Builder builder = new AlertDialog.Builder(activity, android.R.style.Theme_Material_Dialog_Alert);
+ builder.setTitle(applicationName);
+ builder.setMessage(message);
+ builder.setPositiveButton("Close", new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int id) {
+ semaphore.release();
+ }
+ });
+ builder.setCancelable(false);
+ AlertDialog dialog = builder.create();
+ dialog.show();
+ }
+ });
+ try {
+ semaphore.acquire();
+ }
+ catch (InterruptedException e) { }
+ }
+}
diff --git a/android/examples/raytracingcallable/CMakeLists.txt b/android/examples/raytracingcallable/CMakeLists.txt
new file mode 100644
index 000000000..603ac631d
--- /dev/null
+++ b/android/examples/raytracingcallable/CMakeLists.txt
@@ -0,0 +1,34 @@
+cmake_minimum_required(VERSION 3.4.1 FATAL_ERROR)
+
+set(NAME raytracingcallable)
+
+set(SRC_DIR ../../../examples/${NAME})
+set(BASE_DIR ../../../base)
+set(EXTERNAL_DIR ../../../external)
+
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 -DVK_USE_PLATFORM_ANDROID_KHR -DVK_NO_PROTOTYPES")
+
+file(GLOB EXAMPLE_SRC "${SRC_DIR}/*.cpp")
+
+add_library(native-lib SHARED ${EXAMPLE_SRC})
+
+add_library(native-app-glue STATIC ${ANDROID_NDK}/sources/android/native_app_glue/android_native_app_glue.c)
+
+add_subdirectory(../base ${CMAKE_SOURCE_DIR}/../base)
+
+set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -u ANativeActivity_onCreate")
+
+include_directories(${BASE_DIR})
+include_directories(${EXTERNAL_DIR})
+include_directories(${EXTERNAL_DIR}/glm)
+include_directories(${EXTERNAL_DIR}/imgui)
+include_directories(${ANDROID_NDK}/sources/android/native_app_glue)
+
+target_link_libraries(
+ native-lib
+ native-app-glue
+ libbase
+ android
+ log
+ z
+)
diff --git a/android/examples/raytracingcallable/build.gradle b/android/examples/raytracingcallable/build.gradle
new file mode 100644
index 000000000..ce9a314ee
--- /dev/null
+++ b/android/examples/raytracingcallable/build.gradle
@@ -0,0 +1,59 @@
+apply plugin: 'com.android.application'
+apply from: '../gradle/outputfilename.gradle'
+
+android {
+ compileSdkVersion rootProject.ext.compileSdkVersion
+ defaultConfig {
+ applicationId "de.saschawillems.vulkanRaytracingcallable"
+ minSdkVersion rootProject.ext.minSdkVersion
+ targetSdkVersion rootProject.ext.targetSdkVersion
+ versionCode 1
+ versionName "1.0"
+ ndk {
+ abiFilters rootProject.ext.abiFilters
+ }
+ externalNativeBuild {
+ cmake {
+ cppFlags "-std=c++14"
+ arguments "-DANDROID_STL=c++_shared", '-DANDROID_TOOLCHAIN=clang'
+ }
+ }
+ }
+ sourceSets {
+ main.assets.srcDirs = ['assets']
+ }
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+ }
+ }
+ externalNativeBuild {
+ cmake {
+ path "CMakeLists.txt"
+ }
+ }
+}
+
+task copyTask {
+ copy {
+ from '../../common/res/drawable'
+ into "src/main/res/drawable"
+ include 'icon.png'
+ }
+
+ copy {
+ from rootProject.ext.shaderPath + 'glsl/base'
+ into 'assets/shaders/glsl/base'
+ include '*.spv'
+ }
+
+ copy {
+ from rootProject.ext.shaderPath + 'glsl/raytracingcallable'
+ into 'assets/shaders/glsl/raytracingcallable'
+ include '*.*'
+ }
+
+}
+
+preBuild.dependsOn copyTask
\ No newline at end of file
diff --git a/android/examples/raytracingcallable/src/main/AndroidManifest.xml b/android/examples/raytracingcallable/src/main/AndroidManifest.xml
new file mode 100644
index 000000000..02ff5009b
--- /dev/null
+++ b/android/examples/raytracingcallable/src/main/AndroidManifest.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/android/examples/raytracingcallable/src/main/java/de/saschawillems/vulkanSample/VulkanActivity.java b/android/examples/raytracingcallable/src/main/java/de/saschawillems/vulkanSample/VulkanActivity.java
new file mode 100644
index 000000000..12e14fc6d
--- /dev/null
+++ b/android/examples/raytracingcallable/src/main/java/de/saschawillems/vulkanSample/VulkanActivity.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2018 by Sascha Willems - www.saschawillems.de
+ *
+ * This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
+ */
+package de.saschawillems.vulkanSample;
+
+import android.app.AlertDialog;
+import android.app.NativeActivity;
+import android.content.DialogInterface;
+import android.content.pm.ApplicationInfo;
+import android.os.Bundle;
+
+import java.util.concurrent.Semaphore;
+
+public class VulkanActivity extends NativeActivity {
+
+ static {
+ // Load native library
+ System.loadLibrary("native-lib");
+ }
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ }
+
+ // Use a semaphore to create a modal dialog
+
+ private final Semaphore semaphore = new Semaphore(0, true);
+
+ public void showAlert(final String message)
+ {
+ final VulkanActivity activity = this;
+
+ ApplicationInfo applicationInfo = activity.getApplicationInfo();
+ final String applicationName = applicationInfo.nonLocalizedLabel.toString();
+
+ this.runOnUiThread(new Runnable() {
+ public void run() {
+ AlertDialog.Builder builder = new AlertDialog.Builder(activity, android.R.style.Theme_Material_Dialog_Alert);
+ builder.setTitle(applicationName);
+ builder.setMessage(message);
+ builder.setPositiveButton("Close", new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int id) {
+ semaphore.release();
+ }
+ });
+ builder.setCancelable(false);
+ AlertDialog dialog = builder.create();
+ dialog.show();
+ }
+ });
+ try {
+ semaphore.acquire();
+ }
+ catch (InterruptedException e) { }
+ }
+}
diff --git a/android/examples/raytracingintersection/CMakeLists.txt b/android/examples/raytracingintersection/CMakeLists.txt
new file mode 100644
index 000000000..a6bab57d8
--- /dev/null
+++ b/android/examples/raytracingintersection/CMakeLists.txt
@@ -0,0 +1,34 @@
+cmake_minimum_required(VERSION 3.4.1 FATAL_ERROR)
+
+set(NAME raytracingintersection)
+
+set(SRC_DIR ../../../examples/${NAME})
+set(BASE_DIR ../../../base)
+set(EXTERNAL_DIR ../../../external)
+
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 -DVK_USE_PLATFORM_ANDROID_KHR -DVK_NO_PROTOTYPES")
+
+file(GLOB EXAMPLE_SRC "${SRC_DIR}/*.cpp")
+
+add_library(native-lib SHARED ${EXAMPLE_SRC})
+
+add_library(native-app-glue STATIC ${ANDROID_NDK}/sources/android/native_app_glue/android_native_app_glue.c)
+
+add_subdirectory(../base ${CMAKE_SOURCE_DIR}/../base)
+
+set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -u ANativeActivity_onCreate")
+
+include_directories(${BASE_DIR})
+include_directories(${EXTERNAL_DIR})
+include_directories(${EXTERNAL_DIR}/glm)
+include_directories(${EXTERNAL_DIR}/imgui)
+include_directories(${ANDROID_NDK}/sources/android/native_app_glue)
+
+target_link_libraries(
+ native-lib
+ native-app-glue
+ libbase
+ android
+ log
+ z
+)
diff --git a/android/examples/raytracingintersection/build.gradle b/android/examples/raytracingintersection/build.gradle
new file mode 100644
index 000000000..d0219af55
--- /dev/null
+++ b/android/examples/raytracingintersection/build.gradle
@@ -0,0 +1,59 @@
+apply plugin: 'com.android.application'
+apply from: '../gradle/outputfilename.gradle'
+
+android {
+ compileSdkVersion rootProject.ext.compileSdkVersion
+ defaultConfig {
+ applicationId "de.saschawillems.vulkanRaytracingintersection"
+ minSdkVersion rootProject.ext.minSdkVersion
+ targetSdkVersion rootProject.ext.targetSdkVersion
+ versionCode 1
+ versionName "1.0"
+ ndk {
+ abiFilters rootProject.ext.abiFilters
+ }
+ externalNativeBuild {
+ cmake {
+ cppFlags "-std=c++14"
+ arguments "-DANDROID_STL=c++_shared", '-DANDROID_TOOLCHAIN=clang'
+ }
+ }
+ }
+ sourceSets {
+ main.assets.srcDirs = ['assets']
+ }
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+ }
+ }
+ externalNativeBuild {
+ cmake {
+ path "CMakeLists.txt"
+ }
+ }
+}
+
+task copyTask {
+ copy {
+ from '../../common/res/drawable'
+ into "src/main/res/drawable"
+ include 'icon.png'
+ }
+
+ copy {
+ from rootProject.ext.shaderPath + 'glsl/base'
+ into 'assets/shaders/glsl/base'
+ include '*.spv'
+ }
+
+ copy {
+ from rootProject.ext.shaderPath + 'glsl/raytracingintersection'
+ into 'assets/shaders/glsl/raytracingintersection'
+ include '*.*'
+ }
+
+}
+
+preBuild.dependsOn copyTask
\ No newline at end of file
diff --git a/android/examples/raytracingintersection/src/main/AndroidManifest.xml b/android/examples/raytracingintersection/src/main/AndroidManifest.xml
new file mode 100644
index 000000000..9a5eb5e9e
--- /dev/null
+++ b/android/examples/raytracingintersection/src/main/AndroidManifest.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/android/examples/raytracingintersection/src/main/java/de/saschawillems/vulkanSample/VulkanActivity.java b/android/examples/raytracingintersection/src/main/java/de/saschawillems/vulkanSample/VulkanActivity.java
new file mode 100644
index 000000000..12e14fc6d
--- /dev/null
+++ b/android/examples/raytracingintersection/src/main/java/de/saschawillems/vulkanSample/VulkanActivity.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2018 by Sascha Willems - www.saschawillems.de
+ *
+ * This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
+ */
+package de.saschawillems.vulkanSample;
+
+import android.app.AlertDialog;
+import android.app.NativeActivity;
+import android.content.DialogInterface;
+import android.content.pm.ApplicationInfo;
+import android.os.Bundle;
+
+import java.util.concurrent.Semaphore;
+
+public class VulkanActivity extends NativeActivity {
+
+ static {
+ // Load native library
+ System.loadLibrary("native-lib");
+ }
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ }
+
+ // Use a semaphore to create a modal dialog
+
+ private final Semaphore semaphore = new Semaphore(0, true);
+
+ public void showAlert(final String message)
+ {
+ final VulkanActivity activity = this;
+
+ ApplicationInfo applicationInfo = activity.getApplicationInfo();
+ final String applicationName = applicationInfo.nonLocalizedLabel.toString();
+
+ this.runOnUiThread(new Runnable() {
+ public void run() {
+ AlertDialog.Builder builder = new AlertDialog.Builder(activity, android.R.style.Theme_Material_Dialog_Alert);
+ builder.setTitle(applicationName);
+ builder.setMessage(message);
+ builder.setPositiveButton("Close", new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int id) {
+ semaphore.release();
+ }
+ });
+ builder.setCancelable(false);
+ AlertDialog dialog = builder.create();
+ dialog.show();
+ }
+ });
+ try {
+ semaphore.acquire();
+ }
+ catch (InterruptedException e) { }
+ }
+}
diff --git a/android/examples/raytracingpositionfetch/CMakeLists.txt b/android/examples/raytracingpositionfetch/CMakeLists.txt
new file mode 100644
index 000000000..bcf0a33dd
--- /dev/null
+++ b/android/examples/raytracingpositionfetch/CMakeLists.txt
@@ -0,0 +1,35 @@
+cmake_minimum_required(VERSION 3.4.1 FATAL_ERROR)
+
+set(NAME raytracingpositionfetch)
+
+set(SRC_DIR ../../../examples/${NAME})
+set(BASE_DIR ../../../base)
+set(EXTERNAL_DIR ../../../external)
+
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 -DVK_USE_PLATFORM_ANDROID_KHR -DVK_NO_PROTOTYPES")
+
+file(GLOB EXAMPLE_SRC "${SRC_DIR}/*.cpp")
+
+add_library(native-lib SHARED ${EXAMPLE_SRC})
+
+add_library(native-app-glue STATIC ${ANDROID_NDK}/sources/android/native_app_glue/android_native_app_glue.c)
+
+add_subdirectory(../base ${CMAKE_SOURCE_DIR}/../base)
+
+set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -u ANativeActivity_onCreate")
+
+include_directories(${BASE_DIR})
+include_directories(${EXTERNAL_DIR})
+include_directories(${EXTERNAL_DIR}/glm)
+include_directories(${EXTERNAL_DIR}/imgui)
+include_directories(${EXTERNAL_DIR}/tinygltf)
+include_directories(${ANDROID_NDK}/sources/android/native_app_glue)
+
+target_link_libraries(
+ native-lib
+ native-app-glue
+ libbase
+ android
+ log
+ z
+)
diff --git a/android/examples/raytracingpositionfetch/build.gradle b/android/examples/raytracingpositionfetch/build.gradle
new file mode 100644
index 000000000..b70bb7901
--- /dev/null
+++ b/android/examples/raytracingpositionfetch/build.gradle
@@ -0,0 +1,65 @@
+apply plugin: 'com.android.application'
+apply from: '../gradle/outputfilename.gradle'
+
+android {
+ compileSdkVersion rootProject.ext.compileSdkVersion
+ defaultConfig {
+ applicationId "de.saschawillems.vulkanRaytracingpositionfetch"
+ minSdkVersion rootProject.ext.minSdkVersion
+ targetSdkVersion rootProject.ext.targetSdkVersion
+ versionCode 1
+ versionName "1.0"
+ ndk {
+ abiFilters rootProject.ext.abiFilters
+ }
+ externalNativeBuild {
+ cmake {
+ cppFlags "-std=c++14"
+ arguments "-DANDROID_STL=c++_shared", '-DANDROID_TOOLCHAIN=clang'
+ }
+ }
+ }
+ sourceSets {
+ main.assets.srcDirs = ['assets']
+ }
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+ }
+ }
+ externalNativeBuild {
+ cmake {
+ path "CMakeLists.txt"
+ }
+ }
+}
+
+task copyTask {
+ copy {
+ from '../../common/res/drawable'
+ into "src/main/res/drawable"
+ include 'icon.png'
+ }
+
+ copy {
+ from rootProject.ext.shaderPath + 'glsl/base'
+ into 'assets/shaders/glsl/base'
+ include '*.spv'
+ }
+
+ copy {
+ from rootProject.ext.shaderPath + 'glsl/raytracingpositionfetch'
+ into 'assets/shaders/glsl/raytracingpositionfetch'
+ include '*.*'
+ }
+
+ copy {
+ from rootProject.ext.assetPath + 'models'
+ into 'assets/models'
+ include 'treasure_smooth.gltf'
+ }
+
+}
+
+preBuild.dependsOn copyTask
\ No newline at end of file
diff --git a/android/examples/raytracingpositionfetch/src/main/AndroidManifest.xml b/android/examples/raytracingpositionfetch/src/main/AndroidManifest.xml
new file mode 100644
index 000000000..37683a527
--- /dev/null
+++ b/android/examples/raytracingpositionfetch/src/main/AndroidManifest.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/android/examples/raytracingpositionfetch/src/main/java/de/saschawillems/vulkanSample/VulkanActivity.java b/android/examples/raytracingpositionfetch/src/main/java/de/saschawillems/vulkanSample/VulkanActivity.java
new file mode 100644
index 000000000..12e14fc6d
--- /dev/null
+++ b/android/examples/raytracingpositionfetch/src/main/java/de/saschawillems/vulkanSample/VulkanActivity.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2018 by Sascha Willems - www.saschawillems.de
+ *
+ * This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
+ */
+package de.saschawillems.vulkanSample;
+
+import android.app.AlertDialog;
+import android.app.NativeActivity;
+import android.content.DialogInterface;
+import android.content.pm.ApplicationInfo;
+import android.os.Bundle;
+
+import java.util.concurrent.Semaphore;
+
+public class VulkanActivity extends NativeActivity {
+
+ static {
+ // Load native library
+ System.loadLibrary("native-lib");
+ }
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ }
+
+ // Use a semaphore to create a modal dialog
+
+ private final Semaphore semaphore = new Semaphore(0, true);
+
+ public void showAlert(final String message)
+ {
+ final VulkanActivity activity = this;
+
+ ApplicationInfo applicationInfo = activity.getApplicationInfo();
+ final String applicationName = applicationInfo.nonLocalizedLabel.toString();
+
+ this.runOnUiThread(new Runnable() {
+ public void run() {
+ AlertDialog.Builder builder = new AlertDialog.Builder(activity, android.R.style.Theme_Material_Dialog_Alert);
+ builder.setTitle(applicationName);
+ builder.setMessage(message);
+ builder.setPositiveButton("Close", new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int id) {
+ semaphore.release();
+ }
+ });
+ builder.setCancelable(false);
+ AlertDialog dialog = builder.create();
+ dialog.show();
+ }
+ });
+ try {
+ semaphore.acquire();
+ }
+ catch (InterruptedException e) { }
+ }
+}
diff --git a/android/examples/raytracingsbtdata/CMakeLists.txt b/android/examples/raytracingsbtdata/CMakeLists.txt
new file mode 100644
index 000000000..a14ba7a67
--- /dev/null
+++ b/android/examples/raytracingsbtdata/CMakeLists.txt
@@ -0,0 +1,34 @@
+cmake_minimum_required(VERSION 3.4.1 FATAL_ERROR)
+
+set(NAME raytracingsbtdata)
+
+set(SRC_DIR ../../../examples/${NAME})
+set(BASE_DIR ../../../base)
+set(EXTERNAL_DIR ../../../external)
+
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 -DVK_USE_PLATFORM_ANDROID_KHR -DVK_NO_PROTOTYPES")
+
+file(GLOB EXAMPLE_SRC "${SRC_DIR}/*.cpp")
+
+add_library(native-lib SHARED ${EXAMPLE_SRC})
+
+add_library(native-app-glue STATIC ${ANDROID_NDK}/sources/android/native_app_glue/android_native_app_glue.c)
+
+add_subdirectory(../base ${CMAKE_SOURCE_DIR}/../base)
+
+set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -u ANativeActivity_onCreate")
+
+include_directories(${BASE_DIR})
+include_directories(${EXTERNAL_DIR})
+include_directories(${EXTERNAL_DIR}/glm)
+include_directories(${EXTERNAL_DIR}/imgui)
+include_directories(${ANDROID_NDK}/sources/android/native_app_glue)
+
+target_link_libraries(
+ native-lib
+ native-app-glue
+ libbase
+ android
+ log
+ z
+)
diff --git a/android/examples/raytracingsbtdata/build.gradle b/android/examples/raytracingsbtdata/build.gradle
new file mode 100644
index 000000000..b495acd88
--- /dev/null
+++ b/android/examples/raytracingsbtdata/build.gradle
@@ -0,0 +1,59 @@
+apply plugin: 'com.android.application'
+apply from: '../gradle/outputfilename.gradle'
+
+android {
+ compileSdkVersion rootProject.ext.compileSdkVersion
+ defaultConfig {
+ applicationId "de.saschawillems.vulkanRaytracingsbtdata"
+ minSdkVersion rootProject.ext.minSdkVersion
+ targetSdkVersion rootProject.ext.targetSdkVersion
+ versionCode 1
+ versionName "1.0"
+ ndk {
+ abiFilters rootProject.ext.abiFilters
+ }
+ externalNativeBuild {
+ cmake {
+ cppFlags "-std=c++14"
+ arguments "-DANDROID_STL=c++_shared", '-DANDROID_TOOLCHAIN=clang'
+ }
+ }
+ }
+ sourceSets {
+ main.assets.srcDirs = ['assets']
+ }
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+ }
+ }
+ externalNativeBuild {
+ cmake {
+ path "CMakeLists.txt"
+ }
+ }
+}
+
+task copyTask {
+ copy {
+ from '../../common/res/drawable'
+ into "src/main/res/drawable"
+ include 'icon.png'
+ }
+
+ copy {
+ from rootProject.ext.shaderPath + 'glsl/base'
+ into 'assets/shaders/glsl/base'
+ include '*.spv'
+ }
+
+ copy {
+ from rootProject.ext.shaderPath + 'glsl/raytracingsbtdata'
+ into 'assets/shaders/glsl/raytracingsbtdata'
+ include '*.*'
+ }
+
+}
+
+preBuild.dependsOn copyTask
\ No newline at end of file
diff --git a/android/examples/raytracingsbtdata/src/main/AndroidManifest.xml b/android/examples/raytracingsbtdata/src/main/AndroidManifest.xml
new file mode 100644
index 000000000..51b1181b3
--- /dev/null
+++ b/android/examples/raytracingsbtdata/src/main/AndroidManifest.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/android/examples/raytracingsbtdata/src/main/java/de/saschawillems/vulkanSample/VulkanActivity.java b/android/examples/raytracingsbtdata/src/main/java/de/saschawillems/vulkanSample/VulkanActivity.java
new file mode 100644
index 000000000..12e14fc6d
--- /dev/null
+++ b/android/examples/raytracingsbtdata/src/main/java/de/saschawillems/vulkanSample/VulkanActivity.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2018 by Sascha Willems - www.saschawillems.de
+ *
+ * This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
+ */
+package de.saschawillems.vulkanSample;
+
+import android.app.AlertDialog;
+import android.app.NativeActivity;
+import android.content.DialogInterface;
+import android.content.pm.ApplicationInfo;
+import android.os.Bundle;
+
+import java.util.concurrent.Semaphore;
+
+public class VulkanActivity extends NativeActivity {
+
+ static {
+ // Load native library
+ System.loadLibrary("native-lib");
+ }
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ }
+
+ // Use a semaphore to create a modal dialog
+
+ private final Semaphore semaphore = new Semaphore(0, true);
+
+ public void showAlert(final String message)
+ {
+ final VulkanActivity activity = this;
+
+ ApplicationInfo applicationInfo = activity.getApplicationInfo();
+ final String applicationName = applicationInfo.nonLocalizedLabel.toString();
+
+ this.runOnUiThread(new Runnable() {
+ public void run() {
+ AlertDialog.Builder builder = new AlertDialog.Builder(activity, android.R.style.Theme_Material_Dialog_Alert);
+ builder.setTitle(applicationName);
+ builder.setMessage(message);
+ builder.setPositiveButton("Close", new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int id) {
+ semaphore.release();
+ }
+ });
+ builder.setCancelable(false);
+ AlertDialog dialog = builder.create();
+ dialog.show();
+ }
+ });
+ try {
+ semaphore.acquire();
+ }
+ catch (InterruptedException e) { }
+ }
+}
diff --git a/android/examples/raytracingtextures/CMakeLists.txt b/android/examples/raytracingtextures/CMakeLists.txt
new file mode 100644
index 000000000..ace3f0bbc
--- /dev/null
+++ b/android/examples/raytracingtextures/CMakeLists.txt
@@ -0,0 +1,34 @@
+cmake_minimum_required(VERSION 3.4.1 FATAL_ERROR)
+
+set(NAME raytracingtextures)
+
+set(SRC_DIR ../../../examples/${NAME})
+set(BASE_DIR ../../../base)
+set(EXTERNAL_DIR ../../../external)
+
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 -DVK_USE_PLATFORM_ANDROID_KHR -DVK_NO_PROTOTYPES")
+
+file(GLOB EXAMPLE_SRC "${SRC_DIR}/*.cpp")
+
+add_library(native-lib SHARED ${EXAMPLE_SRC})
+
+add_library(native-app-glue STATIC ${ANDROID_NDK}/sources/android/native_app_glue/android_native_app_glue.c)
+
+add_subdirectory(../base ${CMAKE_SOURCE_DIR}/../base)
+
+set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -u ANativeActivity_onCreate")
+
+include_directories(${BASE_DIR})
+include_directories(${EXTERNAL_DIR})
+include_directories(${EXTERNAL_DIR}/glm)
+include_directories(${EXTERNAL_DIR}/imgui)
+include_directories(${ANDROID_NDK}/sources/android/native_app_glue)
+
+target_link_libraries(
+ native-lib
+ native-app-glue
+ libbase
+ android
+ log
+ z
+)
diff --git a/android/examples/raytracingtextures/build.gradle b/android/examples/raytracingtextures/build.gradle
new file mode 100644
index 000000000..d9abe667a
--- /dev/null
+++ b/android/examples/raytracingtextures/build.gradle
@@ -0,0 +1,65 @@
+apply plugin: 'com.android.application'
+apply from: '../gradle/outputfilename.gradle'
+
+android {
+ compileSdkVersion rootProject.ext.compileSdkVersion
+ defaultConfig {
+ applicationId "de.saschawillems.vulkanRaytracingtextures"
+ minSdkVersion rootProject.ext.minSdkVersion
+ targetSdkVersion rootProject.ext.targetSdkVersion
+ versionCode 1
+ versionName "1.0"
+ ndk {
+ abiFilters rootProject.ext.abiFilters
+ }
+ externalNativeBuild {
+ cmake {
+ cppFlags "-std=c++14"
+ arguments "-DANDROID_STL=c++_shared", '-DANDROID_TOOLCHAIN=clang'
+ }
+ }
+ }
+ sourceSets {
+ main.assets.srcDirs = ['assets']
+ }
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+ }
+ }
+ externalNativeBuild {
+ cmake {
+ path "CMakeLists.txt"
+ }
+ }
+}
+
+task copyTask {
+ copy {
+ from '../../common/res/drawable'
+ into "src/main/res/drawable"
+ include 'icon.png'
+ }
+
+ copy {
+ from rootProject.ext.shaderPath + 'glsl/base'
+ into 'assets/shaders/glsl/base'
+ include '*.spv'
+ }
+
+ copy {
+ from rootProject.ext.shaderPath + 'glsl/raytracingtextures'
+ into 'assets/shaders/glsl/raytracingtextures'
+ include '*.*'
+ }
+
+ copy {
+ from rootProject.ext.assetPath + 'textures'
+ into 'assets/textures'
+ include 'gratefloor_rgba.ktx'
+ }
+
+}
+
+preBuild.dependsOn copyTask
\ No newline at end of file
diff --git a/android/examples/raytracingtextures/src/main/AndroidManifest.xml b/android/examples/raytracingtextures/src/main/AndroidManifest.xml
new file mode 100644
index 000000000..5adf299b7
--- /dev/null
+++ b/android/examples/raytracingtextures/src/main/AndroidManifest.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/android/examples/raytracingtextures/src/main/java/de/saschawillems/vulkanSample/VulkanActivity.java b/android/examples/raytracingtextures/src/main/java/de/saschawillems/vulkanSample/VulkanActivity.java
new file mode 100644
index 000000000..12e14fc6d
--- /dev/null
+++ b/android/examples/raytracingtextures/src/main/java/de/saschawillems/vulkanSample/VulkanActivity.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2018 by Sascha Willems - www.saschawillems.de
+ *
+ * This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
+ */
+package de.saschawillems.vulkanSample;
+
+import android.app.AlertDialog;
+import android.app.NativeActivity;
+import android.content.DialogInterface;
+import android.content.pm.ApplicationInfo;
+import android.os.Bundle;
+
+import java.util.concurrent.Semaphore;
+
+public class VulkanActivity extends NativeActivity {
+
+ static {
+ // Load native library
+ System.loadLibrary("native-lib");
+ }
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ }
+
+ // Use a semaphore to create a modal dialog
+
+ private final Semaphore semaphore = new Semaphore(0, true);
+
+ public void showAlert(final String message)
+ {
+ final VulkanActivity activity = this;
+
+ ApplicationInfo applicationInfo = activity.getApplicationInfo();
+ final String applicationName = applicationInfo.nonLocalizedLabel.toString();
+
+ this.runOnUiThread(new Runnable() {
+ public void run() {
+ AlertDialog.Builder builder = new AlertDialog.Builder(activity, android.R.style.Theme_Material_Dialog_Alert);
+ builder.setTitle(applicationName);
+ builder.setMessage(message);
+ builder.setPositiveButton("Close", new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int id) {
+ semaphore.release();
+ }
+ });
+ builder.setCancelable(false);
+ AlertDialog dialog = builder.create();
+ dialog.show();
+ }
+ });
+ try {
+ semaphore.acquire();
+ }
+ catch (InterruptedException e) { }
+ }
+}
diff --git a/android/examples/shaderobjects/CMakeLists.txt b/android/examples/shaderobjects/CMakeLists.txt
new file mode 100644
index 000000000..3d31b53b3
--- /dev/null
+++ b/android/examples/shaderobjects/CMakeLists.txt
@@ -0,0 +1,35 @@
+cmake_minimum_required(VERSION 3.4.1 FATAL_ERROR)
+
+set(NAME shaderobjects)
+
+set(SRC_DIR ../../../examples/${NAME})
+set(BASE_DIR ../../../base)
+set(EXTERNAL_DIR ../../../external)
+
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 -DVK_USE_PLATFORM_ANDROID_KHR -DVK_NO_PROTOTYPES")
+
+file(GLOB EXAMPLE_SRC "${SRC_DIR}/*.cpp")
+
+add_library(native-lib SHARED ${EXAMPLE_SRC})
+
+add_library(native-app-glue STATIC ${ANDROID_NDK}/sources/android/native_app_glue/android_native_app_glue.c)
+
+add_subdirectory(../base ${CMAKE_SOURCE_DIR}/../base)
+
+set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -u ANativeActivity_onCreate")
+
+include_directories(${BASE_DIR})
+include_directories(${EXTERNAL_DIR})
+include_directories(${EXTERNAL_DIR}/glm)
+include_directories(${EXTERNAL_DIR}/imgui)
+include_directories(${EXTERNAL_DIR}/tinygltf)
+include_directories(${ANDROID_NDK}/sources/android/native_app_glue)
+
+target_link_libraries(
+ native-lib
+ native-app-glue
+ libbase
+ android
+ log
+ z
+)
diff --git a/android/examples/shaderobjects/build.gradle b/android/examples/shaderobjects/build.gradle
new file mode 100644
index 000000000..ce0567078
--- /dev/null
+++ b/android/examples/shaderobjects/build.gradle
@@ -0,0 +1,65 @@
+apply plugin: 'com.android.application'
+apply from: '../gradle/outputfilename.gradle'
+
+android {
+ compileSdkVersion rootProject.ext.compileSdkVersion
+ defaultConfig {
+ applicationId "de.saschawillems.vulkanShaderobjects"
+ minSdkVersion rootProject.ext.minSdkVersion
+ targetSdkVersion rootProject.ext.targetSdkVersion
+ versionCode 1
+ versionName "1.0"
+ ndk {
+ abiFilters rootProject.ext.abiFilters
+ }
+ externalNativeBuild {
+ cmake {
+ cppFlags "-std=c++14"
+ arguments "-DANDROID_STL=c++_shared", '-DANDROID_TOOLCHAIN=clang'
+ }
+ }
+ }
+ sourceSets {
+ main.assets.srcDirs = ['assets']
+ }
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+ }
+ }
+ externalNativeBuild {
+ cmake {
+ path "CMakeLists.txt"
+ }
+ }
+}
+
+task copyTask {
+ copy {
+ from '../../common/res/drawable'
+ into "src/main/res/drawable"
+ include 'icon.png'
+ }
+
+ copy {
+ from rootProject.ext.shaderPath + 'glsl/base'
+ into 'assets/shaders/glsl/base'
+ include '*.spv'
+ }
+
+ copy {
+ from rootProject.ext.shaderPath + 'glsl/shaderobjects'
+ into 'assets/shaders/glsl/shaderobjects'
+ include '*.*'
+ }
+
+ copy {
+ from rootProject.ext.assetPath + 'models'
+ into 'assets/models'
+ include 'treasure_smooth.gltf'
+ }
+
+}
+
+preBuild.dependsOn copyTask
\ No newline at end of file
diff --git a/android/examples/shaderobjects/src/main/AndroidManifest.xml b/android/examples/shaderobjects/src/main/AndroidManifest.xml
new file mode 100644
index 000000000..3ba2d3759
--- /dev/null
+++ b/android/examples/shaderobjects/src/main/AndroidManifest.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/android/examples/shaderobjects/src/main/java/de/saschawillems/vulkanSample/VulkanActivity.java b/android/examples/shaderobjects/src/main/java/de/saschawillems/vulkanSample/VulkanActivity.java
new file mode 100644
index 000000000..12e14fc6d
--- /dev/null
+++ b/android/examples/shaderobjects/src/main/java/de/saschawillems/vulkanSample/VulkanActivity.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2018 by Sascha Willems - www.saschawillems.de
+ *
+ * This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
+ */
+package de.saschawillems.vulkanSample;
+
+import android.app.AlertDialog;
+import android.app.NativeActivity;
+import android.content.DialogInterface;
+import android.content.pm.ApplicationInfo;
+import android.os.Bundle;
+
+import java.util.concurrent.Semaphore;
+
+public class VulkanActivity extends NativeActivity {
+
+ static {
+ // Load native library
+ System.loadLibrary("native-lib");
+ }
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ }
+
+ // Use a semaphore to create a modal dialog
+
+ private final Semaphore semaphore = new Semaphore(0, true);
+
+ public void showAlert(final String message)
+ {
+ final VulkanActivity activity = this;
+
+ ApplicationInfo applicationInfo = activity.getApplicationInfo();
+ final String applicationName = applicationInfo.nonLocalizedLabel.toString();
+
+ this.runOnUiThread(new Runnable() {
+ public void run() {
+ AlertDialog.Builder builder = new AlertDialog.Builder(activity, android.R.style.Theme_Material_Dialog_Alert);
+ builder.setTitle(applicationName);
+ builder.setMessage(message);
+ builder.setPositiveButton("Close", new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int id) {
+ semaphore.release();
+ }
+ });
+ builder.setCancelable(false);
+ AlertDialog dialog = builder.create();
+ dialog.show();
+ }
+ });
+ try {
+ semaphore.acquire();
+ }
+ catch (InterruptedException e) { }
+ }
+}
diff --git a/android/examples/texturesparseresidency/CMakeLists.txt b/android/examples/texturesparseresidency/CMakeLists.txt
new file mode 100644
index 000000000..06b205244
--- /dev/null
+++ b/android/examples/texturesparseresidency/CMakeLists.txt
@@ -0,0 +1,35 @@
+cmake_minimum_required(VERSION 3.4.1 FATAL_ERROR)
+
+set(NAME texturesparseresidency)
+
+set(SRC_DIR ../../../examples/${NAME})
+set(BASE_DIR ../../../base)
+set(EXTERNAL_DIR ../../../external)
+
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 -DVK_USE_PLATFORM_ANDROID_KHR -DVK_NO_PROTOTYPES")
+
+file(GLOB EXAMPLE_SRC "${SRC_DIR}/*.cpp")
+
+add_library(native-lib SHARED ${EXAMPLE_SRC})
+
+add_library(native-app-glue STATIC ${ANDROID_NDK}/sources/android/native_app_glue/android_native_app_glue.c)
+
+add_subdirectory(../base ${CMAKE_SOURCE_DIR}/../base)
+
+set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -u ANativeActivity_onCreate")
+
+include_directories(${BASE_DIR})
+include_directories(${EXTERNAL_DIR})
+include_directories(${EXTERNAL_DIR}/glm)
+include_directories(${EXTERNAL_DIR}/imgui)
+include_directories(${EXTERNAL_DIR}/tinygltf)
+include_directories(${ANDROID_NDK}/sources/android/native_app_glue)
+
+target_link_libraries(
+ native-lib
+ native-app-glue
+ libbase
+ android
+ log
+ z
+)
diff --git a/android/examples/texturesparseresidency/build.gradle b/android/examples/texturesparseresidency/build.gradle
new file mode 100644
index 000000000..505f4700c
--- /dev/null
+++ b/android/examples/texturesparseresidency/build.gradle
@@ -0,0 +1,65 @@
+apply plugin: 'com.android.application'
+apply from: '../gradle/outputfilename.gradle'
+
+android {
+ compileSdkVersion rootProject.ext.compileSdkVersion
+ defaultConfig {
+ applicationId "de.saschawillems.vulkanTexturesparseresidency"
+ minSdkVersion rootProject.ext.minSdkVersion
+ targetSdkVersion rootProject.ext.targetSdkVersion
+ versionCode 1
+ versionName "1.0"
+ ndk {
+ abiFilters rootProject.ext.abiFilters
+ }
+ externalNativeBuild {
+ cmake {
+ cppFlags "-std=c++14"
+ arguments "-DANDROID_STL=c++_shared", '-DANDROID_TOOLCHAIN=clang'
+ }
+ }
+ }
+ sourceSets {
+ main.assets.srcDirs = ['assets']
+ }
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+ }
+ }
+ externalNativeBuild {
+ cmake {
+ path "CMakeLists.txt"
+ }
+ }
+}
+
+task copyTask {
+ copy {
+ from '../../common/res/drawable'
+ into "src/main/res/drawable"
+ include 'icon.png'
+ }
+
+ copy {
+ from rootProject.ext.shaderPath + 'glsl/base'
+ into 'assets/shaders/glsl/base'
+ include '*.spv'
+ }
+
+ copy {
+ from rootProject.ext.shaderPath + 'glsl/texturesparseresidency'
+ into 'assets/shaders/glsl/texturesparseresidency'
+ include '*.*'
+ }
+
+ copy {
+ from rootProject.ext.assetPath + 'models'
+ into 'assets/models'
+ include 'plane.gltf'
+ }
+
+}
+
+preBuild.dependsOn copyTask
\ No newline at end of file
diff --git a/android/examples/texturesparseresidency/src/main/AndroidManifest.xml b/android/examples/texturesparseresidency/src/main/AndroidManifest.xml
new file mode 100644
index 000000000..a56fd3d6c
--- /dev/null
+++ b/android/examples/texturesparseresidency/src/main/AndroidManifest.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/android/examples/texturesparseresidency/src/main/java/de/saschawillems/vulkanSample/VulkanActivity.java b/android/examples/texturesparseresidency/src/main/java/de/saschawillems/vulkanSample/VulkanActivity.java
new file mode 100644
index 000000000..12e14fc6d
--- /dev/null
+++ b/android/examples/texturesparseresidency/src/main/java/de/saschawillems/vulkanSample/VulkanActivity.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2018 by Sascha Willems - www.saschawillems.de
+ *
+ * This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
+ */
+package de.saschawillems.vulkanSample;
+
+import android.app.AlertDialog;
+import android.app.NativeActivity;
+import android.content.DialogInterface;
+import android.content.pm.ApplicationInfo;
+import android.os.Bundle;
+
+import java.util.concurrent.Semaphore;
+
+public class VulkanActivity extends NativeActivity {
+
+ static {
+ // Load native library
+ System.loadLibrary("native-lib");
+ }
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ }
+
+ // Use a semaphore to create a modal dialog
+
+ private final Semaphore semaphore = new Semaphore(0, true);
+
+ public void showAlert(final String message)
+ {
+ final VulkanActivity activity = this;
+
+ ApplicationInfo applicationInfo = activity.getApplicationInfo();
+ final String applicationName = applicationInfo.nonLocalizedLabel.toString();
+
+ this.runOnUiThread(new Runnable() {
+ public void run() {
+ AlertDialog.Builder builder = new AlertDialog.Builder(activity, android.R.style.Theme_Material_Dialog_Alert);
+ builder.setTitle(applicationName);
+ builder.setMessage(message);
+ builder.setPositiveButton("Close", new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int id) {
+ semaphore.release();
+ }
+ });
+ builder.setCancelable(false);
+ AlertDialog dialog = builder.create();
+ dialog.show();
+ }
+ });
+ try {
+ semaphore.acquire();
+ }
+ catch (InterruptedException e) { }
+ }
+}
diff --git a/android/examples/trianglevulkan13/CMakeLists.txt b/android/examples/trianglevulkan13/CMakeLists.txt
new file mode 100644
index 000000000..3c736366f
--- /dev/null
+++ b/android/examples/trianglevulkan13/CMakeLists.txt
@@ -0,0 +1,34 @@
+cmake_minimum_required(VERSION 3.4.1 FATAL_ERROR)
+
+set(NAME trianglevulkan13)
+
+set(SRC_DIR ../../../examples/${NAME})
+set(BASE_DIR ../../../base)
+set(EXTERNAL_DIR ../../../external)
+
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 -DVK_USE_PLATFORM_ANDROID_KHR -DVK_NO_PROTOTYPES")
+
+file(GLOB EXAMPLE_SRC "${SRC_DIR}/*.cpp")
+
+add_library(native-lib SHARED ${EXAMPLE_SRC})
+
+add_library(native-app-glue STATIC ${ANDROID_NDK}/sources/android/native_app_glue/android_native_app_glue.c)
+
+add_subdirectory(../base ${CMAKE_SOURCE_DIR}/../base)
+
+set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -u ANativeActivity_onCreate")
+
+include_directories(${BASE_DIR})
+include_directories(${EXTERNAL_DIR})
+include_directories(${EXTERNAL_DIR}/glm)
+include_directories(${EXTERNAL_DIR}/imgui)
+include_directories(${ANDROID_NDK}/sources/android/native_app_glue)
+
+target_link_libraries(
+ native-lib
+ native-app-glue
+ libbase
+ android
+ log
+ z
+)
diff --git a/android/examples/trianglevulkan13/build.gradle b/android/examples/trianglevulkan13/build.gradle
new file mode 100644
index 000000000..542a3d292
--- /dev/null
+++ b/android/examples/trianglevulkan13/build.gradle
@@ -0,0 +1,59 @@
+apply plugin: 'com.android.application'
+apply from: '../gradle/outputfilename.gradle'
+
+android {
+ compileSdkVersion rootProject.ext.compileSdkVersion
+ defaultConfig {
+ applicationId "de.saschawillems.vulkanTrianglevulkan13"
+ minSdkVersion rootProject.ext.minSdkVersion
+ targetSdkVersion rootProject.ext.targetSdkVersion
+ versionCode 1
+ versionName "1.0"
+ ndk {
+ abiFilters rootProject.ext.abiFilters
+ }
+ externalNativeBuild {
+ cmake {
+ cppFlags "-std=c++14"
+ arguments "-DANDROID_STL=c++_shared", '-DANDROID_TOOLCHAIN=clang'
+ }
+ }
+ }
+ sourceSets {
+ main.assets.srcDirs = ['assets']
+ }
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+ }
+ }
+ externalNativeBuild {
+ cmake {
+ path "CMakeLists.txt"
+ }
+ }
+}
+
+task copyTask {
+ copy {
+ from '../../common/res/drawable'
+ into "src/main/res/drawable"
+ include 'icon.png'
+ }
+
+ copy {
+ from rootProject.ext.shaderPath + 'glsl/base'
+ into 'assets/shaders/glsl/base'
+ include '*.spv'
+ }
+
+ copy {
+ from rootProject.ext.shaderPath + 'glsl/triangle'
+ into 'assets/shaders/glsl/triangle'
+ include '*.*'
+ }
+
+}
+
+preBuild.dependsOn copyTask
\ No newline at end of file
diff --git a/android/examples/trianglevulkan13/src/main/AndroidManifest.xml b/android/examples/trianglevulkan13/src/main/AndroidManifest.xml
new file mode 100644
index 000000000..505453d56
--- /dev/null
+++ b/android/examples/trianglevulkan13/src/main/AndroidManifest.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/android/examples/trianglevulkan13/src/main/java/de/saschawillems/vulkanSample/VulkanActivity.java b/android/examples/trianglevulkan13/src/main/java/de/saschawillems/vulkanSample/VulkanActivity.java
new file mode 100644
index 000000000..12e14fc6d
--- /dev/null
+++ b/android/examples/trianglevulkan13/src/main/java/de/saschawillems/vulkanSample/VulkanActivity.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2018 by Sascha Willems - www.saschawillems.de
+ *
+ * This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
+ */
+package de.saschawillems.vulkanSample;
+
+import android.app.AlertDialog;
+import android.app.NativeActivity;
+import android.content.DialogInterface;
+import android.content.pm.ApplicationInfo;
+import android.os.Bundle;
+
+import java.util.concurrent.Semaphore;
+
+public class VulkanActivity extends NativeActivity {
+
+ static {
+ // Load native library
+ System.loadLibrary("native-lib");
+ }
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ }
+
+ // Use a semaphore to create a modal dialog
+
+ private final Semaphore semaphore = new Semaphore(0, true);
+
+ public void showAlert(final String message)
+ {
+ final VulkanActivity activity = this;
+
+ ApplicationInfo applicationInfo = activity.getApplicationInfo();
+ final String applicationName = applicationInfo.nonLocalizedLabel.toString();
+
+ this.runOnUiThread(new Runnable() {
+ public void run() {
+ AlertDialog.Builder builder = new AlertDialog.Builder(activity, android.R.style.Theme_Material_Dialog_Alert);
+ builder.setTitle(applicationName);
+ builder.setMessage(message);
+ builder.setPositiveButton("Close", new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int id) {
+ semaphore.release();
+ }
+ });
+ builder.setCancelable(false);
+ AlertDialog dialog = builder.create();
+ dialog.show();
+ }
+ });
+ try {
+ semaphore.acquire();
+ }
+ catch (InterruptedException e) { }
+ }
+}
diff --git a/base/VulkanAndroid.cpp b/base/VulkanAndroid.cpp
index 6e4892e4d..bed79b1c2 100644
--- a/base/VulkanAndroid.cpp
+++ b/base/VulkanAndroid.cpp
@@ -120,6 +120,11 @@ PFN_vkCmdBeginQuery vkCmdBeginQuery;
PFN_vkCmdEndQuery vkCmdEndQuery;
PFN_vkCmdResetQueryPool vkCmdResetQueryPool;
PFN_vkCmdCopyQueryPoolResults vkCmdCopyQueryPoolResults;
+PFN_vkGetPhysicalDeviceSparseImageFormatProperties vkGetPhysicalDeviceSparseImageFormatProperties;
+PFN_vkGetImageSparseMemoryRequirements vkGetImageSparseMemoryRequirements;
+PFN_vkQueueBindSparse vkQueueBindSparse;
+PFN_vkCmdBeginRendering vkCmdBeginRendering;
+PFN_vkCmdEndRendering vkCmdEndRendering;
PFN_vkCreateAndroidSurfaceKHR vkCreateAndroidSurfaceKHR;
PFN_vkDestroySurfaceKHR vkDestroySurfaceKHR;
@@ -204,7 +209,7 @@ namespace vks
vkCmdEndRenderPass = reinterpret_cast(vkGetInstanceProcAddr(instance, "vkCmdEndRenderPass"));
vkCmdNextSubpass = reinterpret_cast(vkGetInstanceProcAddr(instance, "vkCmdNextSubpass"));
vkCmdExecuteCommands = reinterpret_cast(vkGetInstanceProcAddr(instance, "vkCmdExecuteCommands"));
- vkCmdClearColorImage = reinterpret_cast(vkGetInstanceProcAddr(instance, "vkCmdClearColorImage"));
+ vkCmdClearColorImage = reinterpret_cast(vkGetInstanceProcAddr(instance, "vkCmdClearColorImage"));
vkCreateImage = reinterpret_cast(vkGetInstanceProcAddr(instance, "vkCreateImage"));
vkGetImageMemoryRequirements = reinterpret_cast(vkGetInstanceProcAddr(instance, "vkGetImageMemoryRequirements"));
@@ -231,7 +236,7 @@ namespace vks
vkDestroyFence = reinterpret_cast(vkGetInstanceProcAddr(instance, "vkDestroyFence"));
vkWaitForFences = reinterpret_cast(vkGetInstanceProcAddr(instance, "vkWaitForFences"));
vkResetFences = reinterpret_cast(vkGetInstanceProcAddr(instance, "vkResetFences"));;
- vkResetDescriptorPool = reinterpret_cast(vkGetInstanceProcAddr(instance, "vkResetDescriptorPool"));
+ vkResetDescriptorPool = reinterpret_cast(vkGetInstanceProcAddr(instance, "vkResetDescriptorPool"));
vkCreateCommandPool = reinterpret_cast(vkGetInstanceProcAddr(instance, "vkCreateCommandPool"));
vkDestroyCommandPool = reinterpret_cast(vkGetInstanceProcAddr(instance, "vkDestroyCommandPool"));;
@@ -297,22 +302,29 @@ namespace vks
vkCmdResetQueryPool = reinterpret_cast(vkGetInstanceProcAddr(instance, "vkCmdResetQueryPool"));
vkCmdCopyQueryPoolResults = reinterpret_cast(vkGetInstanceProcAddr(instance, "vkCmdCopyQueryPoolResults"));
+ vkGetPhysicalDeviceSparseImageFormatProperties = reinterpret_cast(vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceSparseImageFormatProperties"));
+ vkGetImageSparseMemoryRequirements = reinterpret_cast(vkGetInstanceProcAddr(instance, "vkGetImageSparseMemoryRequirements"));
+ vkQueueBindSparse = reinterpret_cast(vkGetInstanceProcAddr(instance, "vkQueueBindSparse"));
+
+ vkCmdBeginRendering = reinterpret_cast(vkGetInstanceProcAddr(instance, "vkCmdBeginRendering"));
+ vkCmdEndRendering = reinterpret_cast(vkGetInstanceProcAddr(instance, "vkCmdEndRendering"));
+
vkCreateAndroidSurfaceKHR = reinterpret_cast(vkGetInstanceProcAddr(instance, "vkCreateAndroidSurfaceKHR"));
vkDestroySurfaceKHR = reinterpret_cast(vkGetInstanceProcAddr(instance, "vkDestroySurfaceKHR"));
vkCmdFillBuffer = reinterpret_cast(vkGetInstanceProcAddr(instance, "vkCmdFillBuffer"));
- vkGetPhysicalDeviceSurfaceSupportKHR = reinterpret_cast(vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceSurfaceSupportKHR"));
- vkGetPhysicalDeviceSurfaceCapabilitiesKHR = reinterpret_cast(vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceSurfaceCapabilitiesKHR"));
- vkGetPhysicalDeviceSurfaceFormatsKHR = reinterpret_cast(vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceSurfaceFormatsKHR"));
- vkGetPhysicalDeviceSurfacePresentModesKHR = reinterpret_cast(vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceSurfacePresentModesKHR"));
- vkCreateSwapchainKHR = reinterpret_cast(vkGetInstanceProcAddr(instance, "vkCreateSwapchainKHR"));
- vkDestroySwapchainKHR = reinterpret_cast(vkGetInstanceProcAddr(instance, "vkDestroySwapchainKHR"));
- vkGetSwapchainImagesKHR = reinterpret_cast(vkGetInstanceProcAddr(instance, "vkGetSwapchainImagesKHR"));
- vkAcquireNextImageKHR = reinterpret_cast(vkGetInstanceProcAddr(instance, "vkAcquireNextImageKHR"));
- vkQueuePresentKHR = reinterpret_cast(vkGetInstanceProcAddr(instance, "vkQueuePresentKHR"));
-
- vkResetCommandBuffer = reinterpret_cast(vkGetInstanceProcAddr(instance, "vkResetCommandBuffer"));
+ vkGetPhysicalDeviceSurfaceSupportKHR = reinterpret_cast(vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceSurfaceSupportKHR"));
+ vkGetPhysicalDeviceSurfaceCapabilitiesKHR = reinterpret_cast(vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceSurfaceCapabilitiesKHR"));
+ vkGetPhysicalDeviceSurfaceFormatsKHR = reinterpret_cast(vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceSurfaceFormatsKHR"));
+ vkGetPhysicalDeviceSurfacePresentModesKHR = reinterpret_cast(vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceSurfacePresentModesKHR"));
+ vkCreateSwapchainKHR = reinterpret_cast(vkGetInstanceProcAddr(instance, "vkCreateSwapchainKHR"));
+ vkDestroySwapchainKHR = reinterpret_cast(vkGetInstanceProcAddr(instance, "vkDestroySwapchainKHR"));
+ vkGetSwapchainImagesKHR = reinterpret_cast(vkGetInstanceProcAddr(instance, "vkGetSwapchainImagesKHR"));
+ vkAcquireNextImageKHR = reinterpret_cast(vkGetInstanceProcAddr(instance, "vkAcquireNextImageKHR"));
+ vkQueuePresentKHR = reinterpret_cast(vkGetInstanceProcAddr(instance, "vkQueuePresentKHR"));
+
+ vkResetCommandBuffer = reinterpret_cast(vkGetInstanceProcAddr(instance, "vkResetCommandBuffer"));
}
void freeVulkanLibrary()
diff --git a/base/VulkanAndroid.h b/base/VulkanAndroid.h
index f5e8b799c..d79ad970d 100644
--- a/base/VulkanAndroid.h
+++ b/base/VulkanAndroid.h
@@ -154,6 +154,11 @@ extern PFN_vkCmdBeginQuery vkCmdBeginQuery;
extern PFN_vkCmdEndQuery vkCmdEndQuery;
extern PFN_vkCmdResetQueryPool vkCmdResetQueryPool;
extern PFN_vkCmdCopyQueryPoolResults vkCmdCopyQueryPoolResults;
+extern PFN_vkGetPhysicalDeviceSparseImageFormatProperties vkGetPhysicalDeviceSparseImageFormatProperties;
+extern PFN_vkGetImageSparseMemoryRequirements vkGetImageSparseMemoryRequirements;
+extern PFN_vkQueueBindSparse vkQueueBindSparse;
+extern PFN_vkCmdBeginRendering vkCmdBeginRendering;
+extern PFN_vkCmdEndRendering vkCmdEndRendering;
extern PFN_vkCreateAndroidSurfaceKHR vkCreateAndroidSurfaceKHR;
extern PFN_vkDestroySurfaceKHR vkDestroySurfaceKHR;
diff --git a/examples/graphicspipelinelibrary/graphicspipelinelibrary.cpp b/examples/graphicspipelinelibrary/graphicspipelinelibrary.cpp
index da4a36f2d..cc0d711a6 100644
--- a/examples/graphicspipelinelibrary/graphicspipelinelibrary.cpp
+++ b/examples/graphicspipelinelibrary/graphicspipelinelibrary.cpp
@@ -199,15 +199,16 @@ class VulkanExample: public VulkanExampleBase
{
#if defined(__ANDROID__)
// Load shader from compressed asset
- AAsset* asset = AAssetManager_open(androidApp->activity->assetManager, fileName, AASSET_MODE_STREAMING);
+ AAsset* asset = AAssetManager_open(androidApp->activity->assetManager, fileName.c_str(), AASSET_MODE_STREAMING);
assert(asset);
size_t size = AAsset_getLength(asset);
assert(size > 0);
shaderInfo.size = size;
shaderInfo.code = new uint32_t[size / 4];
- AAsset_read(asset, shaderCode, size);
+ AAsset_read(asset, reinterpret_cast(shaderInfo.code), size);
AAsset_close(asset);
+ return true;
#else
std::ifstream is(fileName, std::ios::binary | std::ios::in | std::ios::ate);
diff --git a/examples/meshshader/meshshader.cpp b/examples/meshshader/meshshader.cpp
index f3c944c91..38bfdfe21 100644
--- a/examples/meshshader/meshshader.cpp
+++ b/examples/meshshader/meshshader.cpp
@@ -7,7 +7,6 @@
*/
#include "vulkanexamplebase.h"
-#include "VulkanglTFModel.h"
class VulkanExample : public VulkanExampleBase
{