草庐IT

ios - 只需将 Metal frag 着色器设为透明颜色?

我有一个简单的管道描述符letp=MTLRenderPipelineDescriptor()...p.colorAttachments[0].pixelFormat=.bgra8Unorm背景是纯蓝色letbg=MTLClearColor(red:0,green:0,blue:1,alpha:1)letpass=MTLRenderPassDescriptor()pass.colorAttachments[0].loadAction=.clearpass.colorAttachments[0].clearColor=bg我只是在上面画了一个多边形,比如红色的:fragmenthalf4f

ios - 什么是 Apple 的 Metal( Metal 着色器语言)纹理坐标?

在iOS或OS/X中,MetalShaderLanguage内核函数中使用了哪些纹理坐标?例如,给定一个MTLTexture和uint2gid[[thread_position_in_grid]]就是gid.x和gid.y在0..1(x和y是float)或0..inTexture.get_width()(x和y是整数)之间。提前致谢 最佳答案 thread_position_in_grid是网格中的一个索引(整数),它采用您在dispatchThreadgroups:threadsPerThreadgroup:中指定的范围内的值。您

ios - 苹果 Metal 矩阵乘法基准测试结果不一致

我在这里尝试AppleMetal矩阵乘法示例:https://developer.apple.com/library/ios/samplecode/MetalPartialSumsCompute/Introduction/Intro.html我得到奇怪的结果:对于测试[1]-[7],我得到Metal以大约0.05GFlops的速度运行。从测试[8]-[20]中,Metal开始以大约500GFlops的速度非常快。我在下面附上日志。我查看了代码,测试之间没有什么不同,它们都是大小相似的随机矩阵。看起来Metal在某些时候开始无缘无故地快速运行。知道发生了什么事吗?日志:2016-06-3

ios - 相当于 iOS Metal 中的 Open GL 精度属性(lowp、mediop、highp)

在OpenGLES中,可以使用lopw/mediump/highp为制服和属性设置精度。Metal中有这样的东西吗? 最佳答案 Metal着色语言支持half数据类型(参见thespec的第2.1节)。它在那里定义为:A16-bitfloating-point.ThehalfdatatypemustconformtotheIEEE754binary16storageformat.这使得它几乎等同于mediump。Metal中并没有真正等同于lowp的东西。然而,这并不是真正的损失,因为我相信支持Metal的iOSGPU无论如何都不会

ios - Metal 计算管道慢得离谱

我看到了使用Metal计算管道提高应用性能的机会。但是,我的初始测试显示计算管道慢得离谱(至少在旧设备上)。所以我做了一个示例项目来比较计算和渲染管道的性能。该程序采用2048x2048源纹理并将其转换为目标纹理中的灰度。在iPhone5S上,片段着色器完成转换需要3毫秒。但是,计算内核需要177毫秒才能完成同样的事情。那是59倍长!!!您对旧设备上的计算管道有何体验?这不是慢得离谱吗?这是我的片段和计算函数://GrayscaleFragmentFunctionfragmenthalf4grayscaleFragment(RasterizerDatain[[stage_in]],te

ios - 如何在 Metal 中的线程组之间进行同步

我想在Metal内核的线程组之间同步写入MTLBuffer。我尝试使用atomic_uint类型和atomic_fetch_add_explicit函数。这应该可行,但我的问题是我不知道如何解释CPU端的值。我更喜欢一种锁定机制,我可以使用它来同步从不同线程组写入同一缓冲区。是否存在不受原子类型约束的机制或其他一些解决方法? 最佳答案 我在16位float转换中遇到了类似的问题。您可以尝试通过从缓冲区中提取原始位来解释CPU端的值,与atomic_uint的内部格式进行比较,然后尝试使用获得的信息重新转换为您需要的数据类型。肯定是一

ios - CoreGraphics 是否支持 Apple 设备上的 Metal?

我读过CoreGraphicsisbasedonOpenGLES并使用QuartzDrawingEngine在Apple设备上(iOS、OSX)但是随着即将到来的deprecationofOpenGLESforMetal,CoreGraphics是否会更新以支持即将推出的iOS/OSX设备的Metal和/或软件渲染? 最佳答案 首先,CoreGraphics不“使用”Quartz。“CoreGraphics”和“Quartz”只是同一事物的两个名称。它们是等价的。其次,Apple不promiseCoreGraphics在幕后使用的是

ios - SceneKit 中用于勾勒对象轮廓的 Metal 着色器

我正在玩弄并尝试在SceneKit中实现Metal着色器,该着色器将勾勒出一个对象。这个想法是画一个类似于thisblogpost中的这张图片的轮廓(或剪影)(博文不包含任何代码):我是SceneKit和Metal着色器的新手,所以我只能绘制一些几何图形并编写简单的顶点或片段着色器。我很好奇我怎样才能达到这种效果?是否分多次完成?干杯! 最佳答案 这里的基本思想是克隆“选定”节点及其几何体,然后使用自定义顶点和片段着色器沿着顶点法线“推出”几何体,只绘制克隆几何体的背面纯色。我写了一个小示例项目来演示这一点并发布了它here.核心S

ios - Metal Compute 管道不适用于 MacOS,但适用于 iOS

我正在尝试使用Metal进行一些GPGPU计算。我有一个基本的Metal管道:创建所需的MTLComputePipelineState管道和所有关联对象(MTLComputeCommandEncoder、命令队列等);创建用于写入的目标纹理(使用desc.usage=MTLTextureUsageShaderWrite;);启动一个基本的着色器来用一些值填充这个纹理(在我的实验中,要么将其中一个颜色分量设置为1,要么根据线程坐标创建一个灰度值渐变);从GPU读回此纹理的内容。我在2个设置中测试此代码:2013年初在OSX10.11上使用MacBookPro;在iOS9和iPhone6上

ios - 使用 Metal/OpenGL ES 在 iOS 中渲染视频

如何使用Metal或OpenGLES渲染视频?我说的是我自己解码和显示帧。我是Metal和OpenGLES的新手,我不知道从哪里开始。 最佳答案 对于刚开始接触此问题的人来说,您的问题并非微不足道,因此您可能希望将其分解为更小的部分。也就是说,我已经这样做了,并且可以描述一般过程。首先,您将从一个AVAssetReader开始,并为音频和视频轨道设置AVAssetReaderOutputs。从中,您可以循环访问CMSampleBufferRefs。对于每个视频帧,您将提取一个CVImageBufferRef。将视频帧上传到OpenG