You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 13:21:27