我已经将 OpenGL (webGL) 的内容移植到 Metal 并有一个问题

I have ported the contents of OpenGL (webGL) to Metal and have a question

我已经将 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 做同样的事情怎么办?这是一个基本的问题,但如果你能告诉我,我会很高兴。

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

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

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