metal相关内容
如何以编程方式获得金属的最大纹理大小(宽度和高度)?使用openGL我可以做到:glGetIntegerv(GL_MAX_TEXTURE_SIZE, ...)但是如何用Metal做到这一点? 解决方案 当前没有用于检索Metal设备最大纹理尺寸的API.您应该参考金属功能集表,并而是将其添加到您的应用中. 对于运行当前版本的iOS/tvOS/iPadOS的A9和更新的GPU,2D纹理
..
我想为Scenekit游戏创建一个效果器.我一直在研究着色器修改器,因为它们似乎是最轻的,并且在复制此效果方面没有任何运气: 是否可以使用着色器修改器来创建此效果? 您将如何实施? 解决方案 使用片段着色器修改器可以非常接近预期的效果.基本方法如下: 噪声纹理中的样本 如果噪声样本低于某个阈值(我称之为“泄露"),则将其丢弃,使其完全透明 否则,如果片段靠近边缘,则用您喜欢
..
当我绘制任何形状(无论是否带有纹理)时,当我进入全屏模式时,它都会闪烁,并在将鼠标移至顶部时显示标题栏.它将变轻,然后像瞬间一样返回.我不知道单色是否会发生这种情况,但是当我为顶点着色并绘制渐变或应用纹理时,就会发生这种情况.即使很微妙,也很烦人.我该如何解决? 如何复制:在“金属"中创建形状,或者对顶点进行不同的着色以创建渐变,或者对其应用纹理,然后使窗口全屏显示.将光标移到窗口顶部.当标
..
我正在尝试使用CoreImage&处理一系列UIImage。金属,并显示它们。我的问题是,如果我的gcd块忙,我想删除传入的图像。如何实现此GCD队列,如何定义队列的最大缓冲区大小? 解决方案 对此没有本地机制,但是您可以通过信号量实现算法上想要的结果。 在我一次进入“过程4之前,但是如果我们很忙则丢弃所有出现的过程”在这种情况下,让我首先考虑比较简单的“全部处理,但在任何给定时间不
..
我正在使用MTKView绘制金属内容。它的配置如下: mtkView = MTKView(frame:self.view.frame,device:device) mtkView .colorPixelFormat = .bgra8Unorm mtkView.delegate = self mtkView.sampleCount = 4 mtkView.isPaused =
..
如果我尝试使用bgra8Unorm以外的任何其他选项,它将崩溃,并显示 -[MTLDebugRenderCommandEncoder validateFramebufferWithRenderPipelineState:]:1192:断言失败对于颜色附件0,渲染管道的pixelFormat(MTLPixelFormatBGRA8Unorm_sRGB)与帧缓冲区的pixelFormat(MTL
..
我已经检查了这个问题.在纹理加载器选项中使用[MTKTextureLoader.Option.SRGB : false]不起作用.发生的全部是当我执行[MTKTextureLoader.Option.SRGB : true]时,它的颜色要深得多,而不是稍微深一些.肯定还有别的东西.这是此不良行为的示例. [MTKTextureLoader.Option.SRGB : false],它也要轻得多.即
..
我正在为macOS中的一个小程序编写一些代码,以使用Metal Performance Shaders进行图像处理.由于某种原因,下面的代码生成的图像看起来比原始图像要暗得多. 该代码仅获取纹理,对其进行一点高斯模糊,然后将图像输出到MTKView.不过,我无法弄清为什么生成的图像太暗. import Cocoa import Metal import MetalKit import
..
我正在尝试在iOS上使用MPSImageHistogramEqualization进行直方图均衡,但是最终抛出了一个我不理解的断言.这是我的代码: // Calculate Histogram var histogramInfo = MPSImageHistogramInfo( numberOfHistogramEntries: 256, hi
..
在Metal shader中,声明像const constant Vertex *vertexArray [[buffer(0)]]这样的变量的目的是什么(我指的是const constant)?为什么仅靠常数还不够?另外,constant和const有什么区别? 以同样的方式const device和constant有什么区别? 解决方案 const是类型限定符. constant
..
我正在将CIImage渲染为MTKView,并且图像小于可绘制对象. let centered = image.transformed(by: CGAffineTransform(translationX: (view.drawableSize.width - image.extent.width) / 2, y: (view.drawableSize.height - image.exte
..
我正在尝试实现一种支持金属的绘图应用程序,该应用程序通过沿路径重复冲压纹理正方形来在MTKView上绘制笔触.在笔触绘制时,我在顶点级别更改邮票的颜色/透明度 ,以便我可以模拟墨水效果,例如颜色/透明度随时间的推移而褪色等.当我使用时,这似乎可以正常工作经典的"over"类型混合(它不会随时间累积值),但是当我使用"additive"混合时,顶点透明度被完全忽略(即,我仅获得纹理透明度).以下是相
..
我写了一种方法来解析包含顶点数据的数组.该方法的目标是从该数据中生成一个新的唯一顶点数组和一个新索引. 这是我用来将顶点存储在数组中的结构. struct Vertex: Hashable { var x, y, z, nx, ny, nz, s, t: Float var hashValue: Int { return "\(self
..
我正在一个金属支持的绘画应用程序中,将笔画分为两步:第一步将笔画的前边缘绘制到屏幕上,并通过以下方式将其捕获到MTLTexture中: metalTextureComposite = self.currentDrawable!.texture 第二步绘制前进笔触的更新前缘,并在使用最后保存的metalTextureComposite纹理化的多边形上进行合成. 这种方法使我可以画出无
..
我想改善我最近的问题并实现像这样在SceneKit中使用Metal(片段)着色器. 这是我的片段着色器,实现了简单的phong照明和卡通效果: fragment float4 lightingFragment(VertexOut in [[stage_in]]) { float3 normal = normalize(in.normal); // For edges
..
我正在尝试使用MPSImageIntegral计算MTLTexture中某些元素的总和.这就是我正在做的: std::vector integralSumData; for(int i = 0; i
..
我是金属着色语言的新手,所以您的友好指导会非常有帮助. 我只是使用金属重复纹理,如下图所示 (图像序列). 但是它似乎不平滑.我如何使其像下面的金属点链接一样显示为平滑线.(此刻,我要做的是在手势的每个触摸点为顶点缓冲区(MTLBuffer)分配内存. 代码: func allocateMemoryForVetexBuffer(vertices: Array){
..
在金属中,在着色器内部(输入和输出)使用什么坐标系?当我们渲染到纹理时是一样的吗?用z缓冲区也可以吗?是否有任何不一致之处?最后,metal,opengl和directX有什么区别? 解决方案 金属坐标系 金属定义了几个标准坐标系以表示转换后的图形数据 渲染流程的不同阶段. 1)NDC(标准化设备坐标):开发人员可以使用此坐标来构造其几何形状,并通过模型和视图矩阵在顶点着色器中
..
我一直在使用Metal渲染多面体.当我尝试使用newBufferWithBytes()渲染一个二十面体实体时,会出现问题,该实体的顶点几乎只有1680字节的数据大小.然后整个应用程序停止运行,CPU和GPU框架都降为零,除了Metal视图冻结之外,一切恢复正常. 我在实现中使用常规多面体作为Node的子类. class Node { let name : String var vert
..
我正在使用金属着色器在屏幕上绘制许多粒子.每个粒子都有其自己的位置(可以改变),通常两个粒子具有相同的位置.如何检查写入的texture2d在特定位置还没有像素? (我想确保仅在尚未绘制粒子的情况下才在特定位置绘制粒子,因为如果在同一位置绘制许多粒子,我会出现难看的闪烁) 我尝试了outTexture.read(particlePosition),但是由于纹理访问限定符access::wri
..