首页 > 解决方案 > 我已将 OpenGL (webGL) 的内容移植到 Metal 并有一个问题

问题描述

我已将 OpenGL (webGL) 的内容移植到 Metal 并有一个问题。在 OpenGL (webGL) 中执行以下操作时,

-我想在 OpenGL (webGL) 中绑定和渲染帧缓冲区。

gl.bindFramebuffer(gl.FLAMEBUFFER, buffer[0].framebuffer)
gl.useProgram(…)
gl.enableAttribute(VBO, Location, attStride)
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, IBO)
gl.uniform2fv....

gi.drawElement(gl.TRAIANGLES,..., gl.UNSIGNED_SHORT, 0)

如果你想对 Metal 做同样的事情怎么办?这是一个初步的问题,但如果你能告诉我,我会很高兴。

标签: iosmetal

解决方案


Metal 中并没有真正的帧缓冲区概念。您可以渲染到任何有用的纹理renderTarget。您可以从 a 获取纹理CAMetalDrawable(您可以从 a 获取CAMetalLayer),或者您可以自己创建一个纹理,使用MTLDevice.makeTexture方法并传递适当的MTLTextureDescriptor.

然后,当你想渲染到它时,你需要创建一个渲染命令编码器,你可以从MTLCommandBuffer. 您将需要通过一个MTLRenderPassDescriptor. 在该描述符中,您可以在适当的渲染目标槽中设置纹理及其加载和存储操作(其中有 8 个)。

实际上有一个 WWDC 演讲深入探讨了如何将 GL 应用程序移植到 Metal:Bringing OpenGL Apps to Metal


推荐阅读