gpt4 book ai didi

objective-c - NS图像到纹理

转载 作者:行者123 更新时间:2023-12-03 17:18:33 25 4
gpt4 key购买 nike

我们有一段代码可以绘制 NSImage(具有漂亮背景的文本),然后将其转换为 NSBitmapImageRep 以用作纹理(最初是 OpenGL,现在是 Metal)。它在数千台客户机器上运行多年,没有出现任何问题。

伪代码:

image = [[NSImage alloc] initWithSize:size];
[image lockFocus];
//Do drawing
bitmap = [[NSBitmapImageRep alloc] initWithFocusedViewRect:rect];
[image unlockFocus];
//Generate texture using [bitmap bitmapData];

现在,我们有一位客户拥有一台运行 macOS 10.15 的全新 MacBook,但纹理已损坏。我们已经追踪到使用浮点样本创建的 NSBitmapImageRep。

我还注意到 initWithFocusedViewRect 现已弃用。我尝试使用 [image CGImageForProfusedRect],然后从 CGImage 创建 NSBitmapImageRep,但这对于浮点样本也有同样的问题。

所以我的问题是:

  1. 是否可以将 NSBitmapImageRep 转换为我们需要的格式(8 位整数样本,32bpp)?
  2. 或者,如果我使用允许我指定所需格式的 NSBitmapImageRep 初始值设定项之一,我如何从 NSImage 获取数据?
  3. 或者,还有其他方法可以做到这一点吗?

最佳答案

我发现了两种方法来完成这项工作:

  1. 事实证明,更新 Metal 渲染器以支持浮点纹理相当简单,因此这是我们目前使用的解决方案。
  2. 使用 NSBitmapImageRep initWithBitmapDataPlanes... 指定我们要使用的确切格式。然后将当前上下文设置为使用图像代表创建的 NSGraphicsContext 以直接绘制到它:

    [NSGraphicsContext setCurrentContext:[NSGraphicsContextgraphicsContextWithBitmapImageRep:bitmapRep]];

关于objective-c - NS图像到纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58403209/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com