metal相关内容

为什么将金属着色器渐变作为SCNProgram应用于SceneKit节点比作为MTKView进行照明?

我有一个由Metal片段着色器生成的渐变,该渐变已应用于平面几何定义的SCNNode. 它看起来像这样: 当我将相同的着色器应用于Xcode游乐场中渲染的MTKView时,颜色会变暗.是什么导致Scenekit版本中的颜色变浅? 这里是Metal着色器和GameViewController. 着色器: #include using nam ..
发布时间:2020-05-09 02:02:55 其他开发

SceneKit帧率不一致

我在SceneKit入门项目中看到非常不一致的帧速率.有时,它以60 fps的速度持续运行(12ms渲染,6ms的金属刷新),有时它以40 fps的速度持续运行(20ms渲染,6ms的金属刷新),不多也不少. 当我重新打开应用程序时,帧速率会随机变化,并且将保持该帧速率直到下一次重新打开.我尝试切换到OpenGL ES,虽然似乎可以在入门项目中修复它,但在我的实际应用中仍然可以看到这些下降. ..
发布时间:2020-05-09 02:02:49 移动开发

金属-调整视频缓冲区的大小,然后再传递到自定义内核过滤器

在我们的iOS应用中,我们使用的是使用Metal(CIKernel/CIColorKernel包装器)的自定义过滤器. 让我们假设我们有一个4K视频和一个具有1080p输出大小的自定义视频合成,它在视频缓冲区上应用了高级过滤器. 显然,我们不需要过滤视频的原始大小,因此我们可能会通过内存警告(真实情况)终止该应用. 这是视频过滤管道: 获取4K缓冲区(如CIImage )-> ..
发布时间:2020-05-09 02:02:45 移动开发

带有BT.709矩阵的H.264编码视频是否包含任何伽马调整?

我已阅读可以在 Quicktime Gamma Bug .似乎Quicktime和Adobe编码器存在一些历史问题,它们不正确地进行了不同的伽玛调整,结果使得视频流在不同播放器上看起来很糟糕.这确实令人迷惑,因为如果您与 sRGB 进行比较,则可以清楚地表明如何应用伽玛编码然后将其解码以在sRGB和线性之间转换.如果在创建h.264数据流时在矩阵步骤之后没有应用伽玛调整,为什么BT.709会详细介 ..
发布时间:2020-05-09 02:02:43 移动开发

如何在SceneKit中移动旋转的SCNNode?

下图显示了一个旋转的框,应在X和Z轴上水平移动它们. Y应该保持不受影响,以简化方案.该框也可以是相机的SCNNode,所以我认为此时投影是没有意义的. 所以可以说我们要沿红色箭头方向移动框.如何使用SceneKit实现这一目标? 红色箭头指示框的-Z方向.它还向我们展示了它与摄影机的投影或与显示为网格的深灰色线的全局轴不平行. 我的最后一种方法是平移矩阵和旋转矩阵的乘积,产生一 ..
发布时间:2020-05-07 18:50:43 移动开发

新的MacBook Pro(2016年末)GPU上的金属内核行为不正常

我正在研究使用Swift和Metal在GPU上进行图像处理的macOS项目.上周,我收到了新的15英寸MacBook Pro(2016年末),并且发现我的代码有些奇怪:本应写入纹理的内核似乎没有这样做…… 经过大量挖掘,我发现问题与Metal(AMD Radeon Pro 455或Intel(R)HD Graphics 530)使用哪个GPU进行计算有关. 使用MTLCopyAllDe ..
发布时间:2020-04-25 11:27:47 移动开发

device.newDefaultLibrary()返回nil

安装XCode 6 GM之后,由它编译的应用程序开始在Metal Framework device.newDefaultLibrary()调用时返回nil。问题是什么? 解决方案 将您的设备更新到iOS 8 GM,它将停止失败。 ..
发布时间:2018-09-25 21:47:29 移动开发

编译并运行金属示例

自从我使用XCode已经有一段时间了,但是由于Apple取消了XCode 6和新的Metal API,我不得不检查它。 他们已经发布了例子,例如他们的Basic3D示例的转换版本。但是,我在编译和运行时遇到问题。我不得不添加Quatz和Metal框架的路径以进行编译和链接工作 - 认为本应该开箱即用的内置库? 也是金属着色器编译步骤失败,它找不到金属编译器。 XCode中的路径设置在哪 ..
发布时间:2018-09-21 19:05:01 移动开发

iOS上数组的Swift金属并行和计算

