Support iOS touch gestures and iOS Simulator target, reduce translate sensitivity, use key chars vs. key codes in Xcode examples project

This commit is contained in:
Stephen Saunders 2022-05-13 11:58:46 -04:00
parent ae8ad09f6e
commit 8080b7a91b
9 changed files with 165 additions and 85 deletions

View file

@ -5,11 +5,14 @@
* This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
*/
#include <Carbon/Carbon.h>
#include "MVKExample.h"
#include "examples.h"
void MVKExample::renderFrame() {
_vulkanExample->renderFrame();
}
void MVKExample::displayLinkOutputCb() { // SRS - expose VulkanExampleBase::displayLinkOutputCb() to DemoViewController
_vulkanExample->displayLinkOutputCb();
}
@ -18,26 +21,44 @@ void MVKExample::setRefreshPeriod(double refreshPeriod) { // SRS - set Vul
_vulkanExample->refreshPeriod = refreshPeriod;
}
void MVKExample::keyPressed(uint32_t keyCode) {
_vulkanExample->keyPressed(keyCode);
void MVKExample::keyPressed(uint32_t keyChar) { // SRS - handle iOS virtual screen keyboard presses
switch (keyChar)
{
case 'p':
case 'P':
_vulkanExample->paused = !_vulkanExample->paused;
break;
default:
_vulkanExample->keyPressed(keyChar);
break;
}
}
void MVKExample::keyDown(uint32_t keyCode) {
switch (keyCode)
void MVKExample::keyDown(uint32_t keyChar) { // SRS - handle physical keyboard key down/up actions
switch (keyChar)
{
case kVK_ANSI_P:
case 'p':
case 'P':
_vulkanExample->paused = !_vulkanExample->paused;
break;
case kVK_ANSI_W:
case 'w':
case 'W':
case 'z': // for French AZERTY keyboards
case 'Z':
_vulkanExample->camera.keys.up = true;
break;
case kVK_ANSI_S:
case 's':
case 'S':
_vulkanExample->camera.keys.down = true;
break;
case kVK_ANSI_A:
case 'a':
case 'A':
case 'q': // for French AZERTY keyboards
case 'Q':
_vulkanExample->camera.keys.left = true;
break;
case kVK_ANSI_D:
case 'd':
case 'D':
_vulkanExample->camera.keys.right = true;
break;
default:
@ -45,19 +66,27 @@ void MVKExample::keyDown(uint32_t keyCode) {
}
}
void MVKExample::keyUp(uint32_t keyCode) {
switch (keyCode)
void MVKExample::keyUp(uint32_t keyChar) {
switch (keyChar)
{
case kVK_ANSI_W:
case 'w':
case 'W':
case 'z': // for French AZERTY keyboards
case 'Z':
_vulkanExample->camera.keys.up = false;
break;
case kVK_ANSI_S:
case 's':
case 'S':
_vulkanExample->camera.keys.down = false;
break;
case kVK_ANSI_A:
case 'a':
case 'A':
case 'q': // for French AZERTY keyboards
case 'Q':
_vulkanExample->camera.keys.left = false;
break;
case kVK_ANSI_D:
case 'd':
case 'D':
_vulkanExample->camera.keys.right = false;
break;
default:
@ -70,12 +99,12 @@ void MVKExample::mouseDown(double x, double y) {
_vulkanExample->mouseButtons.left = true;
}
void MVKExample::mouseUp(double x, double y) {
_vulkanExample->mousePos = glm::vec2(x, y);
void MVKExample::mouseUp() {
_vulkanExample->mouseButtons.left = false;
}
void MVKExample::rightMouseDown() {
void MVKExample::rightMouseDown(double x, double y) {
_vulkanExample->mousePos = glm::vec2(x, y);
_vulkanExample->mouseButtons.right = true;
}
@ -83,7 +112,8 @@ void MVKExample::rightMouseUp() {
_vulkanExample->mouseButtons.right = false;
}
void MVKExample::otherMouseDown() {
void MVKExample::otherMouseDown(double x, double y) {
_vulkanExample->mousePos = glm::vec2(x, y);
_vulkanExample->mouseButtons.middle = true;
}
@ -95,22 +125,16 @@ void MVKExample::mouseDragged(double x, double y) {
_vulkanExample->mouseDragged(x, y);
}
void MVKExample::mouseMoved(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));
}
MVKExample::MVKExample(void* view) {
_vulkanExample = new VulkanExample();
width = _vulkanExample->width; // SRS - Get desired window size from VulkanExampleBase instance
height = _vulkanExample->height;
_vulkanExample->initVulkan();
_vulkanExample->setupWindow(view);
_vulkanExample->prepare();
_vulkanExample->renderLoop(); // SRS - Init destWidth & destHeight, then fall through and return
_vulkanExample->renderLoop(); // SRS - init VulkanExampleBase::destWidth & destHeight, then fall through and return
}
MVKExample::~MVKExample() {