草庐IT

ios - 具有多重采样的 Metal 屏幕外绘图

如何将图元渲染到屏幕外纹理中,而不是直接渲染到屏幕中?我有一组三角形和相应的颜色,我只想像在屏幕上一样绘制它们,但要绘制到屏幕外纹理中,我可以将其保存到文件中。谁能给我看一个代码示例? 最佳答案 好吧,我自己意识到了。这段代码完成了这项工作,唯一的异常(exception)是它绘制了太大的三角形,但这是Vertex函数的另一个主题。这是我的代码:letfragmentProgram=defaultLibrary.newFunctionWithName("image_fragmentT")letvertexProgram=defaul

swift - 与 metal swift 并行计算数组值的总和

我正在尝试与metalswift并行计算大型数组的总和。请问有什么好办法吗?我的思路是,我将我的数组划分为子数组,并行计算一个子数组的和,然后在并行计算完成后计算子数组的和。例如如果我有array=[a0,....an]我将数组分成子数组:array_1=[a_0,...a_i],array_2=[a_i+1,...a_2i],....array_n/i=[a_n-1,...a_n]这个数组的总和是并行计算的,我得到sum_1,sum_2,sum_3,...sum_n/1最后只计算子和的总和。我创建了运行我的Metal着色器的应用程序,但有些事情我不太明白。vararray:[[Flo

ios - 如何使用 Swift 从 Metal 纹理中读取半精度 float ?

我的Metal计算内核写入格式为MTLPixelFormat.RG16Float的纹理,半精度float。这是因为Metal不支持写入32位浮点纹理。我需要在我的swift程序中读取这些半精度数字吗?我已将纹理移动到SwiftUInt8数组中,但我不知道如何将半精度float转换为Swiftfloat。 最佳答案 其实@Muzza的回答是不正确的。您可以从float16_t指针读取它们并将它们转换为普通的float32_t。无需使用外部库。只需导入arm_neonheader即可。 关于

找不到 iOS Metal 默认库

我尝试在一个简单的应用程序中使用iOSMetal,但是当我调用device.newDefaultLibrary()函数时,我在运行时遇到错误:/BuildRoot/Library/Caches/com.apple.xbs/Sources/Metal/Metal-56.7/Framework/MTLLibrary.mm:1842:failedassertion`Metaldefaultlibrarynotfound'有人知道问题出在哪里吗?我遵循了本教程:https://www.raywenderlich.com/77488/ios-8-metal-tutorial-swift-gett

swift - Metal block 渲染

我正在尝试使用Metal创建程序游戏,并且我正在使用基于八叉树的block方法来实现细节级别。我使用的方法涉及CPU为地形创建八叉树节点,然后使用计算着色器在GPU上创建其网格。该网格存储在用于渲染的block对象中的顶点缓冲区和索引缓冲区中。所有这些似乎都运行良好,但是在渲染block时我很早就遇到了性能问题。目前我收集了一组要绘制的block,然后将其提交给我的渲染器,渲染器将创建一个MTLParallelRenderCommandEncoder,然后为每个block创建一个MTLRenderCommandEncoder,然后将其提交给GPU。从外观上看,大约50%的CPU时间用于

ios - 查找 Metal 纹理中的最小值和最大值

我有一个包含16位无符号整数的MTLTexture(MTLPixelFormatR16Uint)。值的范围从大约7000到20000,其中0被用作“无数据”值,这就是它在下面的代码中被跳过的原因。我想找到最小值和最大值,以便我可以在0-255之间重新调整这些值。最终,我将寻找基于数据直方图的最小值和最大值(它有一些异常值),但现在我只能简单地提取最小值/最大值。我可以将数据从GPU读取到CPU并提取最小值/最大值,但更愿意在GPU上执行此任务。第一次尝试命令编码器为每个线程组分配16x16个线程,线程组的数量基于纹理大小(例如;宽度=textureWidth/16,高度=texture

ios - 作为 iOS 框架一部分的 Metal 文件

我正在尝试创建一个适用于METALApi(iOS)的框架。我是这个平台的新手,我想知道如何构建框架来处理.metal文件(我正在构建静态库,而不是动态库)。它们应该是.a文件的一部分,还是作为框架包中的资源文件?或者还有其他方法吗?谢谢。更新:对于那些解决这个问题的人——我最终遵循了warrenm1的建议选项——将.metal文件转换为字符串并调用newLibraryWithSource:options:error:。虽然它在性能上不是最好的,但它允许我只发送一个框架文件,而无需导入额外的资源。这对于创建使用Metal、ARKit等带有着色器文件的框架的人来说可能很有用。

ios - 编译和运行 Metal 示例

自从我使用XCode以来已经有一段时间了,但是自从Apple重新发布了XCode6和新的MetalAPI以来,我不得不检查一下。他们已经发布了示例,例如他们的Basic3D示例的转换版本。不过,我在编译和运行它们时遇到了问题。我必须添加用于编译和链接工作的Quatz和Metal框架的路径-认为内置库应该开箱即用?Metal着色器编译步骤也失败,找不到Metal编译器。该路径设置在XCode的哪个位置?如果我忽略着色器编译步骤,我会收到一条错误消息,指出该应用程序将无法在任何模拟器上运行。基于Metal的3D应用程序只能在实际硬件上运行而不能在模拟器模式下运行吗?

用于在运行时识别 Metal 支持的 iOS 代码?

通常,我使用下面的代码来识别设备的iOS版本。if([[UIDevicecurrentDevice].systemVersionfloatValue]>=8.0)以类似的方式,我正在尝试为设备寻找Metal支持。配备A7(或更好)GPU和iOS8.0的Apple设备支持Metal。这是我希望我的代码工作的方式:if(MetalSupported==true){//metalprogramming}else{//opengles2programming}如何获取bool变量MetalSupported的值? 最佳答案 您正在寻找特定于

ios - 在 iPhone 的 GPU( Metal )和 CPU(OpenCV)上处理摄像头馈送数据

我在iOS上以120fps的速度进行实时视频处理,我想先在GPU上预处理图像(在CPU上速度不够快的下采样、转换颜色等),然后使用OpenCV在CPU上对帧进行后处理。使用Metal在GPU和CPU之间共享摄像头信号的最快方法是什么?换句话说,管道看起来像:CMSampleBufferRef->MTLTextureorMTLBuffer->OpenCVMat我正在按以下方式转换CMSampleBufferRef->MTLTextureCVPixelBufferRefpixelBuffer=CMSampleBufferGetImageBuffer(sampleBuffer);//text