基于@Kametrixom 回答,我已经为数组中的sum的并行计算做了一些测试应用程序。 我的测试应用程序如下所示: import UIKit import Metal class ViewController:UIViewController { / /数据类型,必须与着色器相同 typealias DataType = CInt 覆盖func viewD ..
发布时间:2018-09-21 18:34:05 移动开发

将uintptr_t转换为id< MTLTexture>

我想创建简单的iOS插件,可以将纹理绘制到统一的Texture2D。我已经通过CreateExternalTexture()和UpdateExternalTexture()完成了它,它工作正常,但我很好奇我是否可以直接从iOS端填充Unity纹理。这是我的iOS插件代码: // // testTexturePlugin.m // Unity- iPhone // //由用户 ..
发布时间:2018-09-20 21:46:32 C#/.NET

iOS代码在运行时识别金属支持?

通常,我使用以下代码来识别设备的iOS版本。 if([[UIDevice currentDevice] .systemVersion floatValue]> = 8.0) 以类似的方式,我试图找到金属支持该设备。使用A7(或更好)GPU和iOS 8.0的Apple设备支持Metal。 这是我期望我的代码工作的方式: if(MetalSupported ..
发布时间:2018-09-19 21:07:22 移动开发

有效地将Swift Array复制到iOS Metal的内存缓冲区

我正在使用Apple的新Metal框架编写iOS应用程序。我有一系列Matrix4对象(参见 Ray Wenderlich's教程)我需要通过MTLDevice.newBufferWithLength()方法传入着色器。 Matrix4对象正在利用Apple的GLKit(它包含一个GLKMatrix4对象)。 我正在利用GPU调用实例化。 我稍后会将其更改为一个结构,其中包含每个实例的 ..
发布时间:2018-09-19 14:36:24 移动开发

纹理刷(绘图应用)使用金属

我正在尝试实现一个金属支持的绘图应用程序,其中笔触在MTKView上通过纹理方块沿手指位置重复绘制。 我用alpha 0.2绘制此图。当正方形重叠时,添加颜色。我怎么能用alpha 0.2绘制。 解决方案 我认为你需要将画笔方块绘制成单独的纹理,最初清除为透明,无需混合。然后使用混合将整个纹理绘制到视图中。 如果您将画笔直接绘制到视图中,则它们将累积。绘制正方形1后,它是图像的 ..
发布时间:2018-09-18 11:20:32 移动开发

为iOS Metal中的MTLBuffer使用的数据分配内存

作为此答案的后续问题。我试图用在Metal中的内核函数替换在CPU上运行的for循环来并行化计算并加快性能。 我的函数基本上是一个卷积。由于我反复接收输入数组值的新数据(数据来自 AVCaptureSession ),似乎使用 newBufferWithBytesNoCopy:length:options:deallocator: 是创建 MTLBuffer 对象的合理选项。以下是相关代码: ..
发布时间:2018-09-17 10:43:08 移动开发

从CVImageBuffer保持MTLTexture会导致口吃

我正在使用 CVImageBuffer (来自相机和玩家)创建 MTLTexture > CVMetalTextureCacheCreateTextureFromImage 获取 CVMetalTexture 然后 CVMetalTextureGetTexture 获取 MTLTexture 。 我看到的问题是,当我稍后使用Metal渲染纹理时,我偶尔会看到渲染出的视频帧可能因为CoreVi ..
发布时间:2018-09-17 09:06:27 移动开发

实时捕捉金属MTKView作为电影?

从 MTKView 中捕获帧的最有效方法是什么?如果可能的话,我想实时保存帧中的.mov文件。是否可以渲染到AVPlayer框架中? 目前正在使用此代码进行绘制(基于@warrenm PerformanceShaders project ): func draw(在视图中:MTKView){ _ = inflightSemaphore.wait(timeout:DispatchTi ..
发布时间:2018-09-13 15:26:24 移动开发

如何加速iOS / Mac OS的金属代码

我正在尝试在Metal中实现代码,该代码在两个具有长度的向量之间执行一维卷积。我已经实现了以下正常工作 kernel void convolve(const device float * dataVector [[buffer(0)]] , const device int& dataSize [[buffer(1)]], const device float * filterVect ..
发布时间:2018-09-13 15:26:05 移动开发

newComputePipelineStateWithFunction失败

我想让一个神经网络运行在金属上。 基本思想是数据复制。每个gpu线程为随机数据点运行一个版本的网络。 我写了其他着色器,工作正常。 我也试过我的代码在一个c + +命令行应用程序。没有错误。 也没有编译错误。 我使用苹果文档转换为金属c ++,因为并不支持c ++ 11中的所有内容。 它在加载内核函数并尝试将 newComputePipelineStateWithFun ..
发布时间:2016-10-20 09:16:49 C/C++开发