Swift开发NES模拟器:如何以60FPS高效渲染底层像素数据?
macOS平台Swift开发NES模拟器:高效VRAM渲染方案求助
我正在用Swift开发一款面向macOS的NES模拟器,卡在了高效渲染内部VRAM到视图的环节。简化问题后,我有一个代表256x240像素屏幕的RGBA像素值数组:
var viewport: Data = Data(count: width * height * 4 /* 每个颜色通道占1字节 */);
我会直接修改viewport的内部像素颜色,目标是每秒高效渲染60次。
已尝试的失败方案
目前测试了SpriteKit和Quartz,均存在相同问题:开销过大,仅随机修改像素颜色的情况下,帧率勉强达到30FPS。
SpriteKit实现
let node = SKSpriteNode(color: NSColor.black, size: self.size); func display() { self.node.texture = SKTexture(data: self.pixels, size: self.size); }Quartz实现
// 自定义NSView类 override func draw(_ dirtyRect: NSRect) { if let context = NSGraphicsContext.current?.cgContext { let bitmapInfo = CGBitmapInfo(rawValue: CGImageAlphaInfo.noneSkipLast.rawValue) let ctx = CGContext(data: &data, width: width, height: height, bitsPerComponent: 8, bytesPerRow: width * 4, space: CGColorSpaceCreateDeviceRGB(), bitmapInfo: bitmapInfo.rawValue) let image = ctx?.makeImage()! context.draw(image, in: self.frame); } }
问题
是否有更优的实现方式?还是这些工具对于这类底层渲染任务来说过于高层?
补充:我也关注过GLUT/OpenGL,但已知OpenGL已被弃用,想了解有没有新的「官方」替代方案
内容的提问来源于stack exchange,提问作者Davide Caroselli
相关产品推荐
相关产品推荐

