【问题标题】:Reverted PNG Textures with Metal, when compiled with Macos SDK 10.14使用 Macos SDK 10.14 编译时使用金属还原 PNG 纹理
【发布时间】:2019-12-16 00:32:36
【问题描述】:

我有一个非常奇怪的问题,我在任何地方都没有提到。我的公司为各种主机开发插件。现在我们正在尝试将我们的 OpenGL 代码移动到 Metal。我尝试了一些主机(如 Logic 和 Cubase),并且成功了。示例如下:

但是,最近,这些应用程序的新版本可用,使用 10.14 MacOS SDK 编译,这是我开始得到的:

所以,我们有两个问题:颜色和翻转纹理。我找到了颜色的解决方案(见下面的代码),但我完全不知道如何解决纹理问题!当然,我可以翻转纹理,但是在以前的应用程序版本中,它们会损坏。

我相信 PNG 加载发生了一些变化,因为如果您仔细观察 - 动态生成的文本纹理,在两种情况下看起来都一样。

这是我的代码:

imageOptions = @{MTKTextureLoaderOptionSRGB : @FALSE}; // Solves the color problem
NSData* imageData = [NSData dataWithBytes:imageBuffer length:imageBufferSize];
requestedMTLTexture = [m_metal_renderer.metalTextureLoader newTextureWithData:imageData options:imageOptions error:&error];

而 imageData 是放置 PNG 的内存。我也尝试过这种方法:

CGDataProvider* imageData = CGDataProviderCreateWithData(nullptr, imageBuffer, imageBufferSize, nullptr);
CGImage* loadedImage = CGImageCreateWithPNGDataProvider(imageData, nullptr, false, kCGRenderingIntentDefault);
requestedMTLTexture = [m_metal_renderer.metalTextureLoader newTextureWithCGImage:loadedImage options:0 error:&error];

得到完全相同的结果。

在 10.14 操作系统上使用最新的 10.14 SDK 构建的所有应用程序都会出现此问题。有没有人知道是什么原因造成的,或者至少给我一种方法来理解我编译的 SDK 是什么?

【问题讨论】:

  • 你的纹理被翻转了,你需要按图像的高度进行平移并翻转Y轴的符号。此外,您需要将纹理读取为 BGRA,以避免出现 B 和 R 通道向后的问题。不要使用金属纹理加载器,直接使用 CoreGraphics API。

标签: macos png metal macos-mojave metalkit


【解决方案1】:

MTKTextureLoaderOptionOrigin 用于指定何时翻转纹理的像素坐标的键。

如果省略此选项,纹理加载器不会翻转加载的纹理。

此选项不能用于块压缩纹理格式,只能用于 2D、2D 数组和立方体贴图纹理。翻转纹理的每个 mipmap 级别和切片。

imageOptions = @{MTKTextureLoaderOptionSRGB : @FALSE, MTKTextureLoaderOptionOrigin : @TRUE}; // Solves the color problem
NSData* imageData = [NSData dataWithBytes:imageBuffer length:imageBufferSize];
requestedMTLTexture = [m_metal_renderer.metalTextureLoader newTextureWithData:imageData options:imageOptions error:&error];

【讨论】:

  • 我试过了。具有所有 3 个可能的值。它要么翻转纹理而不管应用程序,要么保持原样。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-08
  • 2019-01-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多