Add updated iOS App support to the Vulkan examples (#1119)

* Fix clang Objective-C++ flags for macOS command line builds

* Fix getAssetPath() and getShaderBasePath() for macOS command line builds

* Protect debugUtilsMessageCallback() from failing when pMessageIdName is NULL

* Fix a few clang function override and mismatched type warnings

* Fix validation layer warnings on exit for computeraytracing example

* Fix regression in text visibility toggle for textOverlay example

* Support VK_USE_PLATFORM_METAL_EXT vs. deprecated VK_USE_PLATFORM_MACOS_MVK / DVK_USE_PLATFORM_IOS_MVK

* Check dynamic state features before enabling capabilities in dynamicstate example

* Fix vkCmdDraw() vertexCount argument (PARTICLE_COUNT) in particlesystem example

* Update examples list and restore benchmarking script (to top level)

* Fix validation warning in descriptorindexing example

* Fix device max recursion depth validation warnings in ray tracing examples

* Fix OpenMP build settings for texture3d example on all platforms

* Update and simplify build instructions for macOS

* Update CI script with correct library path for libomp on macOS x86_64

* Update CI scipt to install libomp prior to macOS builds

* Trying one more time to get the CI script working for macOS libomp

* Fix vertexCount argument using calculated size in particlesystem example

* Fix combined image descriptor offset calculation in descriptorbuffer example

* Add iOS App support for Vulkan examples on simulator and physical devices

* Add continuous integration (CI) script for iOS

* Update CI script to build iOS using Xcode 14 via macos-12 runner-image

* Update iOS project docs for Xcode 14 and rename ios folder to apple

* Update macOS docs and CI script to use LIBOMP_PREFIX for OpenMP library path

* Delete benchmark-all-validate.py

Delete benchmark script as per feedback from Sascha Willems

* Update debugprintf example documentation in examples.h
This commit is contained in:
SRSaunders 2024-05-22 15:07:27 -04:00 committed by GitHub
parent 3d4446fa15
commit ba927eab6c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
38 changed files with 2755 additions and 9 deletions

View file

@ -42,7 +42,7 @@ jobs:
cmake --build .
build_macOS:
name: Build Mac
name: Build macOS
runs-on: macos-11
steps:
- uses: actions/checkout@v3
@ -57,8 +57,31 @@ jobs:
cd ~/VulkanSDK/latest
sudo python ./install_vulkan.py
brew install libomp
brew --prefix libomp
- name: Build
run: |
cmake -G "Xcode" -DOpenMP_omp_LIBRARY=/usr/local/opt/libomp/lib/libomp.dylib
export LIBOMP_PREFIX=$(brew --prefix libomp)
cmake -G "Xcode" -DOpenMP_omp_LIBRARY=$LIBOMP_PREFIX/lib/libomp.dylib .
cmake --build .
build_iOS:
name: Build iOS
runs-on: macos-12
steps:
- uses: actions/checkout@v3
with:
submodules: "recursive"
- name: Setup
run: |
curl -L "https://sdk.lunarg.com/sdk/download/latest/mac/vulkan-sdk.dmg" -o /tmp/vulkan-sdk.dmg
hdiutil attach /tmp/vulkan-sdk.dmg -mountpoint /Volumes/vulkan-sdk
/Volumes/vulkan-sdk/InstallVulkan.app/Contents/MacOS/InstallVulkan \
--root ~/VulkanSDK/latest --accept-licenses --default-answer --confirm-command install
cd ~/VulkanSDK/latest
sudo python ./install_vulkan.py
- name: Build
run: |
cd apple
rm MoltenVK.xcframework
ln -s ~/VulkanSDK/latest/macOS/lib/MoltenVK.xcframework
xcodebuild -scheme examples-ios build CODE_SIGNING_ALLOWED=NO
xcodebuild -scheme examples-macos build

View file

@ -63,12 +63,13 @@ Open **vulkan_sdk.dmg** and install the Vulkan SDK with *System Global Installat
Install **libomp** from [homebrew](https://brew.sh) using:
```brew install libomp```
Find the **libomp** path prefix using:
```brew --prefix libomp```
Use the **libomp** path prefix to adjust the path for ```-DOpenMP_omp_LIBRARY=``` in the cmake command below.
Define the **libomp** path prefix using:
```export LIBOMP_PREFIX=$(brew --prefix libomp)```
Use [CMake](https://cmake.org) to generate a build configuration for Xcode or your preferred build method (e.g. Unix Makefiles or Ninja).
Example of cmake generating for Xcode with **libomp** path defined for homebrew on Apple Silicon:
```cmake -G "Xcode" -DOpenMP_omp_LIBRARY=/opt/homebrew/opt/libomp/lib/libomp.dylib```
Example of cmake generating for Xcode with **libomp** library path defined:
```cmake -G "Xcode" -DOpenMP_omp_LIBRARY=$LIBOMP_PREFIX/lib/libomp.dylib .```
####iOS
Navigate to the [apple](apple/) folder and follow the instructions in [README\_MoltenVK_Examples.md](apple/README_MoltenVK_Examples.md)

135
apple/MVKExample.cpp Normal file
View file

@ -0,0 +1,135 @@
/*
* MVKExample.cpp
*
* Copyright (c) 2016-2017 The Brenwill Workshop Ltd.
* This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
*/
#include "MVKExample.h"
#include "examples.h"
void MVKExample::renderFrame() {
_vulkanExample->renderFrame();
}
void MVKExample::displayLinkOutputCb() { // SRS - expose VulkanExampleBase::displayLinkOutputCb() to DemoViewController
_vulkanExample->displayLinkOutputCb();
}
void MVKExample::keyPressed(uint32_t keyChar) { // SRS - handle keyboard key presses only (e.g. Pause, Space, etc)
switch (keyChar)
{
case KEY_P:
_vulkanExample->paused = !_vulkanExample->paused;
break;
case KEY_1: // SRS - support keyboards with no function keys
case KEY_F1:
_vulkanExample->UIOverlay.visible = !_vulkanExample->UIOverlay.visible;
_vulkanExample->UIOverlay.updated = true;
break;
default:
_vulkanExample->keyPressed(keyChar);
break;
}
}
void MVKExample::keyDown(uint32_t keyChar) { // SRS - handle physical keyboard key down/up actions and presses
switch (keyChar)
{
case KEY_W:
case KEY_Z: // for French AZERTY keyboards
_vulkanExample->camera.keys.up = true;
break;
case KEY_S:
_vulkanExample->camera.keys.down = true;
break;
case KEY_A:
case KEY_Q: // for French AZERTY keyboards
_vulkanExample->camera.keys.left = true;
break;
case KEY_D:
_vulkanExample->camera.keys.right = true;
break;
default:
MVKExample::keyPressed(keyChar);
break;
}
}
void MVKExample::keyUp(uint32_t keyChar) {
switch (keyChar)
{
case KEY_W:
case KEY_Z: // for French AZERTY keyboards
_vulkanExample->camera.keys.up = false;
break;
case KEY_S:
_vulkanExample->camera.keys.down = false;
break;
case KEY_A:
case KEY_Q: // for French AZERTY keyboards
_vulkanExample->camera.keys.left = false;
break;
case KEY_D:
_vulkanExample->camera.keys.right = false;
break;
default:
break;
}
}
void MVKExample::mouseDown(double x, double y) {
_vulkanExample->mouseState.position = glm::vec2(x, y);
_vulkanExample->mouseState.buttons.left = true;
}
void MVKExample::mouseUp() {
_vulkanExample->mouseState.buttons.left = false;
}
void MVKExample::rightMouseDown(double x, double y) {
_vulkanExample->mouseState.position = glm::vec2(x, y);
_vulkanExample->mouseState.buttons.right = true;
}
void MVKExample::rightMouseUp() {
_vulkanExample->mouseState.buttons.right = false;
}
void MVKExample::otherMouseDown(double x, double y) {
_vulkanExample->mouseState.position = glm::vec2(x, y);
_vulkanExample->mouseState.buttons.middle = true;
}
void MVKExample::otherMouseUp() {
_vulkanExample->mouseState.buttons.middle = false;
}
void MVKExample::mouseDragged(double x, double y) {
_vulkanExample->mouseDragged(x, y);
}
void MVKExample::scrollWheel(short wheelDelta) {
_vulkanExample->camera.translate(glm::vec3(0.0f, 0.0f, wheelDelta * 0.05f * _vulkanExample->camera.movementSpeed));
_vulkanExample->viewUpdated = true;
}
void MVKExample::fullScreen(bool fullscreen) {
_vulkanExample->settings.fullscreen = fullscreen;
}
MVKExample::MVKExample(void* view, double scaleUI) {
_vulkanExample = new VulkanExample();
_vulkanExample->initVulkan();
_vulkanExample->setupWindow(view);
_vulkanExample->settings.vsync = true; // SRS - set vsync flag since this iOS/macOS example app uses displayLink vsync rendering
_vulkanExample->UIOverlay.scale = scaleUI; // SRS - set UIOverlay scale to maintain relative proportions/readability on retina displays
_vulkanExample->prepare();
_vulkanExample->renderLoop(); // SRS - this inits destWidth/destHeight/lastTimestamp/tPrevEnd, then falls through and returns
}
MVKExample::~MVKExample() {
vkDeviceWaitIdle(_vulkanExample->vulkanDevice->logicalDevice);
delete(_vulkanExample);
}

42
apple/MVKExample.h Normal file
View file

@ -0,0 +1,42 @@
/*
* MVKExample.h
*
* Copyright (c) 2016-2017 The Brenwill Workshop Ltd.
* This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
*/
#pragma once
#include "vulkanexamplebase.h"
// Wrapper class for the SW VulkanExample instance.
class MVKExample {
public:
void renderFrame();
void displayLinkOutputCb(); // SRS - expose VulkanExampleBase::displayLinkOutputCb() to DemoViewController
void keyPressed(uint32_t keyChar); // SRS - expose keyboard events to DemoViewController
void keyDown(uint32_t keyChar);
void keyUp(uint32_t keyChar);
void mouseDown(double x, double y); // SRS - expose mouse events to DemoViewController
void mouseUp();
void rightMouseDown(double x, double y);
void rightMouseUp();
void otherMouseDown(double x, double y);
void otherMouseUp();
void mouseDragged(double x, double y);
void scrollWheel(short wheelDelta);
void fullScreen(bool fullscreen); // SRS - expose VulkanExampleBase::settings.fullscreen to DemoView (macOS only)
MVKExample(void* view, double scaleUI); // SRS - support UIOverlay scaling parameter based on device and display type
~MVKExample();
protected:
VulkanExampleBase* _vulkanExample;
};

1
apple/MoltenVK.xcframework Symbolic link
View file

@ -0,0 +1 @@
/Users/steve/VulkanSDK/1.3.280.1/macOS/lib/MoltenVK.xcframework

View file

@ -0,0 +1,73 @@
<a class="site-logo" href="https://www.moltengl.com/moltenvk/" title="MoltenVK">
<img src="images/MoltenVK-Logo-Banner.png" alt="MoltenVK Home" style="width:256px;height:auto">
</a>
#MoltenVK Vulkan Examples
Copyright (c) 2016-2024 [The Brenwill Workshop Ltd.](http://www.brenwill.com).
This document is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
*This document is written in [Markdown](http://en.wikipedia.org/wiki/Markdown) format.
For best results, use a Markdown reader.*
<a name="intro"></a>
Introduction
------------
The *Xcode* project in this folder builds and runs the *Vulkan* examples in this
repository on *iOS*, the *iOS Simulator*, and *macOS*, using the **MoltenVK** *Vulkan* driver.
<a name="installing-moltenvk"></a>
Installing MoltenVK
-------------------
These examples require **Vulkan SDK 1.3.275.0** or later.
Follow these instructions to install the latest Vulkan SDK containing **MoltenVK**:
1. [Download](https://sdk.lunarg.com/sdk/download/latest/mac/vulkan_sdk.dmg) the latest
**Vulkan SDK** for macOS. This includes the required **MoltenVK** library frameworks
for *iOS*, the *iOS Simulator*, and *macOS*. The latest getting started information can be found at [Getting Started](https://vulkan.lunarg.com/doc/sdk/latest/mac/getting_started.html).
2. Install the downloaded **vulkansdk-macos-*version*.dmg** package to the default location.
3. Open a *Terminal* session and navigate to the directory containing this document,
remove the existing `MoltenVK.xcframework` symbolic link in this directory, and create
a new symbolic link pointing to `MoltenVK.xcframework` within the **Vulkan SDK**:
cd path-to-this-directory
rm MoltenVK.xcframework
ln -s path-to-VulkanSDK/macOS/lib/MoltenVK.xcframework
<a name="running-examples"></a>
Running the Vulkan Examples
---------------------------
The single `examples.xcodeproj` *Xcode* project can be used to run any of the examples
in this repository on *iOS*, the *iOS Simulator*, or *macOS*. To do so, follow these instructions:
1. Open the `examples.xcodeproj` *Xcode* project using **Xcode 14** or later. <ins>Earlier versions of *Xcode* are not supported and will not successfully build this project</ins>.
2. Specify which of the many examples within this respository you wish to run, by opening
the `examples.h` file within *Xcode*, and following the instructions in the comments
within that file to indicate which of the examples you wish to run. Some examples may not be supported on *iOS* or *macOS* - please see the comments.
3. Run either the `examples-iOS` or `examples-macOS` *Xcode Scheme* to run the example in *iOS*, the *iOS Simulator*, or *macOS* respectively.
4. Many of the examples include an option to press keys to control the display of features
and scene components:
- On *iOS*, use one- and/or two-finger gestures to rotate, translate, or zoom the scene. On *macOS*, use the left/center/right mouse buttons or mouse wheel to rotate, translate, or zoom the scene.
- On the *iOS Simulator*, use the left mouse button to select or rotate the scene, Shift + Option + click and drag for translation, or Option + click and drag for zoom.
- On *iOS*, double tap on the scene to display the keyboard. Double tap again on the scene to hide the keyboard. On the *iOS Simulator* double click to show and hide the virtual keyboard (note: you may need to press ⌘(command) + ⇧(shift) + K to switch from the hardware keyboard to the virtual keyboard).
- On both *iOS* and *macOS*, use the numeric keys (*1, 2, 3...*) instead of function keys (*F1, F2, F3...*).
- On both *iOS* and *macOS*, use the regular keyboard *+* and *-* keys instead of the numpad *+* and *-* keys.
- On both *iOS* and *macOS*, use the keyboard *p* key to pause and resume animation.
- On both *iOS* and *macOS*, use the *delete* key instead of the *escape* key.

466
apple/examples.h Normal file
View file

@ -0,0 +1,466 @@
/*
* examples.h
*
* Copyright (c) 2016-2017 The Brenwill Workshop Ltd.
* This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
*
*
* Loads the appropriate example code, as indicated by the appropriate compiler build setting below.
*
* To select an example to run, define one (and only one) of the macros below, either by
* adding a #define XXX statement at the top of this file, or more flexibily, by adding the
* macro value to the Apple Clang - Preprocessing -> Preprocessor Macros compiler setting.
*
* To add a compiler setting, select the examples project in the Xcode Project Navigator panel,
* select the Build Settings panel, and add the value to the Preprocessor Macros entry.
*
* For example, to run the pipelines example, you would add the MVK_pipelines define macro to the
* Preprocessor Macros entry of the MoltenVK examples project, overwriting any other value there.
*
* If you choose to add a #define statement to this file, be sure to clear the existing macro
* from the Preprocessor Macros compiler setting in the MoltenVK examples project.
*/
// In the list below, the comments indicate entries that,
// under certain conditions, that may not run as expected.
// Uncomment the next line and select example here if not using a Preprocessor Macro to define example
//#define MVK_vulkanscene
// COMMON - Include VulkanglTFModel.cpp in all examples other than ones that already include/customize tiny_gltf.h directly
#if !defined(MVK_gltfloading) && !defined(MVK_gltfskinning) && !defined(MVK_gltfscenerendering) && !defined(MVK_vertexattributes)
# include "../base/VulkanglTFModel.cpp"
#endif
// BASICS
#ifdef MVK_triangle
# include "../examples/triangle/triangle.cpp"
#endif
#ifdef MVK_pipelines
# include "../examples/pipelines/pipelines.cpp"
#endif
#ifdef MVK_descriptorsets
# include "../examples/descriptorsets/descriptorsets.cpp"
#endif
#ifdef MVK_dynamicuniformbuffer
# include "../examples/dynamicuniformbuffer/dynamicuniformbuffer.cpp"
#endif
#ifdef MVK_pushconstants
# include "../examples/pushconstants/pushconstants.cpp"
#endif
#ifdef MVK_specializationconstants
# include "../examples/specializationconstants/specializationconstants.cpp"
#endif
#ifdef MVK_texture
# include "../examples/texture/texture.cpp"
#endif
#ifdef MVK_texturearray
# include "../examples/texturearray/texturearray.cpp"
#endif
#ifdef MVK_texturecubemap
# include "../examples/texturecubemap/texturecubemap.cpp"
#endif
#ifdef MVK_texturecubemaparray
# include "../examples/texturecubemaparray/texturecubemaparray.cpp"
#endif
#ifdef MVK_texture3d
# include "../examples/texture3d/texture3d.cpp"
#endif
#ifdef MVK_inputattachments
# include "../examples/inputattachments/inputattachments.cpp"
#endif
#ifdef MVK_subpasses
# include "../examples/subpasses/subpasses.cpp"
#endif
#ifdef MVK_offscreen
# include "../examples/offscreen/offscreen.cpp"
#endif
#ifdef MVK_particlesystem
# include "../examples/particlesystem/particlesystem.cpp"
#endif
#ifdef MVK_stencilbuffer
# include "../examples/stencilbuffer/stencilbuffer.cpp"
#endif
#ifdef MVK_vertexattributes
# include "../examples/vertexattributes/vertexattributes.cpp"
#endif
// glTF
#ifdef MVK_gltfloading
# include "../examples/gltfloading/gltfloading.cpp"
#endif
#ifdef MVK_gltfskinning
# include "../examples/gltfskinning/gltfskinning.cpp"
#endif
#ifdef MVK_gltfscenerendering
# include "../examples/gltfscenerendering/gltfscenerendering.cpp"
#endif
// ADVANCED
#ifdef MVK_multisampling
# include "../examples/multisampling/multisampling.cpp"
#endif
#ifdef MVK_hdr
# include "../examples/hdr/hdr.cpp"
#endif
#ifdef MVK_shadowmapping
# include "../examples/shadowmapping/shadowmapping.cpp"
#endif
#ifdef MVK_shadowmappingcascade
# include "../examples/shadowmappingcascade/shadowmappingcascade.cpp"
#endif
#ifdef MVK_shadowmappingomni
# include "../examples/shadowmappingomni/shadowmappingomni.cpp"
#endif
#ifdef MVK_texturemipmapgen
# include "../examples/texturemipmapgen/texturemipmapgen.cpp"
#endif
#ifdef MVK_screenshot
# include "../examples/screenshot/screenshot.cpp"
#endif
// Runs, but some Apple GPUs may not support stores and atomic operations in the fragment stage.
#ifdef MVK_oit
# include "../examples/oit/oit.cpp"
#endif
// Does not run. Sparse image binding and residency not supported by MoltenVK/Metal.
#ifdef MVK_texturesparseresidency
# include "../examples/texturesparseresidency/texturesparseresidency.cpp"
#endif
// PERFORMANCE
#ifdef MVK_multithreading
# include "../examples/multithreading/multithreading.cpp"
#endif
#ifdef MVK_instancing
# include "../examples/instancing/instancing.cpp"
#endif
#ifdef MVK_indirectdraw
# include "../examples/indirectdraw/indirectdraw.cpp"
#endif
#ifdef MVK_occlusionquery
# include "../examples/occlusionquery/occlusionquery.cpp"
#endif
// Does not run. MoltenVK/Metal does not support pipeline statistics.
#ifdef MVK_pipelinestatistics
# include "../examples/pipelinestatistics/pipelinestatistics.cpp"
#endif
// PHYSICALLY BASED RENDERING
#ifdef MVK_pbrbasic
# include "../examples/pbrbasic/pbrbasic.cpp"
#endif
#ifdef MVK_pbribl
# include "../examples/pbribl/pbribl.cpp"
#endif
#ifdef MVK_pbrtexture
# include "../examples/pbrtexture/pbrtexture.cpp"
#endif
// DEFERRED
#ifdef MVK_deferred
# include "../examples/deferred/deferred.cpp"
#endif
#ifdef MVK_deferredmultisampling
# include "../examples/deferredmultisampling/deferredmultisampling.cpp"
#endif
// Does not run. MoltenVK/Metal does not support geometry shaders.
#ifdef MVK_deferredshadows
# include "../examples/deferredshadows/deferredshadows.cpp"
#endif
#ifdef MVK_ssao
# include "../examples/ssao/ssao.cpp"
#endif
// COMPUTE
#ifdef MVK_computeshader
# include "../examples/computeshader/computeshader.cpp"
#endif
#ifdef MVK_computeparticles
# include "../examples/computeparticles/computeparticles.cpp"
#endif
#ifdef MVK_computenbody
# include "../examples/computenbody/computenbody.cpp"
#endif
#ifdef MVK_computeraytracing
# include "../examples/computeraytracing/computeraytracing.cpp"
#endif
#ifdef MVK_computecloth
# include "../examples/computecloth/computecloth.cpp"
#endif
#ifdef MVK_computecullandlod
# include "../examples/computecullandlod/computecullandlod.cpp"
#endif
// GEOMETRY SHADER
// Does not run. MoltenVK/Metal does not support geometry shaders.
#ifdef MVK_geometryshader
# include "../examples/geometryshader/geometryshader.cpp"
#endif
// Does not run. MoltenVK/Metal does not support geometry shaders.
#ifdef MVK_viewportarray
# include "../examples/viewportarray/viewportarray.cpp"
#endif
// TESSELLATION
#ifdef MVK_displacement
# include "../examples/displacement/displacement.cpp"
#endif
#ifdef MVK_terraintessellation
# include "../examples/terraintessellation/terraintessellation.cpp"
#endif
#ifdef MVK_tessellation
# include "../examples/tessellation/tessellation.cpp"
#endif
// RAY TRACING - Currently unsupported by MoltenVK/Metal
// Does not run. Missing Vulkan extensions for ray tracing
#ifdef MVK_raytracingbasic
# include "../examples/raytracingbasic/raytracingbasic.cpp"
#endif
// Does not run. Missing Vulkan extensions for ray tracing
#ifdef MVK_raytracingshadows
# include "../examples/raytracingshadows/raytracingshadows.cpp"
#endif
// Does not run. Missing Vulkan extensions for ray tracing
#ifdef MVK_raytracingreflections
# include "../examples/raytracingreflections/raytracingreflections.cpp"
#endif
// Does not run. Missing Vulkan extensions for ray tracing
#ifdef MVK_raytracingtextures
# include "../examples/raytracingtextures/raytracingtextures.cpp"
#endif
// Does not run. Missing Vulkan extensions for ray tracing
#ifdef MVK_raytracingcallable
# include "../examples/raytracingcallable/raytracingcallable.cpp"
#endif
// Does not run. Missing Vulkan extensions for ray tracing
#ifdef MVK_raytracingintersection
# include "../examples/raytracingintersection/raytracingintersection.cpp"
#endif
// Does not run. Missing Vulkan extensions for ray tracing
#ifdef MVK_raytracinggltf
# include "../examples/raytracinggltf/raytracinggltf.cpp"
#endif
// Does not run. Missing Vulkan extensions for ray tracing
#ifdef MVK_rayquery
# include "../examples/rayquery/rayquery.cpp"
#endif
// Does not run. Missing Vulkan extensions for ray tracing
#ifdef MVK_raytracingpositionfetch
# include "../examples/raytracingpositionfetch/raytracingpositionfetch.cpp"
#endif
// Does not run. Missing Vulkan extensions for ray tracing
#ifdef MVK_raytracingsbtdata
# include "../examples/raytracingsbtdata/raytracingsbtdata.cpp"
#endif
// HEADLESS
// No headless target when using MoltenVK examples project, builds/runs fine using vulkanExamples project.
//#ifdef MVK_renderheadless
//# include "../examples/renderheadless/renderheadless.cpp"
//#endif
// No headless target when using MoltenVK examples project, builds/runs fine using vulkanExamples project.
//#ifdef MVK_computeheadless
//# include "../examples/computeheadless/computeheadless.cpp"
//#endif
// USER INTERFACE
#ifdef MVK_textoverlay
# include "../examples/textoverlay/textoverlay.cpp"
#endif
#ifdef MVK_distancefieldfonts
# include "../examples/distancefieldfonts/distancefieldfonts.cpp"
#endif
#ifdef MVK_imgui
# include "../examples/imgui/main.cpp"
#endif
// EFFECTS
#ifdef MVK_radialblur
# include "../examples/radialblur/radialblur.cpp"
#endif
#ifdef MVK_bloom
# include "../examples/bloom/bloom.cpp"
#endif
#ifdef MVK_parallaxmapping
# include "../examples/parallaxmapping/parallaxmapping.cpp"
#endif
#ifdef MVK_sphericalenvmapping
# include "../examples/sphericalenvmapping/sphericalenvmapping.cpp"
#endif
// EXTENSIONS
// Does not run. Requires VK_EXT_conservative_rasterization.
#ifdef MVK_conservativeraster
# include "../examples/conservativeraster/conservativeraster.cpp"
#endif
#ifdef MVK_pushdescriptors
# include "../examples/pushdescriptors/pushdescriptors.cpp"
#endif
#ifdef MVK_inlineuniformblocks
# include "../examples/inlineuniformblocks/inlineuniformblocks.cpp"
#endif
#ifdef MVK_multiview
# include "../examples/multiview/multiview.cpp"
#endif
// Does not run. Requires VK_EXT_conditional_rendering.
#ifdef MVK_conditionalrender
# include "../examples/conditionalrender/conditionalrender.cpp"
#endif
// Runs on MoltenVK 1.2.5 or later with VK_KHR_shader_non_semantic_info extension and VK_LAYER_KHRONOS_validation enabled.
// No VK_LAYER_KHRONOS_validation layer when using MoltenVK examples project, builds/runs fine using vulkanExamples project.
// Enable VK_LAYER_KHRONOS_validation layer with khronos_validation.enables = VK_VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT
//#ifdef MVK_debugprintf
//# include "../examples/debugprintf/debugprintf.cpp"
//#endif
#ifdef MVK_debugutils
# include "../examples/debugutils/debugutils.cpp"
#endif
#ifdef MVK_negativeviewportheight
# include "../examples/negativeviewportheight/negativeviewportheight.cpp"
#endif
// Does not run. Requires VK_KHR_fragment_shading_rate.
#ifdef MVK_variablerateshading
# include "../examples/variablerateshading/variablerateshading.cpp"
#endif
// Runs on macOS 11.0 or later with Metal argument buffers enabled. Not yet supported on iOS.
#ifdef MVK_descriptorindexing
# include "../examples/descriptorindexing/descriptorindexing.cpp"
#endif
#ifdef MVK_dynamicrendering
# include "../examples/dynamicrendering/dynamicrendering.cpp"
#endif
// Does not run. Requires VK_KHR_pipeline_library and VK_EXT_graphics_pipeline_library.
#ifdef MVK_graphicspipelinelibrary
# include "../examples/graphicspipelinelibrary/graphicspipelinelibrary.cpp"
#endif
// Does not run. Requires VK_EXT_mesh_shader.
#ifdef MVK_meshshader
# include "../examples/meshshader/meshshader.cpp"
#endif
// Does not run. Requires VK_EXT_descriptor_buffer.
#ifdef MVK_descriptorbuffer
# include "../examples/descriptorbuffer/descriptorbuffer.cpp"
#endif
// Does not run. Requires VK_EXT_shader_object and VK_EXT_vertex_input_dynamic_state.
#ifdef MVK_shaderobjects
# include "../examples/shaderobjects/shaderobjects.cpp"
#endif
// Runs, but most VK_EXT_extended_dynamic_state3 features not supported on MoltenVK.
#ifdef MVK_dynamicstate
# include "../examples/dynamicstate/dynamicstate.cpp"
#endif
// MISC
#ifdef MVK_gears
# include "../examples/gears/gears.cpp"
# include "../examples/gears/vulkangear.cpp"
#endif
#ifdef MVK_vulkanscene
# include "../examples/vulkanscene/vulkanscene.cpp"
#endif

View file

@ -0,0 +1,867 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 54;
objects = {
/* Begin PBXBuildFile section */
A951FF171E9C349000FA9144 /* VulkanDebug.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A951FF071E9C349000FA9144 /* VulkanDebug.cpp */; };
A951FF181E9C349000FA9144 /* VulkanDebug.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A951FF071E9C349000FA9144 /* VulkanDebug.cpp */; };
A951FF191E9C349000FA9144 /* vulkanexamplebase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A951FF0A1E9C349000FA9144 /* vulkanexamplebase.cpp */; };
A951FF1A1E9C349000FA9144 /* vulkanexamplebase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A951FF0A1E9C349000FA9144 /* vulkanexamplebase.cpp */; };
A951FF1B1E9C349000FA9144 /* VulkanTools.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A951FF131E9C349000FA9144 /* VulkanTools.cpp */; };
A951FF1C1E9C349000FA9144 /* VulkanTools.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A951FF131E9C349000FA9144 /* VulkanTools.cpp */; };
A9B67B781C3AAE9800373FFD /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = A9B67B6C1C3AAE9800373FFD /* AppDelegate.m */; };
A9B67B7A1C3AAE9800373FFD /* DemoViewController.mm in Sources */ = {isa = PBXBuildFile; fileRef = A9B67B6F1C3AAE9800373FFD /* DemoViewController.mm */; };
A9B67B7C1C3AAE9800373FFD /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = A9B67B711C3AAE9800373FFD /* main.m */; };
A9B67B7D1C3AAE9800373FFD /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = A9B67B741C3AAE9800373FFD /* Default-568h@2x.png */; };
A9B67B7E1C3AAE9800373FFD /* Default~ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = A9B67B751C3AAE9800373FFD /* Default~ipad.png */; };
A9B67B7F1C3AAE9800373FFD /* Icon.png in Resources */ = {isa = PBXBuildFile; fileRef = A9B67B761C3AAE9800373FFD /* Icon.png */; };
A9B67B801C3AAE9800373FFD /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A9B67B771C3AAE9800373FFD /* Main.storyboard */; };
A9B67B8C1C3AAEA200373FFD /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = A9B67B831C3AAEA200373FFD /* AppDelegate.m */; };
A9B67B8D1C3AAEA200373FFD /* DemoViewController.mm in Sources */ = {isa = PBXBuildFile; fileRef = A9B67B851C3AAEA200373FFD /* DemoViewController.mm */; };
A9B67B8F1C3AAEA200373FFD /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = A9B67B871C3AAEA200373FFD /* main.m */; };
A9B67B901C3AAEA200373FFD /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A9B67B8A1C3AAEA200373FFD /* Main.storyboard */; };
A9B67B911C3AAEA200373FFD /* macOS.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = A9B67B8B1C3AAEA200373FFD /* macOS.xcassets */; };
A9BC9B1C1EE8421F00384233 /* MVKExample.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9BC9B1A1EE8421F00384233 /* MVKExample.cpp */; };
A9BC9B1D1EE8421F00384233 /* MVKExample.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9BC9B1A1EE8421F00384233 /* MVKExample.cpp */; };
AA2ACE3E2BD4B04C00EA6A2C /* MoltenVK.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = AA2ACE3D2BD4B03C00EA6A2C /* MoltenVK.xcframework */; };
AA2ACE3F2BD4B04C00EA6A2C /* MoltenVK.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = AA2ACE3D2BD4B03C00EA6A2C /* MoltenVK.xcframework */; };
AA54A1B426E5274500485C4A /* VulkanBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA54A1B226E5274500485C4A /* VulkanBuffer.cpp */; };
AA54A1B526E5274500485C4A /* VulkanBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA54A1B226E5274500485C4A /* VulkanBuffer.cpp */; };
AA54A1B826E5275300485C4A /* VulkanDevice.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA54A1B626E5275300485C4A /* VulkanDevice.cpp */; };
AA54A1B926E5275300485C4A /* VulkanDevice.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA54A1B626E5275300485C4A /* VulkanDevice.cpp */; };
AA54A1C026E5276C00485C4A /* VulkanSwapChain.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA54A1BF26E5276C00485C4A /* VulkanSwapChain.cpp */; };
AA54A1C126E5276C00485C4A /* VulkanSwapChain.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA54A1BF26E5276C00485C4A /* VulkanSwapChain.cpp */; };
AA54A1C426E5277600485C4A /* VulkanTexture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA54A1C326E5277600485C4A /* VulkanTexture.cpp */; };
AA54A1C526E5277600485C4A /* VulkanTexture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA54A1C326E5277600485C4A /* VulkanTexture.cpp */; };
AA54A6B826E52CE300485C4A /* memstream.c in Sources */ = {isa = PBXBuildFile; fileRef = AA54A1DD26E52CE100485C4A /* memstream.c */; };
AA54A6B926E52CE300485C4A /* memstream.c in Sources */ = {isa = PBXBuildFile; fileRef = AA54A1DD26E52CE100485C4A /* memstream.c */; };
AA54A6BA26E52CE300485C4A /* vk_funclist.inl in Resources */ = {isa = PBXBuildFile; fileRef = AA54A1DE26E52CE100485C4A /* vk_funclist.inl */; };
AA54A6BB26E52CE300485C4A /* vk_funclist.inl in Resources */ = {isa = PBXBuildFile; fileRef = AA54A1DE26E52CE100485C4A /* vk_funclist.inl */; };
AA54A6BC26E52CE300485C4A /* etcdec.cxx in Sources */ = {isa = PBXBuildFile; fileRef = AA54A1E026E52CE100485C4A /* etcdec.cxx */; };
AA54A6BD26E52CE300485C4A /* etcdec.cxx in Sources */ = {isa = PBXBuildFile; fileRef = AA54A1E026E52CE100485C4A /* etcdec.cxx */; };
AA54A6BE26E52CE300485C4A /* checkheader.c in Sources */ = {isa = PBXBuildFile; fileRef = AA54A1E126E52CE100485C4A /* checkheader.c */; };
AA54A6BF26E52CE300485C4A /* checkheader.c in Sources */ = {isa = PBXBuildFile; fileRef = AA54A1E126E52CE100485C4A /* checkheader.c */; };
AA54A6C026E52CE300485C4A /* errstr.c in Sources */ = {isa = PBXBuildFile; fileRef = AA54A1E226E52CE100485C4A /* errstr.c */; };
AA54A6C126E52CE300485C4A /* errstr.c in Sources */ = {isa = PBXBuildFile; fileRef = AA54A1E226E52CE100485C4A /* errstr.c */; };
AA54A6C226E52CE300485C4A /* writer.c in Sources */ = {isa = PBXBuildFile; fileRef = AA54A1E326E52CE100485C4A /* writer.c */; };
AA54A6C326E52CE300485C4A /* writer.c in Sources */ = {isa = PBXBuildFile; fileRef = AA54A1E326E52CE100485C4A /* writer.c */; };
AA54A6C426E52CE300485C4A /* filestream.c in Sources */ = {isa = PBXBuildFile; fileRef = AA54A1E426E52CE100485C4A /* filestream.c */; };
AA54A6C526E52CE300485C4A /* filestream.c in Sources */ = {isa = PBXBuildFile; fileRef = AA54A1E426E52CE100485C4A /* filestream.c */; };
AA54A6C626E52CE300485C4A /* mainpage.md in Resources */ = {isa = PBXBuildFile; fileRef = AA54A1E626E52CE100485C4A /* mainpage.md */; };
AA54A6C726E52CE300485C4A /* mainpage.md in Resources */ = {isa = PBXBuildFile; fileRef = AA54A1E626E52CE100485C4A /* mainpage.md */; };
AA54A6CA26E52CE300485C4A /* texture.c in Sources */ = {isa = PBXBuildFile; fileRef = AA54A1EA26E52CE100485C4A /* texture.c */; };
AA54A6CB26E52CE300485C4A /* texture.c in Sources */ = {isa = PBXBuildFile; fileRef = AA54A1EA26E52CE100485C4A /* texture.c */; };
AA54A6CC26E52CE300485C4A /* hashlist.c in Sources */ = {isa = PBXBuildFile; fileRef = AA54A1ED26E52CE100485C4A /* hashlist.c */; };
AA54A6CD26E52CE400485C4A /* hashlist.c in Sources */ = {isa = PBXBuildFile; fileRef = AA54A1ED26E52CE100485C4A /* hashlist.c */; };
AA54A6CE26E52CE400485C4A /* vk_funcs.c in Sources */ = {isa = PBXBuildFile; fileRef = AA54A1EE26E52CE100485C4A /* vk_funcs.c */; };
AA54A6CF26E52CE400485C4A /* vk_funcs.c in Sources */ = {isa = PBXBuildFile; fileRef = AA54A1EE26E52CE100485C4A /* vk_funcs.c */; };
AA54A6D226E52CE400485C4A /* hashtable.c in Sources */ = {isa = PBXBuildFile; fileRef = AA54A1F626E52CE100485C4A /* hashtable.c */; };
AA54A6D326E52CE400485C4A /* hashtable.c in Sources */ = {isa = PBXBuildFile; fileRef = AA54A1F626E52CE100485C4A /* hashtable.c */; };
AA54A6D826E52CE400485C4A /* swap.c in Sources */ = {isa = PBXBuildFile; fileRef = AA54A1F926E52CE100485C4A /* swap.c */; };
AA54A6D926E52CE400485C4A /* swap.c in Sources */ = {isa = PBXBuildFile; fileRef = AA54A1F926E52CE100485C4A /* swap.c */; };
AA54A6DE26E52CE400485C4A /* imgui_widgets.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA54A20426E52CE100485C4A /* imgui_widgets.cpp */; };
AA54A6DF26E52CE400485C4A /* imgui_widgets.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA54A20426E52CE100485C4A /* imgui_widgets.cpp */; };
AA54A6E026E52CE400485C4A /* imgui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA54A20626E52CE100485C4A /* imgui.cpp */; };
AA54A6E126E52CE400485C4A /* imgui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA54A20626E52CE100485C4A /* imgui.cpp */; };
AA54A6E226E52CE400485C4A /* LICENSE.txt in Resources */ = {isa = PBXBuildFile; fileRef = AA54A20926E52CE100485C4A /* LICENSE.txt */; };
AA54A6E326E52CE400485C4A /* LICENSE.txt in Resources */ = {isa = PBXBuildFile; fileRef = AA54A20926E52CE100485C4A /* LICENSE.txt */; };
AA54A6E426E52CE400485C4A /* imgui_demo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA54A20A26E52CE100485C4A /* imgui_demo.cpp */; };
AA54A6E526E52CE400485C4A /* imgui_demo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA54A20A26E52CE100485C4A /* imgui_demo.cpp */; };
AA54A6E626E52CE400485C4A /* imgui_draw.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA54A20B26E52CE100485C4A /* imgui_draw.cpp */; };
AA54A6E726E52CE400485C4A /* imgui_draw.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA54A20B26E52CE100485C4A /* imgui_draw.cpp */; };
AAB0D0BF26F24001005DC611 /* VulkanRaytracingSample.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAB0D0BE26F24001005DC611 /* VulkanRaytracingSample.cpp */; };
AAB0D0C026F24001005DC611 /* VulkanRaytracingSample.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAB0D0BE26F24001005DC611 /* VulkanRaytracingSample.cpp */; };
AAEE72882BD600270053521D /* assets in Resources */ = {isa = PBXBuildFile; fileRef = AAEE72872BD600270053521D /* assets */; };
AAEE728A2BD6003F0053521D /* shaders in Resources */ = {isa = PBXBuildFile; fileRef = AAEE72892BD6003F0053521D /* shaders */; };
AAEE728C2BD600830053521D /* assets in Resources */ = {isa = PBXBuildFile; fileRef = AAEE728B2BD600830053521D /* assets */; };
AAEE728E2BD600970053521D /* shaders in Resources */ = {isa = PBXBuildFile; fileRef = AAEE728D2BD600970053521D /* shaders */; };
C9A79EFC204504E000696219 /* VulkanUIOverlay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C9A79EFB204504E000696219 /* VulkanUIOverlay.cpp */; };
C9A79EFD2045051D00696219 /* VulkanUIOverlay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C9A79EFB204504E000696219 /* VulkanUIOverlay.cpp */; };
C9A79EFE2045051D00696219 /* VulkanUIOverlay.h in Sources */ = {isa = PBXBuildFile; fileRef = C9A79EFA204504E000696219 /* VulkanUIOverlay.h */; };
/* End PBXBuildFile section */
/* Begin PBXCopyFilesBuildPhase section */
A91227BB1E9D5E9D00108018 /* CopyFiles */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "";
dstSubfolderSpec = 6;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
A9532B741EF9987C000A09E2 /* CopyFiles */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "";
dstSubfolderSpec = 6;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
1D30AB110D05D00D00671497 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
1D3623EB0D0F72F000981E51 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
1D6058910D05DD3D006BFB54 /* examples.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = examples.app; sourceTree = BUILT_PRODUCTS_DIR; };
2D500B990D5A79CF00DBA0E3 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; };
A92F37071C7E1B2B008F8BC9 /* examples.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = examples.h; sourceTree = "<group>"; };
A951FF001E9C349000FA9144 /* camera.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = camera.hpp; sourceTree = "<group>"; };
A951FF011E9C349000FA9144 /* frustum.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = frustum.hpp; sourceTree = "<group>"; };
A951FF021E9C349000FA9144 /* keycodes.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = keycodes.hpp; sourceTree = "<group>"; };
A951FF031E9C349000FA9144 /* threadpool.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = threadpool.hpp; sourceTree = "<group>"; };
A951FF071E9C349000FA9144 /* VulkanDebug.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = VulkanDebug.cpp; sourceTree = "<group>"; };
A951FF081E9C349000FA9144 /* VulkanDebug.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VulkanDebug.h; sourceTree = "<group>"; };
A951FF0A1E9C349000FA9144 /* vulkanexamplebase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = vulkanexamplebase.cpp; sourceTree = "<group>"; };
A951FF0B1E9C349000FA9144 /* vulkanexamplebase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vulkanexamplebase.h; sourceTree = "<group>"; };
A951FF0C1E9C349000FA9144 /* VulkanFrameBuffer.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = VulkanFrameBuffer.hpp; sourceTree = "<group>"; };
A951FF0E1E9C349000FA9144 /* VulkanInitializers.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = VulkanInitializers.hpp; sourceTree = "<group>"; };
A951FF131E9C349000FA9144 /* VulkanTools.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = VulkanTools.cpp; sourceTree = "<group>"; };
A951FF141E9C349000FA9144 /* VulkanTools.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VulkanTools.h; sourceTree = "<group>"; };
A977BCFE1B66BB010067E5BF /* examples.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = examples.app; sourceTree = BUILT_PRODUCTS_DIR; };
A977BD211B67186B0067E5BF /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; };
A977BD221B67186B0067E5BF /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
A977BD231B67186B0067E5BF /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
A977BD251B67186B0067E5BF /* Metal.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Metal.framework; path = System/Library/Frameworks/Metal.framework; sourceTree = SDKROOT; };
A977BD261B67186B0067E5BF /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; };
A9A222171B5D69F40050A5F9 /* Metal.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Metal.framework; path = System/Library/Frameworks/Metal.framework; sourceTree = SDKROOT; };
A9B67B6B1C3AAE9800373FFD /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
A9B67B6C1C3AAE9800373FFD /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
A9B67B6E1C3AAE9800373FFD /* DemoViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoViewController.h; sourceTree = "<group>"; };
A9B67B6F1C3AAE9800373FFD /* DemoViewController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = DemoViewController.mm; sourceTree = "<group>"; };
A9B67B701C3AAE9800373FFD /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
A9B67B711C3AAE9800373FFD /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
A9B67B741C3AAE9800373FFD /* Default-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-568h@2x.png"; sourceTree = "<group>"; };
A9B67B751C3AAE9800373FFD /* Default~ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default~ipad.png"; sourceTree = "<group>"; };
A9B67B761C3AAE9800373FFD /* Icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Icon.png; sourceTree = "<group>"; };
A9B67B771C3AAE9800373FFD /* Main.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Main.storyboard; sourceTree = "<group>"; };
A9B67B821C3AAEA200373FFD /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
A9B67B831C3AAEA200373FFD /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
A9B67B841C3AAEA200373FFD /* DemoViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoViewController.h; sourceTree = "<group>"; };
A9B67B851C3AAEA200373FFD /* DemoViewController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = DemoViewController.mm; sourceTree = "<group>"; };
A9B67B861C3AAEA200373FFD /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
A9B67B871C3AAEA200373FFD /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
A9B67B8A1C3AAEA200373FFD /* Main.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Main.storyboard; sourceTree = "<group>"; };
A9B67B8B1C3AAEA200373FFD /* macOS.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = macOS.xcassets; sourceTree = "<group>"; };
A9B6B7641C0F795D00A9E33A /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = System/Library/Frameworks/CoreAudio.framework; sourceTree = SDKROOT; };
A9BC9B1A1EE8421F00384233 /* MVKExample.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MVKExample.cpp; sourceTree = "<group>"; };
A9BC9B1B1EE8421F00384233 /* MVKExample.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MVKExample.h; sourceTree = "<group>"; };
A9CDEA271B6A782C00F7B008 /* GLKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GLKit.framework; path = System/Library/Frameworks/GLKit.framework; sourceTree = SDKROOT; };
AA2ACE3D2BD4B03C00EA6A2C /* MoltenVK.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; path = MoltenVK.xcframework; sourceTree = "<group>"; };
AA54A1B226E5274500485C4A /* VulkanBuffer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = VulkanBuffer.cpp; sourceTree = "<group>"; };
AA54A1B326E5274500485C4A /* VulkanBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VulkanBuffer.h; sourceTree = "<group>"; };
AA54A1B626E5275300485C4A /* VulkanDevice.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = VulkanDevice.cpp; sourceTree = "<group>"; };
AA54A1B726E5275300485C4A /* VulkanDevice.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VulkanDevice.h; sourceTree = "<group>"; };
AA54A1BA26E5276000485C4A /* VulkanglTFModel.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = VulkanglTFModel.cpp; sourceTree = "<group>"; };
AA54A1BB26E5276000485C4A /* VulkanglTFModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VulkanglTFModel.h; sourceTree = "<group>"; };
AA54A1BE26E5276C00485C4A /* VulkanSwapChain.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VulkanSwapChain.h; sourceTree = "<group>"; };
AA54A1BF26E5276C00485C4A /* VulkanSwapChain.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = VulkanSwapChain.cpp; sourceTree = "<group>"; };
AA54A1C226E5277600485C4A /* VulkanTexture.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VulkanTexture.h; sourceTree = "<group>"; };
AA54A1C326E5277600485C4A /* VulkanTexture.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = VulkanTexture.cpp; sourceTree = "<group>"; };
AA54A1DD26E52CE100485C4A /* memstream.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = memstream.c; sourceTree = "<group>"; };
AA54A1DE26E52CE100485C4A /* vk_funclist.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = vk_funclist.inl; sourceTree = "<group>"; };
AA54A1E026E52CE100485C4A /* etcdec.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = etcdec.cxx; sourceTree = "<group>"; };
AA54A1E126E52CE100485C4A /* checkheader.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = checkheader.c; sourceTree = "<group>"; };
AA54A1E226E52CE100485C4A /* errstr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = errstr.c; sourceTree = "<group>"; };
AA54A1E326E52CE100485C4A /* writer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = writer.c; sourceTree = "<group>"; };
AA54A1E426E52CE100485C4A /* filestream.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = filestream.c; sourceTree = "<group>"; };
AA54A1E626E52CE100485C4A /* mainpage.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = mainpage.md; sourceTree = "<group>"; };
AA54A1E926E52CE100485C4A /* vk_format.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vk_format.h; sourceTree = "<group>"; };
AA54A1EA26E52CE100485C4A /* texture.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = texture.c; sourceTree = "<group>"; };
AA54A1EB26E52CE100485C4A /* ktxint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ktxint.h; sourceTree = "<group>"; };
AA54A1EC26E52CE100485C4A /* stream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = stream.h; sourceTree = "<group>"; };
AA54A1ED26E52CE100485C4A /* hashlist.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = hashlist.c; sourceTree = "<group>"; };
AA54A1EE26E52CE100485C4A /* vk_funcs.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = vk_funcs.c; sourceTree = "<group>"; };
AA54A1F026E52CE100485C4A /* uthash.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = uthash.h; sourceTree = "<group>"; };
AA54A1F226E52CE100485C4A /* memstream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = memstream.h; sourceTree = "<group>"; };
AA54A1F526E52CE100485C4A /* filestream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = filestream.h; sourceTree = "<group>"; };
AA54A1F626E52CE100485C4A /* hashtable.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = hashtable.c; sourceTree = "<group>"; };
AA54A1F926E52CE100485C4A /* swap.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = swap.c; sourceTree = "<group>"; };
AA54A1FB26E52CE100485C4A /* vk_funcs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vk_funcs.h; sourceTree = "<group>"; };
AA54A20126E52CE100485C4A /* imgui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = imgui.h; sourceTree = "<group>"; };
AA54A20226E52CE100485C4A /* imstb_textedit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = imstb_textedit.h; sourceTree = "<group>"; };
AA54A20326E52CE100485C4A /* imconfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = imconfig.h; sourceTree = "<group>"; };
AA54A20426E52CE100485C4A /* imgui_widgets.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = imgui_widgets.cpp; sourceTree = "<group>"; };
AA54A20526E52CE100485C4A /* imstb_truetype.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = imstb_truetype.h; sourceTree = "<group>"; };
AA54A20626E52CE100485C4A /* imgui.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = imgui.cpp; sourceTree = "<group>"; };
AA54A20726E52CE100485C4A /* imgui_internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = imgui_internal.h; sourceTree = "<group>"; };
AA54A20826E52CE100485C4A /* imstb_rectpack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = imstb_rectpack.h; sourceTree = "<group>"; };
AA54A20926E52CE100485C4A /* LICENSE.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE.txt; sourceTree = "<group>"; };
AA54A20A26E52CE100485C4A /* imgui_demo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = imgui_demo.cpp; sourceTree = "<group>"; };
AA54A20B26E52CE100485C4A /* imgui_draw.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = imgui_draw.cpp; sourceTree = "<group>"; };
AAB0D0BE26F24001005DC611 /* VulkanRaytracingSample.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = VulkanRaytracingSample.cpp; sourceTree = "<group>"; };
AAB0D0C126F2400E005DC611 /* VulkanRaytracingSample.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VulkanRaytracingSample.h; sourceTree = "<group>"; };
AAEE72872BD600270053521D /* assets */ = {isa = PBXFileReference; lastKnownFileType = folder; name = assets; path = ../assets; sourceTree = "<group>"; };
AAEE72892BD6003F0053521D /* shaders */ = {isa = PBXFileReference; lastKnownFileType = folder; name = shaders; path = ../shaders; sourceTree = "<group>"; };
AAEE728B2BD600830053521D /* assets */ = {isa = PBXFileReference; lastKnownFileType = folder; name = assets; path = ../assets; sourceTree = "<group>"; };
AAEE728D2BD600970053521D /* shaders */ = {isa = PBXFileReference; lastKnownFileType = folder; name = shaders; path = ../shaders; sourceTree = "<group>"; };
C9788FD02044D78D00AB0892 /* benchmark.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = benchmark.hpp; sourceTree = "<group>"; };
C9A79EFA204504E000696219 /* VulkanUIOverlay.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VulkanUIOverlay.h; sourceTree = "<group>"; };
C9A79EFB204504E000696219 /* VulkanUIOverlay.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = VulkanUIOverlay.cpp; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
1D60588F0D05DD3D006BFB54 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
AA2ACE3E2BD4B04C00EA6A2C /* MoltenVK.xcframework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
A977BCF11B66BB010067E5BF /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
AA2ACE3F2BD4B04C00EA6A2C /* MoltenVK.xcframework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
19C28FACFE9D520D11CA2CBB /* Products */ = {
isa = PBXGroup;
children = (
1D6058910D05DD3D006BFB54 /* examples.app */,
A977BCFE1B66BB010067E5BF /* examples.app */,
);
name = Products;
sourceTree = "<group>";
};
29B97314FDCFA39411CA2CEA /* CustomTemplate */ = {
isa = PBXGroup;
children = (
AAEE728D2BD600970053521D /* shaders */,
AAEE728B2BD600830053521D /* assets */,
AAEE72892BD6003F0053521D /* shaders */,
AAEE72872BD600270053521D /* assets */,
A92F37071C7E1B2B008F8BC9 /* examples.h */,
A9BC9B1B1EE8421F00384233 /* MVKExample.h */,
A9BC9B1A1EE8421F00384233 /* MVKExample.cpp */,
A951FEFF1E9C349000FA9144 /* base */,
AA54A1CF26E52CE100485C4A /* external */,
A9B67B6A1C3AAE9800373FFD /* iOS */,
A9B67B811C3AAEA200373FFD /* macOS */,
29B97323FDCFA39411CA2CEA /* Frameworks */,
19C28FACFE9D520D11CA2CBB /* Products */,
);
name = CustomTemplate;
sourceTree = "<group>";
};
29B97323FDCFA39411CA2CEA /* Frameworks */ = {
isa = PBXGroup;
children = (
AA2ACE3D2BD4B03C00EA6A2C /* MoltenVK.xcframework */,
A9B6B7641C0F795D00A9E33A /* CoreAudio.framework */,
A9ADEC601B6EC2EB00DBA48C /* iOS */,
A9ADEC611B6EC2F300DBA48C /* macOS */,
);
name = Frameworks;
sourceTree = "<group>";
};
A951FEFF1E9C349000FA9144 /* base */ = {
isa = PBXGroup;
children = (
AA54A1B226E5274500485C4A /* VulkanBuffer.cpp */,
AA54A1B326E5274500485C4A /* VulkanBuffer.h */,
A951FF071E9C349000FA9144 /* VulkanDebug.cpp */,
A951FF081E9C349000FA9144 /* VulkanDebug.h */,
AA54A1B626E5275300485C4A /* VulkanDevice.cpp */,
AA54A1B726E5275300485C4A /* VulkanDevice.h */,
A951FF0C1E9C349000FA9144 /* VulkanFrameBuffer.hpp */,
A951FF0E1E9C349000FA9144 /* VulkanInitializers.hpp */,
AAB0D0BE26F24001005DC611 /* VulkanRaytracingSample.cpp */,
AAB0D0C126F2400E005DC611 /* VulkanRaytracingSample.h */,
AA54A1BF26E5276C00485C4A /* VulkanSwapChain.cpp */,
AA54A1BE26E5276C00485C4A /* VulkanSwapChain.h */,
AA54A1C326E5277600485C4A /* VulkanTexture.cpp */,
AA54A1C226E5277600485C4A /* VulkanTexture.h */,
A951FF131E9C349000FA9144 /* VulkanTools.cpp */,
A951FF141E9C349000FA9144 /* VulkanTools.h */,
C9A79EFB204504E000696219 /* VulkanUIOverlay.cpp */,
C9A79EFA204504E000696219 /* VulkanUIOverlay.h */,
AA54A1BA26E5276000485C4A /* VulkanglTFModel.cpp */,
AA54A1BB26E5276000485C4A /* VulkanglTFModel.h */,
A951FF0A1E9C349000FA9144 /* vulkanexamplebase.cpp */,
A951FF0B1E9C349000FA9144 /* vulkanexamplebase.h */,
C9788FD02044D78D00AB0892 /* benchmark.hpp */,
A951FF001E9C349000FA9144 /* camera.hpp */,
A951FF011E9C349000FA9144 /* frustum.hpp */,
A951FF021E9C349000FA9144 /* keycodes.hpp */,
A951FF031E9C349000FA9144 /* threadpool.hpp */,
);
name = base;
path = ../base;
sourceTree = "<group>";
};
A9ADEC601B6EC2EB00DBA48C /* iOS */ = {
isa = PBXGroup;
children = (
A9A222171B5D69F40050A5F9 /* Metal.framework */,
1D3623EB0D0F72F000981E51 /* CoreGraphics.framework */,
2D500B990D5A79CF00DBA0E3 /* QuartzCore.framework */,
1D30AB110D05D00D00671497 /* Foundation.framework */,
A9CDEA271B6A782C00F7B008 /* GLKit.framework */,
);
name = iOS;
sourceTree = "<group>";
};
A9ADEC611B6EC2F300DBA48C /* macOS */ = {
isa = PBXGroup;
children = (
A977BD251B67186B0067E5BF /* Metal.framework */,
A977BD221B67186B0067E5BF /* CoreGraphics.framework */,
A977BD261B67186B0067E5BF /* QuartzCore.framework */,
A977BD231B67186B0067E5BF /* Foundation.framework */,
A977BD211B67186B0067E5BF /* AppKit.framework */,
);
name = macOS;
sourceTree = "<group>";
};
A9B67B6A1C3AAE9800373FFD /* iOS */ = {
isa = PBXGroup;
children = (
A9B67B6B1C3AAE9800373FFD /* AppDelegate.h */,
A9B67B6C1C3AAE9800373FFD /* AppDelegate.m */,
A9B67B6E1C3AAE9800373FFD /* DemoViewController.h */,
A9B67B6F1C3AAE9800373FFD /* DemoViewController.mm */,
A9B67B701C3AAE9800373FFD /* Info.plist */,
A9B67B711C3AAE9800373FFD /* main.m */,
A9B67B731C3AAE9800373FFD /* Resources */,
);
path = iOS;
sourceTree = "<group>";
};
A9B67B731C3AAE9800373FFD /* Resources */ = {
isa = PBXGroup;
children = (
A9B67B741C3AAE9800373FFD /* Default-568h@2x.png */,
A9B67B751C3AAE9800373FFD /* Default~ipad.png */,
A9B67B761C3AAE9800373FFD /* Icon.png */,
A9B67B771C3AAE9800373FFD /* Main.storyboard */,
);
path = Resources;
sourceTree = "<group>";
};
A9B67B811C3AAEA200373FFD /* macOS */ = {
isa = PBXGroup;
children = (
A9B67B821C3AAEA200373FFD /* AppDelegate.h */,
A9B67B831C3AAEA200373FFD /* AppDelegate.m */,
A9B67B841C3AAEA200373FFD /* DemoViewController.h */,
A9B67B851C3AAEA200373FFD /* DemoViewController.mm */,
A9B67B861C3AAEA200373FFD /* Info.plist */,
A9B67B871C3AAEA200373FFD /* main.m */,
A9B67B891C3AAEA200373FFD /* Resources */,
);
path = macOS;
sourceTree = "<group>";
};
A9B67B891C3AAEA200373FFD /* Resources */ = {
isa = PBXGroup;
children = (
A9B67B8A1C3AAEA200373FFD /* Main.storyboard */,
A9B67B8B1C3AAEA200373FFD /* macOS.xcassets */,
);
path = Resources;
sourceTree = "<group>";
};
AA54A1CF26E52CE100485C4A /* external */ = {
isa = PBXGroup;
children = (
AA54A1D626E52CE100485C4A /* ktx */,
AA54A20026E52CE100485C4A /* imgui */,
);
name = external;
path = ../external;
sourceTree = "<group>";
};
AA54A1D626E52CE100485C4A /* ktx */ = {
isa = PBXGroup;
children = (
AA54A1DC26E52CE100485C4A /* lib */,
);
path = ktx;
sourceTree = "<group>";
};
AA54A1DC26E52CE100485C4A /* lib */ = {
isa = PBXGroup;
children = (
AA54A1E126E52CE100485C4A /* checkheader.c */,
AA54A1E226E52CE100485C4A /* errstr.c */,
AA54A1E026E52CE100485C4A /* etcdec.cxx */,
AA54A1E426E52CE100485C4A /* filestream.c */,
AA54A1F526E52CE100485C4A /* filestream.h */,
AA54A1ED26E52CE100485C4A /* hashlist.c */,
AA54A1F626E52CE100485C4A /* hashtable.c */,
AA54A1EB26E52CE100485C4A /* ktxint.h */,
AA54A1E626E52CE100485C4A /* mainpage.md */,
AA54A1DD26E52CE100485C4A /* memstream.c */,
AA54A1F226E52CE100485C4A /* memstream.h */,
AA54A1EC26E52CE100485C4A /* stream.h */,
AA54A1F926E52CE100485C4A /* swap.c */,
AA54A1EA26E52CE100485C4A /* texture.c */,
AA54A1F026E52CE100485C4A /* uthash.h */,
AA54A1E926E52CE100485C4A /* vk_format.h */,
AA54A1DE26E52CE100485C4A /* vk_funclist.inl */,
AA54A1EE26E52CE100485C4A /* vk_funcs.c */,
AA54A1FB26E52CE100485C4A /* vk_funcs.h */,
AA54A1E326E52CE100485C4A /* writer.c */,
);
path = lib;
sourceTree = "<group>";
};
AA54A20026E52CE100485C4A /* imgui */ = {
isa = PBXGroup;
children = (
AA54A20326E52CE100485C4A /* imconfig.h */,
AA54A20A26E52CE100485C4A /* imgui_demo.cpp */,
AA54A20B26E52CE100485C4A /* imgui_draw.cpp */,
AA54A20726E52CE100485C4A /* imgui_internal.h */,
AA54A20426E52CE100485C4A /* imgui_widgets.cpp */,
AA54A20626E52CE100485C4A /* imgui.cpp */,
AA54A20126E52CE100485C4A /* imgui.h */,
AA54A20826E52CE100485C4A /* imstb_rectpack.h */,
AA54A20226E52CE100485C4A /* imstb_textedit.h */,
AA54A20526E52CE100485C4A /* imstb_truetype.h */,
AA54A20926E52CE100485C4A /* LICENSE.txt */,
);
path = imgui;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
1D6058900D05DD3D006BFB54 /* examples-ios */ = {
isa = PBXNativeTarget;
buildConfigurationList = 1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget "examples-ios" */;
buildPhases = (
1D60588D0D05DD3D006BFB54 /* Resources */,
1D60588E0D05DD3D006BFB54 /* Sources */,
1D60588F0D05DD3D006BFB54 /* Frameworks */,
A9532B741EF9987C000A09E2 /* CopyFiles */,
);
buildRules = (
);
dependencies = (
);
name = "examples-ios";
productName = foo;
productReference = 1D6058910D05DD3D006BFB54 /* examples.app */;
productType = "com.apple.product-type.application";
};
A977BCBD1B66BB010067E5BF /* examples-macos */ = {
isa = PBXNativeTarget;
buildConfigurationList = A977BCFB1B66BB010067E5BF /* Build configuration list for PBXNativeTarget "examples-macos" */;
buildPhases = (
A977BCBE1B66BB010067E5BF /* Resources */,
A977BCC91B66BB010067E5BF /* Sources */,
A977BCF11B66BB010067E5BF /* Frameworks */,
A91227BB1E9D5E9D00108018 /* CopyFiles */,
);
buildRules = (
);
dependencies = (
);
name = "examples-macos";
productName = foo;
productReference = A977BCFE1B66BB010067E5BF /* examples.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
29B97313FDCFA39411CA2CEA /* Project object */ = {
isa = PBXProject;
attributes = {
BuildIndependentTargetsInParallel = YES;
LastUpgradeCheck = 1520;
};
buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "examples" */;
compatibilityVersion = "Xcode 3.2";
developmentRegion = en;
hasScannedForEncodings = 1;
knownRegions = (
Base,
fr,
en,
ja,
de,
);
mainGroup = 29B97314FDCFA39411CA2CEA /* CustomTemplate */;
projectDirPath = "";
projectRoot = "";
targets = (
1D6058900D05DD3D006BFB54 /* examples-ios */,
A977BCBD1B66BB010067E5BF /* examples-macos */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
1D60588D0D05DD3D006BFB54 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
AA54A6E226E52CE400485C4A /* LICENSE.txt in Resources */,
AA54A6C626E52CE300485C4A /* mainpage.md in Resources */,
AA54A6BA26E52CE300485C4A /* vk_funclist.inl in Resources */,
A9B67B801C3AAE9800373FFD /* Main.storyboard in Resources */,
A9B67B7F1C3AAE9800373FFD /* Icon.png in Resources */,
A9B67B7E1C3AAE9800373FFD /* Default~ipad.png in Resources */,
A9B67B7D1C3AAE9800373FFD /* Default-568h@2x.png in Resources */,
AAEE72882BD600270053521D /* assets in Resources */,
AAEE728A2BD6003F0053521D /* shaders in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
A977BCBE1B66BB010067E5BF /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
AA54A6E326E52CE400485C4A /* LICENSE.txt in Resources */,
AA54A6C726E52CE300485C4A /* mainpage.md in Resources */,
AA54A6BB26E52CE300485C4A /* vk_funclist.inl in Resources */,
A9B67B901C3AAEA200373FFD /* Main.storyboard in Resources */,
A9B67B911C3AAEA200373FFD /* macOS.xcassets in Resources */,
AAEE728C2BD600830053521D /* assets in Resources */,
AAEE728E2BD600970053521D /* shaders in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
1D60588E0D05DD3D006BFB54 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
AA54A1C426E5277600485C4A /* VulkanTexture.cpp in Sources */,
AA54A6CE26E52CE400485C4A /* vk_funcs.c in Sources */,
AA54A6C426E52CE300485C4A /* filestream.c in Sources */,
AA54A6C026E52CE300485C4A /* errstr.c in Sources */,
A951FF171E9C349000FA9144 /* VulkanDebug.cpp in Sources */,
AA54A6E626E52CE400485C4A /* imgui_draw.cpp in Sources */,
A9BC9B1C1EE8421F00384233 /* MVKExample.cpp in Sources */,
AA54A6BC26E52CE300485C4A /* etcdec.cxx in Sources */,
AA54A6D226E52CE400485C4A /* hashtable.c in Sources */,
AA54A6B826E52CE300485C4A /* memstream.c in Sources */,
AA54A6C226E52CE300485C4A /* writer.c in Sources */,
C9A79EFC204504E000696219 /* VulkanUIOverlay.cpp in Sources */,
AA54A6DE26E52CE400485C4A /* imgui_widgets.cpp in Sources */,
A9B67B7A1C3AAE9800373FFD /* DemoViewController.mm in Sources */,
A9B67B781C3AAE9800373FFD /* AppDelegate.m in Sources */,
AA54A6CA26E52CE300485C4A /* texture.c in Sources */,
AAB0D0BF26F24001005DC611 /* VulkanRaytracingSample.cpp in Sources */,
A951FF1B1E9C349000FA9144 /* VulkanTools.cpp in Sources */,
AA54A6CC26E52CE300485C4A /* hashlist.c in Sources */,
A951FF191E9C349000FA9144 /* vulkanexamplebase.cpp in Sources */,
AA54A1B426E5274500485C4A /* VulkanBuffer.cpp in Sources */,
AA54A6D826E52CE400485C4A /* swap.c in Sources */,
AA54A6BE26E52CE300485C4A /* checkheader.c in Sources */,
A9B67B7C1C3AAE9800373FFD /* main.m in Sources */,
AA54A1B826E5275300485C4A /* VulkanDevice.cpp in Sources */,
AA54A1C026E5276C00485C4A /* VulkanSwapChain.cpp in Sources */,
AA54A6E426E52CE400485C4A /* imgui_demo.cpp in Sources */,
AA54A6E026E52CE400485C4A /* imgui.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
A977BCC91B66BB010067E5BF /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
C9A79EFD2045051D00696219 /* VulkanUIOverlay.cpp in Sources */,
AA54A6CF26E52CE400485C4A /* vk_funcs.c in Sources */,
AA54A6C526E52CE300485C4A /* filestream.c in Sources */,
AA54A6C126E52CE300485C4A /* errstr.c in Sources */,
C9A79EFE2045051D00696219 /* VulkanUIOverlay.h in Sources */,
AA54A6E726E52CE400485C4A /* imgui_draw.cpp in Sources */,
AA54A1B526E5274500485C4A /* VulkanBuffer.cpp in Sources */,
AA54A6BD26E52CE300485C4A /* etcdec.cxx in Sources */,
AA54A6D326E52CE400485C4A /* hashtable.c in Sources */,
AA54A6B926E52CE300485C4A /* memstream.c in Sources */,
AA54A6C326E52CE300485C4A /* writer.c in Sources */,
AA54A1B926E5275300485C4A /* VulkanDevice.cpp in Sources */,
AA54A6DF26E52CE400485C4A /* imgui_widgets.cpp in Sources */,
A951FF181E9C349000FA9144 /* VulkanDebug.cpp in Sources */,
AA54A6CB26E52CE300485C4A /* texture.c in Sources */,
AAB0D0C026F24001005DC611 /* VulkanRaytracingSample.cpp in Sources */,
A9BC9B1D1EE8421F00384233 /* MVKExample.cpp in Sources */,
A9B67B8C1C3AAEA200373FFD /* AppDelegate.m in Sources */,
AA54A1C126E5276C00485C4A /* VulkanSwapChain.cpp in Sources */,
AA54A6CD26E52CE400485C4A /* hashlist.c in Sources */,
A9B67B8F1C3AAEA200373FFD /* main.m in Sources */,
AA54A1C526E5277600485C4A /* VulkanTexture.cpp in Sources */,
AA54A6D926E52CE400485C4A /* swap.c in Sources */,
AA54A6BF26E52CE300485C4A /* checkheader.c in Sources */,
A951FF1C1E9C349000FA9144 /* VulkanTools.cpp in Sources */,
A951FF1A1E9C349000FA9144 /* vulkanexamplebase.cpp in Sources */,
A9B67B8D1C3AAEA200373FFD /* DemoViewController.mm in Sources */,
AA54A6E526E52CE400485C4A /* imgui_demo.cpp in Sources */,
AA54A6E126E52CE400485C4A /* imgui.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin XCBuildConfiguration section */
1D6058940D05DD3E006BFB54 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_OBJC_WEAK = YES;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
DEVELOPMENT_TEAM = "";
GCC_PREFIX_HEADER = "";
GCC_PREPROCESSOR_DEFINITIONS = (
"$(inherited)",
"DEBUG=1",
_DEBUG,
VK_USE_PLATFORM_METAL_EXT,
);
GCC_WARN_64_TO_32_BIT_CONVERSION = NO;
INFOPLIST_FILE = "$(SRCROOT)/iOS/Info.plist";
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
LD_RUNPATH_SEARCH_PATHS = "@executable_path";
LIBRARY_SEARCH_PATHS = "";
PRODUCT_BUNDLE_IDENTIFIER = com.moltenvk.examples;
PROVISIONING_PROFILE_SPECIFIER = "";
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = "iphonesimulator iphoneos";
TARGETED_DEVICE_FAMILY = "1,2";
VALID_ARCHS = "$(ARCHS_STANDARD)";
};
name = Debug;
};
1D6058950D05DD3E006BFB54 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_OBJC_WEAK = YES;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
DEVELOPMENT_TEAM = "";
GCC_PREFIX_HEADER = "";
GCC_PREPROCESSOR_DEFINITIONS = (
"$(inherited)",
VK_USE_PLATFORM_METAL_EXT,
);
GCC_WARN_64_TO_32_BIT_CONVERSION = NO;
INFOPLIST_FILE = "$(SRCROOT)/iOS/Info.plist";
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
LD_RUNPATH_SEARCH_PATHS = "@executable_path";
LIBRARY_SEARCH_PATHS = "";
PRODUCT_BUNDLE_IDENTIFIER = com.moltenvk.examples;
PROVISIONING_PROFILE_SPECIFIER = "";
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = "iphonesimulator iphoneos";
TARGETED_DEVICE_FAMILY = "1,2";
VALID_ARCHS = "$(ARCHS_STANDARD)";
};
name = Release;
};
A977BCFC1B66BB010067E5BF /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ARCHS = "$(ARCHS_STANDARD)";
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_OBJC_WEAK = YES;
CODE_SIGN_IDENTITY = "Apple Development";
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "-";
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
DEAD_CODE_STRIPPING = YES;
DEVELOPMENT_TEAM = "";
FRAMEWORK_SEARCH_PATHS = "$(inherited)";
GCC_PREFIX_HEADER = "";
GCC_PREPROCESSOR_DEFINITIONS = (
"$(inherited)",
"DEBUG=1",
_DEBUG,
VK_USE_PLATFORM_METAL_EXT,
);
INFOPLIST_FILE = "$(SRCROOT)/macOS/Info.plist";
LD_RUNPATH_SEARCH_PATHS = "@executable_path";
LIBRARY_SEARCH_PATHS = "";
MACOSX_DEPLOYMENT_TARGET = 10.15;
PROVISIONING_PROFILE_SPECIFIER = "";
SDKROOT = macosx;
};
name = Debug;
};
A977BCFD1B66BB010067E5BF /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ARCHS = "$(ARCHS_STANDARD)";
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_OBJC_WEAK = YES;
CODE_SIGN_IDENTITY = "Apple Development";
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "-";
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
DEAD_CODE_STRIPPING = YES;
DEVELOPMENT_TEAM = "";
FRAMEWORK_SEARCH_PATHS = "$(inherited)";
GCC_PREFIX_HEADER = "";
GCC_PREPROCESSOR_DEFINITIONS = (
"$(inherited)",
VK_USE_PLATFORM_METAL_EXT,
);
INFOPLIST_FILE = "$(SRCROOT)/macOS/Info.plist";
LD_RUNPATH_SEARCH_PATHS = "@executable_path";
LIBRARY_SEARCH_PATHS = "";
MACOSX_DEPLOYMENT_TARGET = 10.15;
ONLY_ACTIVE_ARCH = NO;
PROVISIONING_PROFILE_SPECIFIER = "";
SDKROOT = macosx;
};
name = Release;
};
C01FCF4F08A954540054247B /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
CLANG_CXX_LANGUAGE_STANDARD = "c++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = NO;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
DEAD_CODE_STRIPPING = YES;
ENABLE_BITCODE = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GCC_C_LANGUAGE_STANDARD = c99;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREPROCESSOR_DEFINITIONS = MVK_vulkanscene;
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
HEADER_SEARCH_PATHS = (
"\"$(SRCROOT)/MoltenVK/include\"",
"\"$(SRCROOT)/../external\"/**",
"\"$(SRCROOT)/../base\"",
);
ONLY_ACTIVE_ARCH = YES;
PRODUCT_BUNDLE_IDENTIFIER = "com.moltenvk.${PRODUCT_NAME:identifier}";
PRODUCT_NAME = "${PROJECT}";
};
name = Debug;
};
C01FCF5008A954540054247B /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
CLANG_CXX_LANGUAGE_STANDARD = "c++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = NO;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
DEAD_CODE_STRIPPING = YES;
ENABLE_BITCODE = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GCC_C_LANGUAGE_STANDARD = c99;
GCC_NO_COMMON_BLOCKS = YES;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREPROCESSOR_DEFINITIONS = MVK_vulkanscene;
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
HEADER_SEARCH_PATHS = (
"\"$(SRCROOT)/MoltenVK/include\"",
"\"$(SRCROOT)/../external\"/**",
"\"$(SRCROOT)/../base\"",
);
PRODUCT_BUNDLE_IDENTIFIER = "com.moltenvk.${PRODUCT_NAME:identifier}";
PRODUCT_NAME = "${PROJECT}";
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget "examples-ios" */ = {
isa = XCConfigurationList;
buildConfigurations = (
1D6058940D05DD3E006BFB54 /* Debug */,
1D6058950D05DD3E006BFB54 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
A977BCFB1B66BB010067E5BF /* Build configuration list for PBXNativeTarget "examples-macos" */ = {
isa = XCConfigurationList;
buildConfigurations = (
A977BCFC1B66BB010067E5BF /* Debug */,
A977BCFD1B66BB010067E5BF /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
C01FCF4E08A954540054247B /* Build configuration list for PBXProject "examples" */ = {
isa = XCConfigurationList;
buildConfigurations = (
C01FCF4F08A954540054247B /* Debug */,
C01FCF5008A954540054247B /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = 29B97313FDCFA39411CA2CEA /* Project object */;
}

View file

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "self:">
</FileRef>
</Workspace>

View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IDEDidComputeMac32BitWarning</key>
<true/>
</dict>
</plist>

View file

@ -0,0 +1,30 @@
{
"DVTSourceControlWorkspaceBlueprintPrimaryRemoteRepositoryKey" : "5B3778DF088377325550251267213ED1422AF030",
"DVTSourceControlWorkspaceBlueprintWorkingCopyRepositoryLocationsKey" : {
},
"DVTSourceControlWorkspaceBlueprintWorkingCopyStatesKey" : {
"986064432ACD0B21E33CA886A95425627120351A" : 9223372036854775807,
"5B3778DF088377325550251267213ED1422AF030" : 9223372036854775807
},
"DVTSourceControlWorkspaceBlueprintIdentifierKey" : "CD2D1537-0CC5-4969-BD35-AB1ED0A0FACA",
"DVTSourceControlWorkspaceBlueprintWorkingCopyPathsKey" : {
"986064432ACD0B21E33CA886A95425627120351A" : "..\/..\/..\/Molten",
"5B3778DF088377325550251267213ED1422AF030" : "Vulkan-bw\/"
},
"DVTSourceControlWorkspaceBlueprintNameKey" : "examples",
"DVTSourceControlWorkspaceBlueprintVersion" : 204,
"DVTSourceControlWorkspaceBlueprintRelativePathToProjectKey" : "xcode\/examples.xcodeproj",
"DVTSourceControlWorkspaceBlueprintRemoteRepositoriesKey" : [
{
"DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "https:\/\/github.com\/brenwill\/Vulkan.git",
"DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git",
"DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "5B3778DF088377325550251267213ED1422AF030"
},
{
"DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "https:\/\/github.com\/brenwill\/molten.git",
"DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git",
"DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "986064432ACD0B21E33CA886A95425627120351A"
}
]
}

View file

@ -0,0 +1,92 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1520"
version = "2.0">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "1D6058900D05DD3D006BFB54"
BuildableName = "examples.app"
BlueprintName = "examples-ios"
ReferencedContainer = "container:examples.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "1D6058900D05DD3D006BFB54"
BuildableName = "examples.app"
BlueprintName = "examples-ios"
ReferencedContainer = "container:examples.xcodeproj">
</BuildableReference>
</MacroExpansion>
<Testables>
</Testables>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugXPCServices = "NO"
debugServiceExtension = "internal"
enableGPUFrameCaptureMode = "3"
enableGPUValidationMode = "1"
allowLocationSimulation = "NO"
viewDebuggingEnabled = "No"
queueDebuggingEnabled = "No">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "1D6058900D05DD3D006BFB54"
BuildableName = "examples.app"
BlueprintName = "examples-ios"
ReferencedContainer = "container:examples.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "1D6058900D05DD3D006BFB54"
BuildableName = "examples.app"
BlueprintName = "examples-ios"
ReferencedContainer = "container:examples.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>

View file

@ -0,0 +1,92 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1520"
version = "2.0">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "A977BCBD1B66BB010067E5BF"
BuildableName = "examples.app"
BlueprintName = "examples-macos"
ReferencedContainer = "container:examples.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "A977BCBD1B66BB010067E5BF"
BuildableName = "examples.app"
BlueprintName = "examples-macos"
ReferencedContainer = "container:examples.xcodeproj">
</BuildableReference>
</MacroExpansion>
<Testables>
</Testables>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "NO"
debugXPCServices = "NO"
debugServiceExtension = "internal"
enableGPUFrameCaptureMode = "3"
enableGPUValidationMode = "1"
allowLocationSimulation = "NO"
viewDebuggingEnabled = "No"
queueDebuggingEnabled = "No">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "A977BCBD1B66BB010067E5BF"
BuildableName = "examples.app"
BlueprintName = "examples-macos"
ReferencedContainer = "container:examples.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "A977BCBD1B66BB010067E5BF"
BuildableName = "examples.app"
BlueprintName = "examples-macos"
ReferencedContainer = "container:examples.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>

Binary file not shown.

After

Width:  |  Height:  |  Size: 160 KiB

16
apple/ios/AppDelegate.h Normal file
View file

@ -0,0 +1,16 @@
/*
* AppDelegate.h
*
* Copyright (c) 2016-2017 The Brenwill Workshop Ltd.
* This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
*/
#import <UIKit/UIKit.h>
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) UIWindow *window;
@property (strong, nonatomic) UIViewController *viewController;
@end

46
apple/ios/AppDelegate.m Normal file
View file

@ -0,0 +1,46 @@
/*
* AppDelegate.m
*
* Copyright (c) 2016-2017 The Brenwill Workshop Ltd.
* This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
*/
#import "AppDelegate.h"
#import "DemoViewController.h"
@interface AppDelegate ()
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
return YES;
}
- (void)applicationWillResignActive:(UIApplication *)application {
// Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
// Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
}
- (void)applicationDidEnterBackground:(UIApplication *)application {
// Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
// If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
}
- (void)applicationWillEnterForeground:(UIApplication *)application {
// Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
}
- (void)applicationDidBecomeActive:(UIApplication *)application {
// Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
}
- (void)applicationWillTerminate:(UIApplication *)application {
// Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
[(DemoViewController *)_viewController shutdownExample];
}
@end

View file

@ -0,0 +1,26 @@
/*
* DemoViewController.h
*
* Copyright (c) 2016-2017 The Brenwill Workshop Ltd.
* This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
*/
#import <UIKit/UIKit.h>
#pragma mark -
#pragma mark DemoViewController
/** The main view controller for the demo storyboard. */
@interface DemoViewController : UIViewController <UIKeyInput>
-(void) shutdownExample;
@end
#pragma mark -
#pragma mark DemoView
/** The Metal-compatibile view for the demo Storyboard. */
@interface DemoView : UIView
@end

View file

@ -0,0 +1,224 @@
/*
* DemoViewController.mm
*
* Copyright (c) 2016-2017 The Brenwill Workshop Ltd.
* This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
*/
#import "DemoViewController.h"
#import "AppDelegate.h"
#include "MVKExample.h"
const std::string getAssetPath() {
return [NSBundle.mainBundle.resourcePath stringByAppendingString: @"/assets/"].UTF8String;
}
const std::string getShaderBasePath() {
return [NSBundle.mainBundle.resourcePath stringByAppendingString: @"/shaders/"].UTF8String;
}
CALayer* layer;
#pragma mark -
#pragma mark DemoViewController
@implementation DemoViewController {
MVKExample* _mvkExample;
CADisplayLink* _displayLink;
BOOL _viewHasAppeared;
CGPoint _startPoint;
}
/** Since this is a single-view app, init Vulkan when the view is loaded. */
-(void) viewDidLoad {
[super viewDidLoad];
layer = [self.view layer]; // SRS - When creating a Vulkan Metal surface, need the layer backing the view
self.view.contentScaleFactor = UIScreen.mainScreen.nativeScale;
_mvkExample = new MVKExample(self.view, 1.0f); // SRS - Use 1x scale factor for UIOverlay on iOS
// SRS - Enable AppDelegate to call into DemoViewController for handling app lifecycle events (e.g. termination)
auto appDelegate = (AppDelegate *)UIApplication.sharedApplication.delegate;
appDelegate.viewController = self;
uint32_t fps = 60;
_displayLink = [CADisplayLink displayLinkWithTarget: self selector: @selector(renderFrame)];
[_displayLink setFrameInterval: 60 / fps];
[_displayLink addToRunLoop: NSRunLoop.currentRunLoop forMode: NSDefaultRunLoopMode];
// Setup double tap gesture to toggle virtual keyboard
UITapGestureRecognizer* tapSelector = [[[UITapGestureRecognizer alloc]
initWithTarget: self action: @selector(handleTapGesture:)] autorelease];
tapSelector.numberOfTapsRequired = 2;
tapSelector.cancelsTouchesInView = YES;
tapSelector.requiresExclusiveTouchType = YES;
[self.view addGestureRecognizer: tapSelector];
// SRS - Setup pan gesture to detect and activate translation
UIPanGestureRecognizer* panSelector = [[[UIPanGestureRecognizer alloc]
initWithTarget: self action: @selector(handlePanGesture:)] autorelease];
panSelector.minimumNumberOfTouches = 2;
panSelector.cancelsTouchesInView = YES;
panSelector.requiresExclusiveTouchType = YES;
[self.view addGestureRecognizer: panSelector];
// SRS - Setup pinch gesture to detect and activate zoom
UIPinchGestureRecognizer* pinchSelector = [[[UIPinchGestureRecognizer alloc]
initWithTarget: self action: @selector(handlePinchGesture:)] autorelease];
pinchSelector.cancelsTouchesInView = YES;
pinchSelector.requiresExclusiveTouchType = YES;
[self.view addGestureRecognizer: pinchSelector];
_viewHasAppeared = NO;
}
-(void) viewDidAppear: (BOOL) animated {
[super viewDidAppear: animated];
_viewHasAppeared = YES;
}
-(BOOL) canBecomeFirstResponder { return _viewHasAppeared; }
-(void) renderFrame {
//_mvkExample->renderFrame();
_mvkExample->displayLinkOutputCb(); // SRS - Call displayLinkOutputCb() to animate frames vs. renderFrame() for static image
}
-(void) shutdownExample {
[_displayLink invalidate];
delete _mvkExample;
}
// Toggle the display of the virtual keyboard
-(void) toggleKeyboard {
if (self.isFirstResponder) {
[self resignFirstResponder];
} else {
[self becomeFirstResponder];
}
}
// Display and hide the keyboard by double tapping on the view
-(void) handleTapGesture: (UITapGestureRecognizer*) gestureRecognizer {
if (gestureRecognizer.state == UIGestureRecognizerStateEnded) {
[self toggleKeyboard];
}
}
#pragma mark UIKeyInput methods
// Returns whether text is available
-(BOOL) hasText { return YES; }
// A key on the keyboard has been pressed.
-(void) insertText: (NSString*) text {
unichar keychar = (text.length > 0) ? [text.lowercaseString characterAtIndex: 0] : 0;
_mvkExample->keyPressed(keychar);
}
// The delete backward key has been pressed.
-(void) deleteBackward {
_mvkExample->keyPressed(KEY_DELETE);
}
#pragma mark UITouch methods
-(CGPoint) getTouchLocalPoint:(UIEvent*) theEvent {
UITouch *touch = [[theEvent allTouches] anyObject];
CGPoint point = [touch locationInView: self.view];
point.x *= self.view.contentScaleFactor;
point.y *= self.view.contentScaleFactor;
return point;
}
// SRS - Handle touch events
-(void) touchesBegan:(NSSet*) touches withEvent:(UIEvent*) theEvent {
if (touches.count == 1) {
auto point = [self getTouchLocalPoint: theEvent];
_mvkExample->mouseDown(point.x, point.y);
}
}
-(void) touchesMoved:(NSSet*) touches withEvent:(UIEvent*) theEvent {
if (touches.count == 1) {
auto point = [self getTouchLocalPoint: theEvent];
_mvkExample->mouseDragged(point.x, point.y);
}
}
-(void) touchesEnded:(NSSet*) touches withEvent:(UIEvent*) theEvent {
_mvkExample->mouseUp();
}
-(void) touchesCancelled:(NSSet*) touches withEvent:(UIEvent*) theEvent {
_mvkExample->mouseUp();
}
#pragma mark UIGesture methods
-(CGPoint) getGestureLocalPoint:(UIGestureRecognizer*) gestureRecognizer {
CGPoint point = [gestureRecognizer locationInView: self.view];
point.x *= self.view.contentScaleFactor;
point.y *= self.view.contentScaleFactor;
return point;
}
// SRS - Respond to pan gestures for translation
-(void) handlePanGesture: (UIPanGestureRecognizer*) gestureRecognizer {
switch (gestureRecognizer.state) {
case UIGestureRecognizerStateBegan: {
_startPoint = [self getGestureLocalPoint: gestureRecognizer];
_mvkExample->otherMouseDown(_startPoint.x, _startPoint.y);
break;
}
case UIGestureRecognizerStateChanged: {
auto translation = [gestureRecognizer translationInView: self.view];
translation.x *= self.view.contentScaleFactor;
translation.y *= self.view.contentScaleFactor;
_mvkExample->mouseDragged(_startPoint.x + translation.x, _startPoint.y + translation.y);
break;
}
default: {
_mvkExample->otherMouseUp();
break;
}
}
}
// SRS - Respond to pinch gestures for zoom
-(void) handlePinchGesture: (UIPinchGestureRecognizer*) gestureRecognizer {
switch (gestureRecognizer.state) {
case UIGestureRecognizerStateBegan: {
_startPoint = [self getGestureLocalPoint: gestureRecognizer];
_mvkExample->rightMouseDown(_startPoint.x, _startPoint.y);
break;
}
case UIGestureRecognizerStateChanged: {
_mvkExample->mouseDragged(_startPoint.x, _startPoint.y - self.view.frame.size.height * log(gestureRecognizer.scale));
break;
}
default: {
_mvkExample->rightMouseUp();
break;
}
}
}
@end
#pragma mark -
#pragma mark DemoView
@implementation DemoView
/** Returns a Metal-compatible layer. */
+(Class) layerClass { return [CAMetalLayer class]; }
@end

46
apple/ios/Info.plist Normal file
View file

@ -0,0 +1,46 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleDisplayName</key>
<string>${PRODUCT_NAME}</string>
<key>CFBundleExecutable</key>
<string>${EXECUTABLE_NAME}</string>
<key>CFBundleIconFile</key>
<string>iOS/Resources/Icon.png</string>
<key>CFBundleIcons~ipad</key>
<dict/>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleVersion</key>
<string>1.0</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>LSApplicationCategoryType</key>
<string></string>
<key>UIMainStoryboardFile</key>
<string>Main</string>
<key>UIRequiresFullScreen</key>
<true/>
<key>UIStatusBarHidden</key>
<true/>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UISupportedInterfaceOrientations~ipad</key>
<array>
<string>UIInterfaceOrientationLandscapeRight</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
</array>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
</dict>
</plist>

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

BIN
apple/ios/Resources/Icon.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

View file

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="9060" systemVersion="15A279b" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="vmV-Wi-8wg">
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="9051"/>
</dependencies>
<scenes>
<!--Demo View Controller-->
<scene sceneID="UPC-Y9-dN2">
<objects>
<viewController id="vmV-Wi-8wg" customClass="DemoViewController" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="klr-UD-pWY"/>
<viewControllerLayoutGuide type="bottom" id="lMV-Es-kLU"/>
</layoutGuides>
<view key="view" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" id="xKx-Gc-5Is" customClass="DemoView">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<animations/>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="ERB-qy-6pP" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="404" y="555"/>
</scene>
</scenes>
</document>

14
apple/ios/main.m Normal file
View file

@ -0,0 +1,14 @@
/******************************************************************************
*
* main.m
*
******************************************************************************/
#import <UIKit/UIKit.h>
int main(int argc, char * argv[]) {
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, @"AppDelegate");
}
}

14
apple/macos/AppDelegate.h Normal file
View file

@ -0,0 +1,14 @@
/*
* AppDelegate.h
*
* Copyright (c) 2016-2017 The Brenwill Workshop Ltd.
* This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
*/
#import <Cocoa/Cocoa.h>
@interface AppDelegate : NSObject <NSApplicationDelegate>
@property (strong, nonatomic) NSViewController *viewController;
@end

30
apple/macos/AppDelegate.m Normal file
View file

@ -0,0 +1,30 @@
/*
* AppDelegate.m
*
* Copyright (c) 2016-2017 The Brenwill Workshop Ltd.
* This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
*/
#import "AppDelegate.h"
#import "DemoViewController.h"
@interface AppDelegate ()
@end
@implementation AppDelegate
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
// Insert code here to initialize your application
}
- (void)applicationWillTerminate:(NSNotification *)aNotification {
// Insert code here to tear down your application
[(DemoViewController *)_viewController shutdownExample];
}
- (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)sender {
return YES;
}
@end

