Move entry point macros to separate header (#1120)
* Move entry point macros to separate header * Minor code cleanup * Updated macos CI
This commit is contained in:
parent
4d2117d3d9
commit
c598b1e7ab
5 changed files with 212 additions and 176 deletions
2
.github/workflows/build.yml
vendored
2
.github/workflows/build.yml
vendored
|
|
@ -43,7 +43,7 @@ jobs:
|
||||||
|
|
||||||
build_macOS:
|
build_macOS:
|
||||||
name: Build macOS
|
name: Build macOS
|
||||||
runs-on: macos-11
|
runs-on: macos-13
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
|
|
|
||||||
185
base/Entrypoints.h
Normal file
185
base/Entrypoints.h
Normal file
|
|
@ -0,0 +1,185 @@
|
||||||
|
/*
|
||||||
|
* Vulkan entry points
|
||||||
|
*
|
||||||
|
* Platform specific macros for the example main entry points
|
||||||
|
*
|
||||||
|
* Copyright (C) 2024 by Sascha Willems - www.saschawillems.de
|
||||||
|
*
|
||||||
|
* This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined(_WIN32)
|
||||||
|
/*
|
||||||
|
* Windows
|
||||||
|
*/
|
||||||
|
#define VULKAN_EXAMPLE_MAIN() \
|
||||||
|
VulkanExample *vulkanExample; \
|
||||||
|
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) \
|
||||||
|
{ \
|
||||||
|
if (vulkanExample != NULL) \
|
||||||
|
{ \
|
||||||
|
vulkanExample->handleMessages(hWnd, uMsg, wParam, lParam); \
|
||||||
|
} \
|
||||||
|
return (DefWindowProc(hWnd, uMsg, wParam, lParam)); \
|
||||||
|
} \
|
||||||
|
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int) \
|
||||||
|
{ \
|
||||||
|
for (int32_t i = 0; i < __argc; i++) { VulkanExample::args.push_back(__argv[i]); }; \
|
||||||
|
vulkanExample = new VulkanExample(); \
|
||||||
|
vulkanExample->initVulkan(); \
|
||||||
|
vulkanExample->setupWindow(hInstance, WndProc); \
|
||||||
|
vulkanExample->prepare(); \
|
||||||
|
vulkanExample->renderLoop(); \
|
||||||
|
delete(vulkanExample); \
|
||||||
|
return 0; \
|
||||||
|
}
|
||||||
|
|
||||||
|
#elif defined(VK_USE_PLATFORM_ANDROID_KHR)
|
||||||
|
/*
|
||||||
|
* Android
|
||||||
|
*/
|
||||||
|
#define VULKAN_EXAMPLE_MAIN() \
|
||||||
|
VulkanExample *vulkanExample; \
|
||||||
|
void android_main(android_app* state) \
|
||||||
|
{ \
|
||||||
|
vulkanExample = new VulkanExample(); \
|
||||||
|
state->userData = vulkanExample; \
|
||||||
|
state->onAppCmd = VulkanExample::handleAppCommand; \
|
||||||
|
state->onInputEvent = VulkanExample::handleAppInput; \
|
||||||
|
androidApp = state; \
|
||||||
|
vks::android::getDeviceConfig(); \
|
||||||
|
vulkanExample->renderLoop(); \
|
||||||
|
delete(vulkanExample); \
|
||||||
|
}
|
||||||
|
|
||||||
|
#elif defined(_DIRECT2DISPLAY)
|
||||||
|
/*
|
||||||
|
* Direct-to-display
|
||||||
|
*/
|
||||||
|
#define VULKAN_EXAMPLE_MAIN() \
|
||||||
|
VulkanExample *vulkanExample; \
|
||||||
|
static void handleEvent() \
|
||||||
|
{ \
|
||||||
|
} \
|
||||||
|
int main(const int argc, const char *argv[]) \
|
||||||
|
{ \
|
||||||
|
for (size_t i = 0; i < argc; i++) { VulkanExample::args.push_back(argv[i]); }; \
|
||||||
|
vulkanExample = new VulkanExample(); \
|
||||||
|
vulkanExample->initVulkan(); \
|
||||||
|
vulkanExample->prepare(); \
|
||||||
|
vulkanExample->renderLoop(); \
|
||||||
|
delete(vulkanExample); \
|
||||||
|
return 0; \
|
||||||
|
}
|
||||||
|
|
||||||
|
#elif defined(VK_USE_PLATFORM_DIRECTFB_EXT)
|
||||||
|
/*
|
||||||
|
* Direct FB
|
||||||
|
*/
|
||||||
|
#define VULKAN_EXAMPLE_MAIN() \
|
||||||
|
VulkanExample *vulkanExample; \
|
||||||
|
static void handleEvent(const DFBWindowEvent *event) \
|
||||||
|
{ \
|
||||||
|
if (vulkanExample != NULL) \
|
||||||
|
{ \
|
||||||
|
vulkanExample->handleEvent(event); \
|
||||||
|
} \
|
||||||
|
} \
|
||||||
|
int main(const int argc, const char *argv[]) \
|
||||||
|
{ \
|
||||||
|
for (size_t i = 0; i < argc; i++) { VulkanExample::args.push_back(argv[i]); }; \
|
||||||
|
vulkanExample = new VulkanExample(); \
|
||||||
|
vulkanExample->initVulkan(); \
|
||||||
|
vulkanExample->setupWindow(); \
|
||||||
|
vulkanExample->prepare(); \
|
||||||
|
vulkanExample->renderLoop(); \
|
||||||
|
delete(vulkanExample); \
|
||||||
|
return 0; \
|
||||||
|
}
|
||||||
|
|
||||||
|
#elif (defined(VK_USE_PLATFORM_WAYLAND_KHR) || defined(VK_USE_PLATFORM_HEADLESS_EXT))
|
||||||
|
/*
|
||||||
|
* Wayland / headless
|
||||||
|
*/
|
||||||
|
#define VULKAN_EXAMPLE_MAIN() \
|
||||||
|
VulkanExample *vulkanExample; \
|
||||||
|
int main(const int argc, const char *argv[]) \
|
||||||
|
{ \
|
||||||
|
for (size_t i = 0; i < argc; i++) { VulkanExample::args.push_back(argv[i]); }; \
|
||||||
|
vulkanExample = new VulkanExample(); \
|
||||||
|
vulkanExample->initVulkan(); \
|
||||||
|
vulkanExample->setupWindow(); \
|
||||||
|
vulkanExample->prepare(); \
|
||||||
|
vulkanExample->renderLoop(); \
|
||||||
|
delete(vulkanExample); \
|
||||||
|
return 0; \
|
||||||
|
}
|
||||||
|
|
||||||
|
#elif defined(VK_USE_PLATFORM_XCB_KHR)
|
||||||
|
/*
|
||||||
|
* X11 Xcb
|
||||||
|
*/
|
||||||
|
#define VULKAN_EXAMPLE_MAIN() \
|
||||||
|
VulkanExample *vulkanExample; \
|
||||||
|
static void handleEvent(const xcb_generic_event_t *event) \
|
||||||
|
{ \
|
||||||
|
if (vulkanExample != NULL) \
|
||||||
|
{ \
|
||||||
|
vulkanExample->handleEvent(event); \
|
||||||
|
} \
|
||||||
|
} \
|
||||||
|
int main(const int argc, const char *argv[]) \
|
||||||
|
{ \
|
||||||
|
for (size_t i = 0; i < argc; i++) { VulkanExample::args.push_back(argv[i]); }; \
|
||||||
|
vulkanExample = new VulkanExample(); \
|
||||||
|
vulkanExample->initVulkan(); \
|
||||||
|
vulkanExample->setupWindow(); \
|
||||||
|
vulkanExample->prepare(); \
|
||||||
|
vulkanExample->renderLoop(); \
|
||||||
|
delete(vulkanExample); \
|
||||||
|
return 0; \
|
||||||
|
}
|
||||||
|
|
||||||
|
#elif (defined(VK_USE_PLATFORM_IOS_MVK) || defined(VK_USE_PLATFORM_MACOS_MVK) || defined(VK_USE_PLATFORM_METAL_EXT))
|
||||||
|
/*
|
||||||
|
* iOS and macOS (using MoltenVK)
|
||||||
|
*/
|
||||||
|
#if defined(VK_EXAMPLE_XCODE_GENERATED)
|
||||||
|
#define VULKAN_EXAMPLE_MAIN() \
|
||||||
|
VulkanExample *vulkanExample; \
|
||||||
|
int main(const int argc, const char *argv[]) \
|
||||||
|
{ \
|
||||||
|
@autoreleasepool \
|
||||||
|
{ \
|
||||||
|
for (size_t i = 0; i < argc; i++) { VulkanExample::args.push_back(argv[i]); }; \
|
||||||
|
vulkanExample = new VulkanExample(); \
|
||||||
|
vulkanExample->initVulkan(); \
|
||||||
|
vulkanExample->setupWindow(nullptr); \
|
||||||
|
vulkanExample->prepare(); \
|
||||||
|
vulkanExample->renderLoop(); \
|
||||||
|
delete(vulkanExample); \
|
||||||
|
} \
|
||||||
|
return 0; \
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
#define VULKAN_EXAMPLE_MAIN()
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#elif defined(VK_USE_PLATFORM_SCREEN_QNX)
|
||||||
|
/*
|
||||||
|
* QNX Screen
|
||||||
|
*/
|
||||||
|
#define VULKAN_EXAMPLE_MAIN() \
|
||||||
|
VulkanExample *vulkanExample; \
|
||||||
|
int main(const int argc, const char *argv[]) \
|
||||||
|
{ \
|
||||||
|
for (int i = 0; i < argc; i++) { VulkanExample::args.push_back(argv[i]); }; \
|
||||||
|
vulkanExample = new VulkanExample(); \
|
||||||
|
vulkanExample->initVulkan(); \
|
||||||
|
vulkanExample->setupWindow(); \
|
||||||
|
vulkanExample->prepare(); \
|
||||||
|
vulkanExample->renderLoop(); \
|
||||||
|
delete(vulkanExample); \
|
||||||
|
return 0; \
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
@ -414,152 +414,4 @@ public:
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
// OS specific macros for the example main entry points
|
#include "Entrypoints.h"
|
||||||
#if defined(_WIN32)
|
|
||||||
// Windows entry point
|
|
||||||
#define VULKAN_EXAMPLE_MAIN() \
|
|
||||||
VulkanExample *vulkanExample; \
|
|
||||||
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) \
|
|
||||||
{ \
|
|
||||||
if (vulkanExample != NULL) \
|
|
||||||
{ \
|
|
||||||
vulkanExample->handleMessages(hWnd, uMsg, wParam, lParam); \
|
|
||||||
} \
|
|
||||||
return (DefWindowProc(hWnd, uMsg, wParam, lParam)); \
|
|
||||||
} \
|
|
||||||
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int) \
|
|
||||||
{ \
|
|
||||||
for (int32_t i = 0; i < __argc; i++) { VulkanExample::args.push_back(__argv[i]); }; \
|
|
||||||
vulkanExample = new VulkanExample(); \
|
|
||||||
vulkanExample->initVulkan(); \
|
|
||||||
vulkanExample->setupWindow(hInstance, WndProc); \
|
|
||||||
vulkanExample->prepare(); \
|
|
||||||
vulkanExample->renderLoop(); \
|
|
||||||
delete(vulkanExample); \
|
|
||||||
return 0; \
|
|
||||||
}
|
|
||||||
#elif defined(VK_USE_PLATFORM_ANDROID_KHR)
|
|
||||||
// Android entry point
|
|
||||||
#define VULKAN_EXAMPLE_MAIN() \
|
|
||||||
VulkanExample *vulkanExample; \
|
|
||||||
void android_main(android_app* state) \
|
|
||||||
{ \
|
|
||||||
vulkanExample = new VulkanExample(); \
|
|
||||||
state->userData = vulkanExample; \
|
|
||||||
state->onAppCmd = VulkanExample::handleAppCommand; \
|
|
||||||
state->onInputEvent = VulkanExample::handleAppInput; \
|
|
||||||
androidApp = state; \
|
|
||||||
vks::android::getDeviceConfig(); \
|
|
||||||
vulkanExample->renderLoop(); \
|
|
||||||
delete(vulkanExample); \
|
|
||||||
}
|
|
||||||
#elif defined(_DIRECT2DISPLAY)
|
|
||||||
// Linux entry point with direct to display wsi
|
|
||||||
#define VULKAN_EXAMPLE_MAIN() \
|
|
||||||
VulkanExample *vulkanExample; \
|
|
||||||
static void handleEvent() \
|
|
||||||
{ \
|
|
||||||
} \
|
|
||||||
int main(const int argc, const char *argv[]) \
|
|
||||||
{ \
|
|
||||||
for (size_t i = 0; i < argc; i++) { VulkanExample::args.push_back(argv[i]); }; \
|
|
||||||
vulkanExample = new VulkanExample(); \
|
|
||||||
vulkanExample->initVulkan(); \
|
|
||||||
vulkanExample->prepare(); \
|
|
||||||
vulkanExample->renderLoop(); \
|
|
||||||
delete(vulkanExample); \
|
|
||||||
return 0; \
|
|
||||||
}
|
|
||||||
#elif defined(VK_USE_PLATFORM_DIRECTFB_EXT)
|
|
||||||
#define VULKAN_EXAMPLE_MAIN() \
|
|
||||||
VulkanExample *vulkanExample; \
|
|
||||||
static void handleEvent(const DFBWindowEvent *event) \
|
|
||||||
{ \
|
|
||||||
if (vulkanExample != NULL) \
|
|
||||||
{ \
|
|
||||||
vulkanExample->handleEvent(event); \
|
|
||||||
} \
|
|
||||||
} \
|
|
||||||
int main(const int argc, const char *argv[]) \
|
|
||||||
{ \
|
|
||||||
for (size_t i = 0; i < argc; i++) { VulkanExample::args.push_back(argv[i]); }; \
|
|
||||||
vulkanExample = new VulkanExample(); \
|
|
||||||
vulkanExample->initVulkan(); \
|
|
||||||
vulkanExample->setupWindow(); \
|
|
||||||
vulkanExample->prepare(); \
|
|
||||||
vulkanExample->renderLoop(); \
|
|
||||||
delete(vulkanExample); \
|
|
||||||
return 0; \
|
|
||||||
}
|
|
||||||
#elif (defined(VK_USE_PLATFORM_WAYLAND_KHR) || defined(VK_USE_PLATFORM_HEADLESS_EXT))
|
|
||||||
#define VULKAN_EXAMPLE_MAIN() \
|
|
||||||
VulkanExample *vulkanExample; \
|
|
||||||
int main(const int argc, const char *argv[]) \
|
|
||||||
{ \
|
|
||||||
for (size_t i = 0; i < argc; i++) { VulkanExample::args.push_back(argv[i]); }; \
|
|
||||||
vulkanExample = new VulkanExample(); \
|
|
||||||
vulkanExample->initVulkan(); \
|
|
||||||
vulkanExample->setupWindow(); \
|
|
||||||
vulkanExample->prepare(); \
|
|
||||||
vulkanExample->renderLoop(); \
|
|
||||||
delete(vulkanExample); \
|
|
||||||
return 0; \
|
|
||||||
}
|
|
||||||
#elif defined(VK_USE_PLATFORM_XCB_KHR)
|
|
||||||
#define VULKAN_EXAMPLE_MAIN() \
|
|
||||||
VulkanExample *vulkanExample; \
|
|
||||||
static void handleEvent(const xcb_generic_event_t *event) \
|
|
||||||
{ \
|
|
||||||
if (vulkanExample != NULL) \
|
|
||||||
{ \
|
|
||||||
vulkanExample->handleEvent(event); \
|
|
||||||
} \
|
|
||||||
} \
|
|
||||||
int main(const int argc, const char *argv[]) \
|
|
||||||
{ \
|
|
||||||
for (size_t i = 0; i < argc; i++) { VulkanExample::args.push_back(argv[i]); }; \
|
|
||||||
vulkanExample = new VulkanExample(); \
|
|
||||||
vulkanExample->initVulkan(); \
|
|
||||||
vulkanExample->setupWindow(); \
|
|
||||||
vulkanExample->prepare(); \
|
|
||||||
vulkanExample->renderLoop(); \
|
|
||||||
delete(vulkanExample); \
|
|
||||||
return 0; \
|
|
||||||
}
|
|
||||||
#elif (defined(VK_USE_PLATFORM_IOS_MVK) || defined(VK_USE_PLATFORM_MACOS_MVK) || defined(VK_USE_PLATFORM_METAL_EXT))
|
|
||||||
#if defined(VK_EXAMPLE_XCODE_GENERATED)
|
|
||||||
#define VULKAN_EXAMPLE_MAIN() \
|
|
||||||
VulkanExample *vulkanExample; \
|
|
||||||
int main(const int argc, const char *argv[]) \
|
|
||||||
{ \
|
|
||||||
@autoreleasepool \
|
|
||||||
{ \
|
|
||||||
for (size_t i = 0; i < argc; i++) { VulkanExample::args.push_back(argv[i]); }; \
|
|
||||||
vulkanExample = new VulkanExample(); \
|
|
||||||
vulkanExample->initVulkan(); \
|
|
||||||
vulkanExample->setupWindow(nullptr); \
|
|
||||||
vulkanExample->prepare(); \
|
|
||||||
vulkanExample->renderLoop(); \
|
|
||||||
delete(vulkanExample); \
|
|
||||||
} \
|
|
||||||
return 0; \
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
#define VULKAN_EXAMPLE_MAIN()
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#elif defined(VK_USE_PLATFORM_SCREEN_QNX)
|
|
||||||
#define VULKAN_EXAMPLE_MAIN() \
|
|
||||||
VulkanExample *vulkanExample; \
|
|
||||||
int main(const int argc, const char *argv[]) \
|
|
||||||
{ \
|
|
||||||
for (int i = 0; i < argc; i++) { VulkanExample::args.push_back(argv[i]); }; \
|
|
||||||
vulkanExample = new VulkanExample(); \
|
|
||||||
vulkanExample->initVulkan(); \
|
|
||||||
vulkanExample->setupWindow(); \
|
|
||||||
vulkanExample->prepare(); \
|
|
||||||
vulkanExample->renderLoop(); \
|
|
||||||
delete(vulkanExample); \
|
|
||||||
return 0; \
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
* With conditional rendering it's possible to execute certain rendering commands based on a buffer value instead of having to rebuild the command buffers.
|
* With conditional rendering it's possible to execute certain rendering commands based on a buffer value instead of having to rebuild the command buffers.
|
||||||
* This example sets up a conditional buffer with one value per glTF part, that is used to toggle visibility of single model parts.
|
* This example sets up a conditional buffer with one value per glTF part, that is used to toggle visibility of single model parts.
|
||||||
*
|
*
|
||||||
* Copyright (C) 2018-2023 by Sascha Willems - www.saschawillems.de
|
* Copyright (C) 2018-2024 by Sascha Willems - www.saschawillems.de
|
||||||
*
|
*
|
||||||
* This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
|
* This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
|
||||||
*/
|
*/
|
||||||
|
|
@ -14,12 +14,11 @@
|
||||||
#include "vulkanexamplebase.h"
|
#include "vulkanexamplebase.h"
|
||||||
#include "VulkanglTFModel.h"
|
#include "VulkanglTFModel.h"
|
||||||
|
|
||||||
|
|
||||||
class VulkanExample : public VulkanExampleBase
|
class VulkanExample : public VulkanExampleBase
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
PFN_vkCmdBeginConditionalRenderingEXT vkCmdBeginConditionalRenderingEXT;
|
PFN_vkCmdBeginConditionalRenderingEXT vkCmdBeginConditionalRenderingEXT{ VK_NULL_HANDLE };
|
||||||
PFN_vkCmdEndConditionalRenderingEXT vkCmdEndConditionalRenderingEXT;
|
PFN_vkCmdEndConditionalRenderingEXT vkCmdEndConditionalRenderingEXT{ VK_NULL_HANDLE };
|
||||||
|
|
||||||
vkglTF::Model scene;
|
vkglTF::Model scene;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@
|
||||||
*
|
*
|
||||||
* Example by Nate Morrical (https://github.com/natevm)
|
* Example by Nate Morrical (https://github.com/natevm)
|
||||||
*
|
*
|
||||||
* Copyright (C) 2019-2023 by Sascha Willems - www.saschawillems.de
|
* Copyright (C) 2019-2024 by Sascha Willems - www.saschawillems.de
|
||||||
*
|
*
|
||||||
* This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
|
* This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
|
||||||
*/
|
*/
|
||||||
|
|
@ -15,32 +15,32 @@
|
||||||
// Holds data for a ray tracing scratch buffer that is used as a temporary storage
|
// Holds data for a ray tracing scratch buffer that is used as a temporary storage
|
||||||
struct RayTracingScratchBuffer
|
struct RayTracingScratchBuffer
|
||||||
{
|
{
|
||||||
uint64_t deviceAddress = 0;
|
uint64_t deviceAddress{ 0 };
|
||||||
VkBuffer handle = VK_NULL_HANDLE;
|
VkBuffer handle{ VK_NULL_HANDLE };
|
||||||
VkDeviceMemory memory = VK_NULL_HANDLE;
|
VkDeviceMemory memory{ VK_NULL_HANDLE };
|
||||||
};
|
};
|
||||||
|
|
||||||
// Ray tracing acceleration structure
|
// Ray tracing acceleration structure
|
||||||
struct AccelerationStructure {
|
struct AccelerationStructure {
|
||||||
VkAccelerationStructureKHR handle;
|
VkAccelerationStructureKHR handle;
|
||||||
uint64_t deviceAddress = 0;
|
uint64_t deviceAddress{ 0 };
|
||||||
VkDeviceMemory memory;
|
VkDeviceMemory memory{ VK_NULL_HANDLE };
|
||||||
VkBuffer buffer;
|
VkBuffer buffer;
|
||||||
};
|
};
|
||||||
|
|
||||||
class VulkanExample : public VulkanExampleBase
|
class VulkanExample : public VulkanExampleBase
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
PFN_vkGetBufferDeviceAddressKHR vkGetBufferDeviceAddressKHR;
|
PFN_vkGetBufferDeviceAddressKHR vkGetBufferDeviceAddressKHR{ VK_NULL_HANDLE };
|
||||||
PFN_vkCreateAccelerationStructureKHR vkCreateAccelerationStructureKHR;
|
PFN_vkCreateAccelerationStructureKHR vkCreateAccelerationStructureKHR{ VK_NULL_HANDLE };
|
||||||
PFN_vkDestroyAccelerationStructureKHR vkDestroyAccelerationStructureKHR;
|
PFN_vkDestroyAccelerationStructureKHR vkDestroyAccelerationStructureKHR{ VK_NULL_HANDLE };
|
||||||
PFN_vkGetAccelerationStructureBuildSizesKHR vkGetAccelerationStructureBuildSizesKHR;
|
PFN_vkGetAccelerationStructureBuildSizesKHR vkGetAccelerationStructureBuildSizesKHR{ VK_NULL_HANDLE };
|
||||||
PFN_vkGetAccelerationStructureDeviceAddressKHR vkGetAccelerationStructureDeviceAddressKHR;
|
PFN_vkGetAccelerationStructureDeviceAddressKHR vkGetAccelerationStructureDeviceAddressKHR{ VK_NULL_HANDLE };
|
||||||
PFN_vkCmdBuildAccelerationStructuresKHR vkCmdBuildAccelerationStructuresKHR;
|
PFN_vkCmdBuildAccelerationStructuresKHR vkCmdBuildAccelerationStructuresKHR{ VK_NULL_HANDLE };
|
||||||
PFN_vkBuildAccelerationStructuresKHR vkBuildAccelerationStructuresKHR;
|
PFN_vkBuildAccelerationStructuresKHR vkBuildAccelerationStructuresKHR{ VK_NULL_HANDLE };
|
||||||
PFN_vkCmdTraceRaysKHR vkCmdTraceRaysKHR;
|
PFN_vkCmdTraceRaysKHR vkCmdTraceRaysKHR{ VK_NULL_HANDLE };
|
||||||
PFN_vkGetRayTracingShaderGroupHandlesKHR vkGetRayTracingShaderGroupHandlesKHR;
|
PFN_vkGetRayTracingShaderGroupHandlesKHR vkGetRayTracingShaderGroupHandlesKHR{ VK_NULL_HANDLE };
|
||||||
PFN_vkCreateRayTracingPipelinesKHR vkCreateRayTracingPipelinesKHR;
|
PFN_vkCreateRayTracingPipelinesKHR vkCreateRayTracingPipelinesKHR{ VK_NULL_HANDLE };
|
||||||
|
|
||||||
VkPhysicalDeviceRayTracingPipelinePropertiesKHR rayTracingPipelineProperties{};
|
VkPhysicalDeviceRayTracingPipelinePropertiesKHR rayTracingPipelineProperties{};
|
||||||
VkPhysicalDeviceAccelerationStructureFeaturesKHR accelerationStructureFeatures{};
|
VkPhysicalDeviceAccelerationStructureFeaturesKHR accelerationStructureFeatures{};
|
||||||
|
|
@ -54,7 +54,7 @@ public:
|
||||||
|
|
||||||
vks::Buffer vertexBuffer;
|
vks::Buffer vertexBuffer;
|
||||||
vks::Buffer indexBuffer;
|
vks::Buffer indexBuffer;
|
||||||
uint32_t indexCount;
|
uint32_t indexCount{ 0 };
|
||||||
vks::Buffer transformBuffer;
|
vks::Buffer transformBuffer;
|
||||||
std::vector<VkRayTracingShaderGroupCreateInfoKHR> shaderGroups{};
|
std::vector<VkRayTracingShaderGroupCreateInfoKHR> shaderGroups{};
|
||||||
vks::Buffer raygenShaderBindingTable;
|
vks::Buffer raygenShaderBindingTable;
|
||||||
|
|
@ -66,7 +66,7 @@ public:
|
||||||
VkImage image;
|
VkImage image;
|
||||||
VkImageView view;
|
VkImageView view;
|
||||||
VkFormat format;
|
VkFormat format;
|
||||||
} storageImage;
|
} storageImage{};
|
||||||
|
|
||||||
struct UniformData {
|
struct UniformData {
|
||||||
glm::mat4 viewInverse;
|
glm::mat4 viewInverse;
|
||||||
|
|
@ -74,10 +74,10 @@ public:
|
||||||
} uniformData;
|
} uniformData;
|
||||||
vks::Buffer ubo;
|
vks::Buffer ubo;
|
||||||
|
|
||||||
VkPipeline pipeline;
|
VkPipeline pipeline{ VK_NULL_HANDLE };
|
||||||
VkPipelineLayout pipelineLayout;
|
VkPipelineLayout pipelineLayout{ VK_NULL_HANDLE };
|
||||||
VkDescriptorSet descriptorSet;
|
VkDescriptorSet descriptorSet{ VK_NULL_HANDLE };
|
||||||
VkDescriptorSetLayout descriptorSetLayout;
|
VkDescriptorSetLayout descriptorSetLayout{ VK_NULL_HANDLE };
|
||||||
|
|
||||||
VulkanExample() : VulkanExampleBase()
|
VulkanExample() : VulkanExampleBase()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue