如何解决iOS 12.4 之后 open OpenGL 是不是完全坏掉了?
我在这里有一个适用于 iOS 的开源 MS-DOS 模拟器: https://github.com/MattAndrzejczuk/MSDOS-for-iOS
当使用我的旧 iOS 设备(例如旧 iPhone 5S)时,此应用运行良好。但就在 iOS 13.0 发布后,由于未在主线程上调用 UIKit 方法,应用程序委托无法呈现 SDL,但我不太确定这次崩溃是否是由于 OpenGL 被完全弃用,或者,如果可能是更新的SceneDelegate 和 AppDelegate 似乎已在 iOS 13 中进行了大修的更改是导致此问题的原因。仅就某些情况而言,我注意到我无法创建一个带有基本 hello world 标签的新 Xcode 项目并直接为 iOS 12 设备构建它,而不这样做:
#import <UIKit/UIKit.h>
@interface AppDelegate : UIResponder <UIApplicationDelegate>
// ADD THIS TO DEFAULT APPDELEGATE.H:
@property (strong,nonatomic) UIWindow *window;
@end
Sources/dospad/Shared/DosEmuThread.m
#import "DosEmuThread.h"
extern int SDL_main(int argc,char *argv[]);
@implementation DosEmuThread
@synthesize started;
- (void)start
{
if (started) {
NSLog(@"DosEmuThread %p already started",self);
return;
}
NSLog(@"Start dosBox in new thread");
started = YES;
[NSThread detachNewThreadSelector:@selector(run) toTarget:self withObject:nil];
}
- (void) run {
@autoreleasepool {
/// UNCOMMENTING THIS SOMEWHAT FIXES THE ISSUE:
//dispatch_async(dispatch_get_main_queue(),^{
char *argv[1] = {"dosBox"};
SDL_main(1,argv);
self.started = NO;
//});
}
}
@end
这修复了应用程序,因为我可以进入 DOS 提示符,但是一旦我尝试打开这样的东西:
C:\ cd WAR2A
C:\ WAR2.EXE
我只是卡在一个空白屏幕上,所以很明显,一旦 SDL 尝试运行全屏 EXE 应用程序,将 dos 线程放在主线程上的快速修复就会中断。
我真的很想有能力模拟 x86 机器来运行经典的 DOS 游戏,甚至支持适用于 iOS 的 Windows 95,如果有替代的 git 存储库可以做类似的事情,请告诉我。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。