View file

@ -0,0 +1,26 @@
/*
* DemoViewController.h
*
* Copyright (c) 2016-2017 The Brenwill Workshop Ltd.
* This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
*/
#import <AppKit/AppKit.h>
#pragma mark -
#pragma mark DemoViewController
/** The main view controller for the demo storyboard. */
@interface DemoViewController : NSViewController
-(void) shutdownExample;
@end
#pragma mark -
#pragma mark DemoView
/** The Metal-compatibile view for the demo Storyboard. */
@interface DemoView : NSView
@end

View file

@ -0,0 +1,192 @@
/*
* DemoViewController.mm
*
* Copyright (c) 2016-2017 The Brenwill Workshop Ltd.
* This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
*/
#import "DemoViewController.h"
#import "AppDelegate.h"
#import <QuartzCore/CAMetalLayer.h>
#include "MVKExample.h"
const std::string getAssetPath() {
return [NSBundle.mainBundle.resourcePath stringByAppendingString: @"/assets/"].UTF8String;
}
const std::string getShaderBasePath() {
return [NSBundle.mainBundle.resourcePath stringByAppendingString: @"/shaders/"].UTF8String;
}
/** Rendering loop callback function for use with a CVDisplayLink. */
static CVReturn DisplayLinkCallback(CVDisplayLinkRef displayLink,
const CVTimeStamp* now,
const CVTimeStamp* outputTime,
CVOptionFlags flagsIn,
CVOptionFlags* flagsOut,
void* target) {
//((MVKExample*)target)->renderFrame();
((MVKExample*)target)->displayLinkOutputCb(); // SRS - Call displayLinkOutputCb() to animate frames vs. renderFrame() for static image
return kCVReturnSuccess;
}
CALayer* layer;
MVKExample* _mvkExample;
#pragma mark -
#pragma mark DemoViewController
@implementation DemoViewController {
CVDisplayLinkRef _displayLink;
}
/** Since this is a single-view app, initialize Vulkan during view loading. */
-(void) viewDidLoad {
[super viewDidLoad];
self.view.wantsLayer = YES; // Back the view with a layer created by the makeBackingLayer method (called immediately on set)
_mvkExample = new MVKExample(self.view, layer.contentsScale); // SRS - Use backing layer scale factor for UIOverlay on macOS
// SRS - Enable AppDelegate to call into DemoViewController for handling application lifecycle events (e.g. termination)
auto appDelegate = (AppDelegate *)NSApplication.sharedApplication.delegate;
appDelegate.viewController = self;
CVDisplayLinkCreateWithActiveCGDisplays(&_displayLink);
CVDisplayLinkSetOutputCallback(_displayLink, &DisplayLinkCallback, _mvkExample);
CVDisplayLinkStart(_displayLink);
}
-(void) shutdownExample {
CVDisplayLinkStop(_displayLink);
CVDisplayLinkRelease(_displayLink);
delete _mvkExample;
}
@end
#pragma mark -
#pragma mark DemoView
@implementation DemoView
/** Indicates that the view wants to draw using the backing layer instead of using drawRect:. */
-(BOOL) wantsUpdateLayer { return YES; }
/** Returns a Metal-compatible layer. */
+(Class) layerClass { return [CAMetalLayer class]; }
/** If the wantsLayer property is set to YES, this method will be invoked to return a layer instance. */
-(CALayer*) makeBackingLayer {
layer = [self.class.layerClass layer];
CGSize viewScale = [self convertSizeToBacking: CGSizeMake(1.0, 1.0)];
layer.contentsScale = MIN(viewScale.width, viewScale.height);
return layer;
}
// SRS - Activate mouse cursor tracking within the view, set view as window delegate, and center the window
- (void) viewDidMoveToWindow {
auto trackingArea = [[NSTrackingArea alloc] initWithRect:[self bounds] options: (NSTrackingMouseMoved | NSTrackingActiveAlways | NSTrackingInVisibleRect) owner:self userInfo:nil];
[self addTrackingArea: trackingArea];
[self.window setDelegate: self.window.contentView];
[self.window center];
}
-(BOOL) acceptsFirstResponder { return YES; }
// SRS - Handle keyboard events
-(void) keyDown:(NSEvent*) theEvent {
NSString *text = [theEvent charactersIgnoringModifiers];
unichar keychar = (text.length > 0) ? [text.lowercaseString characterAtIndex: 0] : 0;
switch (keychar)
{
case KEY_DELETE: // support keyboards with no escape key
case KEY_ESCAPE:
[NSApp terminate:nil];
break;
default:
_mvkExample->keyDown(keychar);
break;
}
}
-(void) keyUp:(NSEvent*) theEvent {
NSString *text = [theEvent charactersIgnoringModifiers];
unichar keychar = (text.length > 0) ? [text.lowercaseString characterAtIndex: 0] : 0;
_mvkExample->keyUp(keychar);
}
// SRS - Handle mouse events
-(NSPoint) getMouseLocalPoint:(NSEvent*) theEvent {
NSPoint location = [theEvent locationInWindow];
NSPoint point = [self convertPointToBacking:location];
point.y = self.frame.size.height*self.window.backingScaleFactor - point.y;
return point;
}
-(void) mouseDown:(NSEvent*) theEvent {
auto point = [self getMouseLocalPoint:theEvent];
_mvkExample->mouseDown(point.x, point.y);
}
-(void) mouseUp:(NSEvent*) theEvent {
_mvkExample->mouseUp();
}
-(void) rightMouseDown:(NSEvent*) theEvent {
auto point = [self getMouseLocalPoint:theEvent];
_mvkExample->rightMouseDown(point.x, point.y);
}
-(void) rightMouseUp:(NSEvent*) theEvent {
_mvkExample->rightMouseUp();
}
-(void) otherMouseDown:(NSEvent*) theEvent {
auto point = [self getMouseLocalPoint:theEvent];
_mvkExample->otherMouseDown(point.x, point.y);
}
-(void) otherMouseUp:(NSEvent*) theEvent {
_mvkExample->otherMouseUp();
}
-(void) mouseDragged:(NSEvent*) theEvent {
auto point = [self getMouseLocalPoint:theEvent];
_mvkExample->mouseDragged(point.x, point.y);
}
-(void) rightMouseDragged:(NSEvent*) theEvent {
auto point = [self getMouseLocalPoint:theEvent];
_mvkExample->mouseDragged(point.x, point.y);
}
-(void) otherMouseDragged:(NSEvent*) theEvent {
auto point = [self getMouseLocalPoint:theEvent];
_mvkExample->mouseDragged(point.x, point.y);
}
-(void) mouseMoved:(NSEvent*) theEvent {
auto point = [self getMouseLocalPoint:theEvent];
_mvkExample->mouseDragged(point.x, point.y);
}
-(void) scrollWheel:(NSEvent*) theEvent {
short wheelDelta = [theEvent deltaY];
_mvkExample->scrollWheel(wheelDelta);
}
- (void)windowWillEnterFullScreen:(NSNotification *)notification
{
_mvkExample->fullScreen(true);
}
- (void)windowWillExitFullScreen:(NSNotification *)notification
{
_mvkExample->fullScreen(false);
}
@end

