- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
MTLTexture
之间的主要区别是什么?对比 CGImageRef
?我们什么时候需要使用MTLTexture
而不是 CGImageRef
(反之亦然)?
我有一个应用程序(比如视频游戏),它可以在专用表面上自行绘制所有内容。这包括 60fps 的动画(所以我需要每 16 毫秒重绘一次表面)。我不知道使用 Metal 做我的应用程序的最有效方法
最佳答案
首先,MTLTexture
来自低级图形 API。 MTLTexture
指驻留在 GPU 可访问的内存中的“图像”(不一定在 GPU 本身上)。然后,您可以编写一个使用 Metal 的程序,特别是渲染 ( MTLRenderPipelineState
) 或计算 ( MTLComputePipelineState
) 管道状态,其中包含着色器(在 GPU 上运行的程序)来读取纹理、对其进行采样、写入它们并将它们用作附件(向它们输出渲染结果)。如果您想在 CPU 上读回纹理数据,也可以将纹理复制到缓冲区 (MTLBuffer
) 和其他纹理。但是MTLTexture
主要用于GPU而不是CPU。另外,MTLTexture
不仅限于 2D,它还可以是立方体纹理,甚至是 3D 纹理。CGImage
另一方面,它来自用于 2D 用途的更高级别的 API(Core Graphics 或 Quartz 2D)。您不需要着色器或 GPU 管道来创建或修改 CGImage
s 并且有许多功能可以“开箱即用”地处理这些图像。
我想说,如果你有一个 3D 视频游戏,你可以查看 Metal,但它是一个低级别的 API,例如,设置 Metal 的过程比设置 OpenGL 复杂得多。您不能按原样将 Core Graphics 用于 3D 游戏。如果 Metal 看起来太难了,您可以查看 Apple 提供的更高级别的 API,例如 SceneKit,它们也用于游戏开发。
关于 2D 游戏开发我不能说太多,但你绝对可以使用 Metal 来开发它,它可能只是有点“矫枉过正”。
总之,您需要在复杂性和控制力之间找到平衡,并选择最适合您的。
关于ios - MTLTexture 与 CGImageRef,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55801617/
我正在使用 Metal 来显示相机框架。我将输出的样本缓冲区转换为 id使用 CVMetalTextureCacheCreateTextureFromImage ,效果很好……除了框架顺时针旋转了 9
我关注了this example 从 Apple 缩小非常大的图像我是 downloading from a remote location .我已经用 Swift 重写了代码。它显然有效,但是当我调
我可以创建一个新的 MTLTexture 尺寸 w2/h2 现有 MTLTexture 区域 x1/y1/w1/h1 ? PS:我考虑过使用 MTLTexture.buffer?.makeTextur
我正在尝试获取 MTLTexture 的像素这边走: let pixelCount = compareTexture.width * compareTexture.height let region
我有一个 MTLTexture,它是它出现在 MTLView 中的大小。但是,我正在将纹理写入 AVAssetWriterInputPixelBufferAdaptor 以录制需要纹理的视频标准视频尺
MTLTexture 之间的主要区别是什么?对比 CGImageRef ?我们什么时候需要使用MTLTexture而不是 CGImageRef (反之亦然)? 我有一个应用程序(比如视频游戏),它可以
我使用以下代码创建了一个 MTLTexture 对象(为清楚起见,仅列出了部分代码)。 int tmpbuf[4096] id device = MTLCreateSystemDefaultDevic
我试图通过计算每个像素的所有 R G B 和 A 分量的总和来确定 MTLTexture(bgra8Unorm 格式)是否为空白。 此函数旨在通过在将纹理复制到指针后在内存中添加相邻的 float 来
我知道如何创建 MTLBuffer 和/或 MTLTexture,但是当不再需要这些资源时如何释放 GPU 内存? 最佳答案 MTLBuffer 和 MTLTexture 是 Objective-C
写入IOSurface时需要使用哪些API,以及需要采取哪些预防措施在 XPC 进程中,该进程也被用作 MTLTexture 的后备存储。在主应用程序中? 在我的 XPC 服务中,我有以下内容: IO
我有这个方法 - (id) createTextureFromImage:(UIImage*) image device:(id) device { CGImageRef imageRef = i
我将计算着色器的结果存储在 MTLBuffer 中。 MTLBuffer 的每个元素都是一个 UInt16。我试图将结果传递给片段着色器,该着色器通过将 MTLBuffer 的元素解释为 0 到 25
我是 Metal 新手。我想从 CVImageBufferRef 制作 MTLTexture。我正在使用以下代码示例来执行此操作。 guard let unwrappedImageTe
我有一个之前从 png 文件创建的 UIImage: let strokeUIImage = UIImage(data: pngData) 我想将 strokeImage(具有不透明度)转换为 MTL
MTLTexture 是一种内存分配,用于存储 GPU 可访问的格式化图像数据。我想知道有没有什么方法可以在本地保存 MTLTexture 数据? 如果是这样,在本地保存 MTLTexture 数据的
我目前正在使用 Metal 开发实时过滤器。在定义我的 CIImage 之后,我将图像渲染到 MTLTexture。 下面是我的渲染代码。 context 是由 Metal 支持的 CIContext
生成由 CVPixelBuffer 支持的 MTLTexture 的正确方法是什么? 我有以下代码,但它似乎泄漏了: func PixelBufferToMTLTexture(pixelBuffer:
我有内核函数,它必须将从 pixelBuffer(ARFrame.capturedImage) 创建的 Y 和 CbCr 纹理转换为 RGB 纹理,就像在苹果指南中一样 https://develop
尝试在 SCNRender 对象的每次调用渲染上从 MTLTexture 创建 CVPixelBufferRef: CVPixelBufferLockBaseAddress(pixelBuffer
我有一个(动画)UIView-Hierarchy,我想定期将 UIView 内容渲染到 MTLTexture 中以供进一步处理。 我尝试过的是子类化我的父 UIView 和 override publ
我是一名优秀的程序员,十分优秀!