ios - 我已将 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 做同样的事情怎么办?这是一个初步的问题,但如果你能告诉我,我会很高兴。
解决方案
Metal 中并没有真正的帧缓冲区概念。您可以渲染到任何有用的纹理renderTarget
。您可以从 a 获取纹理CAMetalDrawable
(您可以从 a 获取CAMetalLayer
),或者您可以自己创建一个纹理,使用MTLDevice.makeTexture
方法并传递适当的MTLTextureDescriptor
.
然后,当你想渲染到它时,你需要创建一个渲染命令编码器,你可以从MTLCommandBuffer
. 您将需要通过一个MTLRenderPassDescriptor
. 在该描述符中,您可以在适当的渲染目标槽中设置纹理及其加载和存储操作(其中有 8 个)。
实际上有一个 WWDC 演讲深入探讨了如何将 GL 应用程序移植到 Metal:Bringing OpenGL Apps to Metal
推荐阅读
- c# - ASP.Net C#(获取图像中的颜色(红色)像素位置(PNG))返回错误的 X、Y 坐标
- android - 在通知单击时在浏览器中打开 URL 时出现 ActivityNotFoundException
- javascript - 应用于 Apple IOS 设备上的输入的不可见边框
- html - Angular 8 表单,ngSubmit 返回空数据对象
- angular - 带有 Angular 2.0 和 asp.net core(webpack) 和 Typescript 的 Protobuf
- modelica - Dymola 经常崩溃
- c++ - “候选模板被忽略:无法匹配......”用于模板函数的模板函数参数
- windows - 如何在 C:/xampp 文件夹中输入密码?
- iis - IIS 配置访问站点而不在 IP 后添加端口号
- python - /home/create/ 处的 IntegrityError(1048,“列 'country_id' 不能为空”)