34
apple/macos/Info.plist Normal file
View file

@ -0,0 +1,34 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleExecutable</key>
<string>${EXECUTABLE_NAME}</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>${PRODUCT_NAME}</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>LSApplicationCategoryType</key>
<string></string>
<key>LSMinimumSystemVersion</key>
<string>${MACOSX_DEPLOYMENT_TARGET}</string>
<key>NSHumanReadableCopyright</key>
<string>Copyright (c) 2016-2017 The Brenwill Workshop Ltd.</string>
<key>NSMainStoryboardFile</key>
<string>Main</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
</dict>
</plist>

View file

@ -0,0 +1,134 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.Storyboard.XIB" version="3.0" toolsVersion="19529" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" initialViewController="B8D-0N-5wS">
<dependencies>
<deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="19529"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<scenes>
<!--Application-->
<scene sceneID="JPo-4y-FX3">
<objects>
<application id="hnw-xV-0zn" sceneMemberID="viewController">
<menu key="mainMenu" title="Main Menu" systemMenu="main" id="AYu-sK-qS6">
<items>
<menuItem title="MoltenVK Demo" id="1Xt-HY-uBw">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="MoltenVK Demo" systemMenu="apple" id="uQy-DD-JDr">
<items>
<menuItem title="About Demo" id="5kV-Vb-QxS">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="orderFrontStandardAboutPanel:" target="Ady-hI-5gd" id="Exp-CZ-Vem"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="VOq-y0-SEH"/>
<menuItem title="Hide Demo" keyEquivalent="h" id="Olw-nP-bQN">
<connections>
<action selector="hide:" target="Ady-hI-5gd" id="PnN-Uc-m68"/>
</connections>
</menuItem>
<menuItem title="Hide Others" keyEquivalent="h" id="Vdr-fp-XzO">
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
<connections>
<action selector="hideOtherApplications:" target="Ady-hI-5gd" id="VT4-aY-XCT"/>
</connections>
</menuItem>
<menuItem title="Show All" id="Kd2-mp-pUS">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="unhideAllApplications:" target="Ady-hI-5gd" id="Dhg-Le-xox"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="kCx-OE-vgT"/>
<menuItem title="Quit Demo" keyEquivalent="q" id="4sb-4s-VLi">
<connections>
<action selector="terminate:" target="Ady-hI-5gd" id="Te7-pn-YzF"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Window" id="aUF-d1-5bR">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Window" systemMenu="window" id="Td7-aD-5lo">
<items>
<menuItem title="Minimize" keyEquivalent="m" id="OY7-WF-poV">
<connections>
<action selector="performMiniaturize:" target="Ady-hI-5gd" id="VwT-WD-YPe"/>
</connections>
</menuItem>
<menuItem title="Zoom" id="R4o-n2-Eq4">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="performZoom:" target="Ady-hI-5gd" id="DIl-cC-cCs"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="eu3-7i-yIM"/>
<menuItem title="Bring All to Front" id="LE2-aR-0XJ">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="arrangeInFront:" target="Ady-hI-5gd" id="DRN-fu-gQh"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Help" id="wpr-3q-Mcd">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Help" systemMenu="help" id="F2S-fz-NVQ">
<items>
<menuItem title="MoltenVK Demo Help" keyEquivalent="?" id="FKE-Sm-Kum">
<connections>
<action selector="showHelp:" target="Ady-hI-5gd" id="y7X-2Q-9no"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
</items>
</menu>
<connections>
<outlet property="delegate" destination="Voe-Tx-rLC" id="PrD-fu-P6m"/>
</connections>
</application>
<customObject id="Voe-Tx-rLC" customClass="AppDelegate"/>
<customObject id="Ady-hI-5gd" userLabel="First Responder" customClass="NSResponder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="83.5" y="-47"/>
</scene>
<!--Window Controller-->
<scene sceneID="R2V-B0-nI4">
<objects>
<windowController id="B8D-0N-5wS" sceneMemberID="viewController">
<window key="window" title="MoltenVK Vulkan Example" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" animationBehavior="default" id="IQv-IB-iLA">
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES"/>
<rect key="contentRect" x="1051" y="656" width="1280" height="720"/>
<rect key="screenRect" x="0.0" y="0.0" width="2560" height="1417"/>
<connections>
<outlet property="delegate" destination="B8D-0N-5wS" id="ayw-fB-DBj"/>
</connections>
</window>
<connections>
<segue destination="XfG-lQ-9wD" kind="relationship" relationship="window.shadowedContentViewController" id="cq2-FE-JQM"/>
</connections>
</windowController>
<customObject id="Oky-zY-oP4" userLabel="First Responder" customClass="NSResponder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="83" y="146"/>
</scene>
<!--Demo View Controller-->
<scene sceneID="hIz-AP-VOD">
<objects>
<viewController id="XfG-lQ-9wD" customClass="DemoViewController" sceneMemberID="viewController">
<view key="view" id="m2S-Jp-Qdl" customClass="DemoView">
<rect key="frame" x="0.0" y="0.0" width="1280" height="720"/>
<autoresizingMask key="autoresizingMask"/>
</view>
</viewController>
<customObject id="rPt-NT-nkU" userLabel="First Responder" customClass="NSResponder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="83" y="713"/>
</scene>
</scenes>
</document>

