我已经将 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
我已经将 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