草庐IT

iOS Metal : Unable to create compute pipeline state with function

我正在尝试使用iOSMetalFramework在GPU上制作一个简单的数独应用程序。我按照这篇博文的说明操作:http://memkite.com/blog/2014/12/15/data-parallel-programming-with-metal-and-swift-for-iphoneipad-gpu/我在这里对我的代码进行版本控制:https://github.com/mateuszbuda/Sudoku(在写这个问题时HEAD是提交c3e06e0)我在调用时遇到了错误newComputePipelineStateWithFunction那是在ViewController中

swift - GLKit 与 Metal 透视矩阵的区别

我正在阅读Metaltutorial在raywenderlich.com上,它介绍了纯Swiftfloat4x4helperclass.99%它只是GLKit函数的包装器,除了一个真正让我困惑的函数:staticfuncmakePerspectiveViewAngle(_fovyRadians:Float,aspectRatio:Float,nearZ:Float,farZ:Float)->float4x4{varq=unsafeBitCast(GLKMatrix4MakePerspective(fovyRadians,aspectRatio,nearZ,farZ),to:float4

ios - Metal 角色动画

我刚刚深入研究了Metal的世界,我以为我已经掌握了它的窍门!但后来我想到,如果我想制作游戏,那么在屏幕上移动的静态物体是不够的。所以我的问题是,“是否可以使用Metal为模型创建动画?”我看过其他API,例如SpriteKit和SceneKit,但我发现它们不支持着色器,而且没有Metal强大。我能想到的唯一方法是创建60个不同的模型,然后一个接一个地加载,以产生一种“定格动画”效果,但我认为这可能会非常低效,并希望有一个更简单的答案?非常感谢! 最佳答案 是的,还有其他更有效的动画制作方法。但在开始之前,先警告一下:看起来你真的

ios - 使用 Metal 顶点和片段着色器将 MTLTexture 传递给 SCNProgram

我有一组图像,我必须根据顶点随机选择一个图像,用Metal我可以实现这个MTLTexture2DArray。但我使用的是SceneKit和CustomSCNProgram,问题是我无法将MTLTexture传递给Metalfragment函数。如果我将图像设置为SCNMaterial它会起作用,如果我设置Metal纹理它会抛出异常。letmaterial=SCNMaterial()material.program=programmaterial.setValue(metalTexture,forKey:"customTexture")这个问题和这个问题完全一样PassingMetalt

swift - 从 Swift 将 float 或颜色传递到 Metal 片段着色器

我正在尝试用Metal编写一个片段着色器,但无法理解如何传递单个值(例如float、float4或half4)。我的着色器如下:#includeusingnamespacemetal;typedefstruct{float4renderedCoordinate[[position]];}FullscreenQuadVertex;vertexFullscreenQuadVertexfullscreenQuad(unsignedintvertex_id[[vertex_id]]){float4x4renderedCoordinates=float4x4(float4(-1.0,-1.0,0

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时间用于