View file

@ -0,0 +1,63 @@
{
"images" : [
{
"size" : "16x16",
"idiom" : "mac",
"filename" : "Icon-16.png",
"scale" : "1x"
},
{
"idiom" : "mac",
"size" : "16x16",
"scale" : "2x"
},
{
"size" : "32x32",
"idiom" : "mac",
"filename" : "Icon-32.png",
"scale" : "1x"
},
{
"idiom" : "mac",
"size" : "32x32",
"scale" : "2x"
},
{
"size" : "128x128",
"idiom" : "mac",
"filename" : "Icon-128.png",
"scale" : "1x"
},
{
"idiom" : "mac",
"size" : "128x128",
"scale" : "2x"
},
{
"size" : "256x256",
"idiom" : "mac",
"filename" : "Icon-256.png",
"scale" : "1x"
},
{
"idiom" : "mac",
"size" : "256x256",
"scale" : "2x"
},
{
"size" : "512x512",
"idiom" : "mac",
"filename" : "Icon-512.png",
"scale" : "1x"
},
{
"idiom" : "mac",
"size" : "512x512",
"scale" : "2x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 671 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

View file

@ -0,0 +1,6 @@
{
"info" : {
"version" : 1,
"author" : "xcode"
}
}

12
apple/macos/main.m Normal file
View file

@ -0,0 +1,12 @@
/*
* main.m
*
* Copyright (c) 2016-2017 The Brenwill Workshop Ltd.
* This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
*/
#import <Cocoa/Cocoa.h>
int main(int argc, const char * argv[]) {
return NSApplicationMain(argc, argv);
}