我想将一个MTLTexture对象设置为一个场景的环境贴图,因为根据文档似乎是可能的.我可以UIImage使用以下代码将环境贴图设置为a :
let roomImage = UIImage(named: "room")
scene.lightingEnvironment.contents = roomImage
Run Code Online (Sandbox Code Playgroud)
这很有效,我看到了金属物体上图像的反射.我尝试将图像转换为a MTLTexture并使用以下代码将其设置为环境贴图:
let roomImage = UIImage(named: "room")
let loader = MTKTextureLoader(device: MTLCreateSystemDefaultDevice()!)
let envMap = try? loader.newTexture(cgImage: (roomImage?.cgImage)!, options: nil)
scene.lightingEnvironment.contents = envMap
Run Code Online (Sandbox Code Playgroud)
然而,这不起作用,我最终得到一个空白的环境贴图,没有反射我的对象.
另外,我没有设置optionsas nil,而是尝试MTKTextureLoader.Option.textureUsage使用它可以获得的每个可能值来设置密钥,但这也不起作用.
编辑:您可以查看此仓库中的示例项目,并使用它来重现此用例.
我正在重构cocos2d-x的渲染层,新引擎将在iOS. 在原始版本中,当应用程序在后台停留很长时间后进入前台时,cocos2dx 会重新创建所有缓冲区和纹理。
我是 Metal 新手,我的问题是:是否有必要将 MTLBuffer、MTLTexture 和其他 Metal 资源重新创建为 GLES?