More iOS work

This commit is contained in:
wheremyfoodat 2025-03-06 17:04:52 +02:00
parent ebefbdc4db
commit 1948bea209
4 changed files with 72 additions and 3 deletions

View file

@ -57,6 +57,10 @@ void RendererMTL::reset() {
}
void RendererMTL::display() {
#ifdef PANDA3DS_IOS
return;
#endif
CA::MetalDrawable* drawable = metalLayer->nextDrawable();
if (!drawable) {
return;
@ -126,11 +130,17 @@ void RendererMTL::display() {
void RendererMTL::initGraphicsContext(SDL_Window* window) {
// TODO: what should be the type of the view?
#ifdef PANDA3DS_IOS
// On iOS, the SwiftUI side handles device<->MTKView interaction
device = MTL::CreateSystemDefaultDevice();
#else
void* view = SDL_Metal_CreateView(window);
metalLayer = (CA::MetalLayer*)SDL_Metal_GetLayer(view);
device = MTL::CreateSystemDefaultDevice();
metalLayer->setDevice(device);
commandQueue = device->newCommandQueue();
#endif
// Textures
MTL::TextureDescriptor* textureDescriptor = MTL::TextureDescriptor::alloc()->init();

34
src/ios_driver.mm Normal file
View file

@ -0,0 +1,34 @@
#import <Foundation/Foundation.h>
extern "C" {
#include "ios_driver.h"
}
#undef ABS
#undef NO
#include <memory>
#include "emulator.hpp"
#define IOS_EXPORT extern "C" __attribute__((visibility("default")))
std::unique_ptr<Emulator> emulator = nullptr;
HIDService* hidService = nullptr;
extern "C" __attribute__((visibility("default"))) void iosCreateEmulator() {
printf("Creating emulator\n");
emulator = std::make_unique<Emulator>();
hidService = &emulator->getServiceManager().getHID();
emulator->initGraphicsContext(nullptr);
// auto path = emulator->getAppDataRoot() / "Kirb Demo.3ds";
auto path = emulator->getAppDataRoot() / "SimplerTri.elf";
emulator->loadROM(path);
while (1) {
emulator->runFrame();
}
printf("Created emulator\n");
}