微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

iOS 12.4 之后 open OpenGL 是不是完全坏掉了?

如何解决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 举报,一经查实,本站将立刻删除。