metal相关内容

如何以编程方式获取最大纹理大小(宽度和高度)

如何以编程方式获得金属的最大纹理大小(宽度和高度)?使用openGL我可以做到:glGetIntegerv(GL_MAX_TEXTURE_SIZE, ...)但是如何用Metal做到这一点? 解决方案 当前没有用于检索Metal设备最大纹理尺寸的API.您应该参考金属功能集表,并而是将其添加到您的应用中. 对于运行当前版本的iOS/tvOS/iPadOS的A9和更新的GPU,2D纹理 ..
发布时间:2020-12-01 01:46:39 移动开发

如何编写SceneKit着色器修改器以使效果溶解

我想为Scenekit游戏创建一个效果器.我一直在研究着色器修改器,因为它们似乎是最轻的,并且在复制此效果方面没有任何运气: 是否可以使用着色器修改器来创建此效果? 您将如何实施? 解决方案 使用片段着色器修改器可以非常接近预期的效果.基本方法如下: 噪声纹理中的样本 如果噪声样本低于某个阈值(我称之为“泄露"),则将其丢弃,使其完全透明 否则,如果片段靠近边缘,则用您喜欢 ..
发布时间:2020-12-01 00:05:42 移动开发

如何防止标题栏在Metal中引起渲染问题?

当我绘制任何形状(无论是否带有纹理)时,当我进入全屏模式时,它都会闪烁,并在将鼠标移至顶部时显示标题栏.它将变轻,然后像瞬间一样返回.我不知道单色是否会发生这种情况,但是当我为顶点着色并绘制渐变或应用纹理时,就会发生这种情况.即使很微妙,也很烦人.我该如何解决? 如何复制:在“金属"中创建形状,或者对顶点进行不同的着色以创建渐变,或者对其应用纹理,然后使窗口全屏显示.将光标移到窗口顶部.当标 ..
发布时间:2020-11-11 01:36:29 移动开发

如何限制GCD队列缓冲区大小

我正在尝试使用CoreImage&处理一系列UIImage。金属,并显示它们。我的问题是,如果我的gcd块忙,我想删除传入的图像。如何实现此GCD队列,如何定义队列的最大缓冲区大小? 解决方案 对此没有本地机制,但是您可以通过信号量实现算法上想要的结果。 在我一次进入“过程4之前,但是如果我们很忙则丢弃所有出现的过程”在这种情况下,让我首先考虑比较简单的“全部处理,但在任何给定时间不 ..
发布时间:2020-10-10 00:24:41 移动开发

如何更改Metal中的pixelFormat?

如果我尝试使用bgra8Unorm以外的任何其他选项,它将崩溃,并显示 -[MTLDebugRenderCommandEncoder validateFramebufferWithRenderPipelineState:]:1192:断言失败对于颜色附件0,渲染管道的pixelFormat(MTLPixelFormatBGRA8Unorm_sRGB)与帧缓冲区的pixelFormat(MTL ..
发布时间:2020-08-15 00:43:11 其他开发

即使使用[MTKTextureLoader.Option.SRGB:false],金属也会渲染出奇特的深色纹理?

我已经检查了这个问题.在纹理加载器选项中使用[MTKTextureLoader.Option.SRGB : false]不起作用.发生的全部是当我执行[MTKTextureLoader.Option.SRGB : true]时,它的颜色要深得多,而不是稍微深一些.肯定还有别的东西.这是此不良行为的示例. [MTKTextureLoader.Option.SRGB : false],它也要轻得多.即 ..
发布时间:2020-08-15 00:41:13 移动开发

金属质感比原始图像暗

我正在为macOS中的一个小程序编写一些代码,以使用Metal Performance Shaders进行图像处理.由于某种原因,下面的代码生成的图像看起来比原始图像要暗得多. 该代码仅获取纹理,对其进行一点高斯模糊,然后将图像输出到MTKView.不过,我无法弄清为什么生成的图像太暗. import Cocoa import Metal import MetalKit import ..
发布时间:2020-08-12 02:30:57 移动开发

用"const constant"声明变量的目的是什么?

在Metal shader中,声明像const constant Vertex *vertexArray [[buffer(0)]]这样的变量的目的是什么(我指的是const constant)?为什么仅靠常数还不够?另外,constant和const有什么区别? 以同样的方式const device和constant有什么区别? 解决方案 const是类型限定符. constant ..
发布时间:2020-06-30 20:51:27 移动开发

MTKView顶点透明度未在“附加"变量中获取.混合模式

我正在尝试实现一种支持金属的绘图应用程序,该应用程序通过沿路径重复冲压纹理正方形来在MTKView上绘制笔触.在笔触绘制时,我在顶点级别更改邮票的颜色/透明度 ,以便我可以模拟墨水效果,例如颜色/透明度随时间的推移而褪色等.当我使用时,这似乎可以正常工作经典的"over"类型混合(它不会随时间累积值),但是当我使用"additive"混合时,顶点透明度被完全忽略(即,我仅获得纹理透明度).以下是相 ..
发布时间:2020-05-09 02:08:23 移动开发

在draw()循环中重复使用currentDrawable.texture时,MTKView混合问题

我正在一个金属支持的绘画应用程序中,将笔画分为两步:第一步将笔画的前边缘绘制到屏幕上,并通过以下方式将其捕获到MTLTexture中: metalTextureComposite = self.currentDrawable!.texture 第二步绘制前进笔触的更新前缘,并在使用最后保存的metalTextureComposite纹理化的多边形上进行合成. 这种方法使我可以画出无 ..
发布时间:2020-05-09 02:08:14 其他开发

金属阴影语言中平移手势上纹理的重新排列

我是金属着色语言的新手,所以您的友好指导会非常有帮助. 我只是使用金属重复纹理,如下图所示 (图像序列). 但是它似乎不平滑.我如何使其像下面的金属点链接一样显示为平滑线.(此刻,我要做的是在手势的每个触摸点为顶点缓冲区(MTLBuffer)分配内存. 代码: func allocateMemoryForVetexBuffer(vertices: Array){ ..
发布时间:2020-05-09 02:08:06 移动开发

金属中使用的坐标系是什么?

在金属中,在着色器内部(输入和输出)使用什么坐标系?当我们渲染到纹理时是一样的吗?用z缓冲区也可以吗?是否有任何不一致之处?最后,metal,opengl和directX有什么区别? 解决方案 金属坐标系 金属定义了几个标准坐标系以表示转换后的图形数据 渲染流程的不同阶段. 1)NDC(标准化设备坐标):开发人员可以使用此坐标来构造其几何形状,并通过模型和视图矩阵在顶点着色器中 ..
发布时间:2020-05-09 02:08:04 其他开发

newBufferWithBytes()是否有大小限制?

我一直在使用Metal渲染多面体.当我尝试使用newBufferWithBytes()渲染一个二十面体实体时,会出现问题,该实体的顶点几乎只有1680字节的数据大小.然后整个应用程序停止运行,CPU和GPU框架都降为零,除了Metal视图冻结之外,一切恢复正常. 我在实现中使用常规多面体作为Node的子类. class Node { let name : String var vert ..
发布时间:2020-05-09 02:07:59 移动开发

iOS Metal Shader-纹理读取和写入访问权限?

我正在使用金属着色器在屏幕上绘制许多粒子.每个粒子都有其自己的位置(可以改变),通常两个粒子具有相同的位置.如何检查写入的texture2d在特定位置还没有像素? (我想确保仅在尚未绘制粒子的情况下才在特定位置绘制粒子,因为如果在同一位置绘制许多粒子,我会出现难看的闪烁) 我尝试了outTexture.read(particlePosition),但是由于纹理访问限定符access::wri ..
发布时间:2020-05-09 02:07:55 移动开发