diff --git a/android/triangle/triangle.NativeActivity/triangle.NativeActivity.vcxproj b/android/triangle/triangle.NativeActivity/triangle.NativeActivity.vcxproj
index 3fb4842e..be2f0ce9 100644
--- a/android/triangle/triangle.NativeActivity/triangle.NativeActivity.vcxproj
+++ b/android/triangle/triangle.NativeActivity/triangle.NativeActivity.vcxproj
@@ -149,7 +149,7 @@
CompileAsCpp
VK_NO_PROTOTYPES;VK_USE_PLATFORM_ANDROID_KHR;__STDINT_LIMITS
c++11
- ../../../external;../../../base;../../../external/glm;%(AdditionalIncludeDirectories)
+ ../../../external;../../../base;../../../external/glm;../../base;%(AdditionalIncludeDirectories)
%(LibraryDependencies);GLESv1_CM;EGL;
@@ -215,7 +215,7 @@
-
+
diff --git a/android/triangle/triangle.NativeActivity/triangle.NativeActivity.vcxproj.filters b/android/triangle/triangle.NativeActivity/triangle.NativeActivity.vcxproj.filters
index 923af197..f60379e1 100644
--- a/android/triangle/triangle.NativeActivity/triangle.NativeActivity.vcxproj.filters
+++ b/android/triangle/triangle.NativeActivity/triangle.NativeActivity.vcxproj.filters
@@ -7,8 +7,8 @@
-
+
\ No newline at end of file
diff --git a/android/triangle/triangle.NativeActivity/main.cpp b/android/triangle/triangle.NativeActivity/triangle.cpp
similarity index 97%
rename from android/triangle/triangle.NativeActivity/main.cpp
rename to android/triangle/triangle.NativeActivity/triangle.cpp
index f34c712e..a8df705d 100644
--- a/android/triangle/triangle.NativeActivity/main.cpp
+++ b/android/triangle/triangle.NativeActivity/triangle.cpp
@@ -17,7 +17,7 @@
#include
#define GLM_FORCE_RADIANS
-#define GLM_DEPTH_ZERO_TO_ONE
+#define GLM_FORCE_DEPTH_ZERO_TO_ONE
#include "glm/glm.hpp"
#include "glm/gtc/matrix_transform.hpp"
@@ -59,6 +59,11 @@ struct VulkanExample
VkPhysicalDeviceMemoryProperties deviceMemoryProperties;
std::vector shaderModules;
+ struct {
+ VkSemaphore presentComplete;
+ VkSemaphore submitSignal;
+ } semaphores;
+
struct {
VkBuffer buf;
VkDeviceMemory mem;
@@ -251,6 +256,15 @@ struct VulkanExample
VkResult err = vkCreatePipelineCache(device, &pipelineCacheCreateInfo, nullptr, &pipelineCache);
assert(!err);
+ // Create semaphores for synchronization
+ VkSemaphoreCreateInfo semaphoreCreateInfo = {};
+ semaphoreCreateInfo.sType = VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO;
+
+ err = vkCreateSemaphore(device, &semaphoreCreateInfo, nullptr, &semaphores.presentComplete);
+ assert(!err);
+ err = vkCreateSemaphore(device, &semaphoreCreateInfo, nullptr, &semaphores.submitSignal);
+ assert(!err);
+
createSetupCommandBuffer();
startSetupCommandBuffer();
@@ -318,6 +332,9 @@ struct VulkanExample
vkDestroyImage(device, depthStencil.image, nullptr);
vkFreeMemory(device, depthStencil.mem, nullptr);
+ vkDestroySemaphore(device, semaphores.presentComplete, nullptr);
+ vkDestroySemaphore(device, semaphores.submitSignal, nullptr);
+
vkDestroyPipelineCache(device, pipelineCache, nullptr);
vkDestroyDevice(device, nullptr);
vkDestroyInstance(instance, nullptr);
@@ -983,27 +1000,24 @@ struct VulkanExample
void draw()
{
VkResult err;
- VkSemaphore presentCompleteSemaphore;
- VkSemaphoreCreateInfo presentCompleteSemaphoreCreateInfo = {};
- presentCompleteSemaphoreCreateInfo.sType = VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO;
- presentCompleteSemaphoreCreateInfo.pNext = NULL;
-
- err = vkCreateSemaphore(device, &presentCompleteSemaphoreCreateInfo, nullptr, &presentCompleteSemaphore);
- assert(!err);
// Get next image in the swap chain (back/front buffer)
- err = swapChain.acquireNextImage(presentCompleteSemaphore, ¤tBuffer);
+ err = swapChain.acquireNextImage(semaphores.presentComplete, ¤tBuffer);
assert(!err);
// The submit infor strcuture contains a list of
// command buffers and semaphores to be submitted to a queue
// If you want to submit multiple command buffers, pass an array
+ VkPipelineStageFlags pipelineStages = VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT;
VkSubmitInfo submitInfo = {};
submitInfo.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO;
submitInfo.waitSemaphoreCount = 1;
- submitInfo.pWaitSemaphores = &presentCompleteSemaphore;
+ submitInfo.pWaitSemaphores = &semaphores.presentComplete;
submitInfo.commandBufferCount = 1;
submitInfo.pCommandBuffers = &drawCmdBuffers[currentBuffer];
+ submitInfo.pWaitDstStageMask = &pipelineStages;
+ submitInfo.signalSemaphoreCount = 1;
+ submitInfo.pSignalSemaphores = &semaphores.submitSignal;
// Submit to the graphics queue
err = vkQueueSubmit(queue, 1, &submitInfo, VK_NULL_HANDLE);
@@ -1011,11 +1025,9 @@ struct VulkanExample
// Present the current buffer to the swap chain
// This will display the image
- err = swapChain.queuePresent(queue, currentBuffer);
+ err = swapChain.queuePresent(queue, currentBuffer, semaphores.submitSignal);
assert(!err);
- vkDestroySemaphore(device, presentCompleteSemaphore, nullptr);
-
// Add a post present image memory barrier
// This will transform the frame buffer color attachment back
// to it's initial layout after it has been presented to the