diff --git a/android/examples/inlineuniformblocks/CMakeLists.txt b/android/examples/inlineuniformblocks/CMakeLists.txt
new file mode 100644
index 00000000..8cbced55
--- /dev/null
+++ b/android/examples/inlineuniformblocks/CMakeLists.txt
@@ -0,0 +1,36 @@
+cmake_minimum_required(VERSION 3.4.1 FATAL_ERROR)
+
+set(NAME inlineuniformblocks)
+
+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}/gli)
+include_directories(${EXTERNAL_DIR}/imgui)
+include_directories(${EXTERNAL_DIR}/assimp)
+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/inlineuniformblocks/build.gradle b/android/examples/inlineuniformblocks/build.gradle
new file mode 100644
index 00000000..b39fb789
--- /dev/null
+++ b/android/examples/inlineuniformblocks/build.gradle
@@ -0,0 +1,65 @@
+apply plugin: 'com.android.application'
+apply from: '../gradle/outputfilename.gradle'
+
+android {
+ compileSdkVersion 26
+ defaultConfig {
+ applicationId "de.saschawillems.vulkanInlineuniformblocks"
+ minSdkVersion 19
+ targetSdkVersion 26
+ versionCode 1
+ versionName "1.0"
+ ndk {
+ abiFilters "armeabi-v7a"
+ }
+ 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 '../../../data/shaders/base'
+ into "assets/shaders/base"
+ include '*.spv'
+ }
+
+ copy {
+ from '../../../data/shaders/inlineuniformblocks'
+ into 'assets/shaders/inlineuniformblocks'
+ include '*.*'
+ }
+
+ copy {
+ from '../../../data/models'
+ into 'assets/models'
+ include 'geosphere.obj'
+ }
+
+}
+
+preBuild.dependsOn copyTask
\ No newline at end of file
diff --git a/android/examples/inlineuniformblocks/src/main/AndroidManifest.xml b/android/examples/inlineuniformblocks/src/main/AndroidManifest.xml
new file mode 100644
index 00000000..ab24dcc3
--- /dev/null
+++ b/android/examples/inlineuniformblocks/src/main/AndroidManifest.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/android/examples/inlineuniformblocks/src/main/java/de/saschawillems/vulkanSample/VulkanActivity.java b/android/examples/inlineuniformblocks/src/main/java/de/saschawillems/vulkanSample/VulkanActivity.java
new file mode 100644
index 00000000..12e14fc6
--- /dev/null
+++ b/android/examples/inlineuniformblocks/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/multiview/CMakeLists.txt b/android/examples/multiview/CMakeLists.txt
new file mode 100644
index 00000000..867eeeeb
--- /dev/null
+++ b/android/examples/multiview/CMakeLists.txt
@@ -0,0 +1,36 @@
+cmake_minimum_required(VERSION 3.4.1 FATAL_ERROR)
+
+set(NAME multiview)
+
+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}/gli)
+include_directories(${EXTERNAL_DIR}/imgui)
+include_directories(${EXTERNAL_DIR}/assimp)
+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/multiview/build.gradle b/android/examples/multiview/build.gradle
new file mode 100644
index 00000000..69eea14f
--- /dev/null
+++ b/android/examples/multiview/build.gradle
@@ -0,0 +1,65 @@
+apply plugin: 'com.android.application'
+apply from: '../gradle/outputfilename.gradle'
+
+android {
+ compileSdkVersion 26
+ defaultConfig {
+ applicationId "de.saschawillems.vulkanMultiview"
+ minSdkVersion 19
+ targetSdkVersion 26
+ versionCode 1
+ versionName "1.0"
+ ndk {
+ abiFilters "armeabi-v7a"
+ }
+ 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 '../../../data/shaders/base'
+ into "assets/shaders/base"
+ include '*.spv'
+ }
+
+ copy {
+ from '../../../data/shaders/multiview'
+ into 'assets/shaders/multiview'
+ include '*.*'
+ }
+
+ copy {
+ from '../../../data/models'
+ into 'assets/models'
+ include 'sampleroom.dae'
+ }
+
+}
+
+preBuild.dependsOn copyTask
\ No newline at end of file
diff --git a/android/examples/multiview/src/main/AndroidManifest.xml b/android/examples/multiview/src/main/AndroidManifest.xml
new file mode 100644
index 00000000..97156f1f
--- /dev/null
+++ b/android/examples/multiview/src/main/AndroidManifest.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/android/examples/multiview/src/main/java/de/saschawillems/vulkanSample/VulkanActivity.java b/android/examples/multiview/src/main/java/de/saschawillems/vulkanSample/VulkanActivity.java
new file mode 100644
index 00000000..12e14fc6
--- /dev/null
+++ b/android/examples/multiview/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/settings.gradle b/android/settings.gradle
index 824344e3..e467c0d3 100644
--- a/android/settings.gradle
+++ b/android/settings.gradle
@@ -19,11 +19,13 @@ include 'examples/:geometryshader'
include 'examples/:hdr'
include 'examples/:imgui'
include 'examples/:indirectdraw'
+include 'examples/:inlineuniformblocks'
include 'examples/:instancing'
include 'examples/:inputattachments'
include 'examples/:mesh'
include 'examples/:multisampling'
include 'examples/:multithreading'
+include 'examples/:multiview'
include 'examples/:occlusionquery'
include 'examples/:offscreen'
include 'examples/:parallaxmapping'