【发布时间】:2016-07-20 14:36:12
【问题描述】:
我已将 SCNProgram 附加到 SceneKit 的几何体,并且我正在尝试将制服传递给片段着色器。在我的简单代码 sn-p 中,我只是将输出颜色作为统一传递给片段着色器,后者将其作为输出值返回。
我已经测试了着色器并且它们可以工作,因为我可以成功地在顶点着色器中旋转一个对象,或者在片段着色器中以不同的颜色绘制一个对象,等等......但问题是当我通过制服时。这是我的片段着色器:
struct Uniforms
{
float4 color;
};
fragment float4 myFragment(MyVertexOutput in [[ stage_in ]],
constant Uniforms& uniforms [[buffer(2)]])
{
return uniforms.color;
}
这就是我尝试在我的 SceneKit+Swift 代码中传递制服的方式:
SCNTransaction.begin()
cube.geometry?.setValue(NSValue(SCNVector4:SCNVector4(0.0,1.0,0.0,1.0)), forKey: "uniforms.color")
SCNTransaction.commit()
但是我的对象(它是一个立方体)甚至没有被绘制(它是黑色的),我得到了这个错误:
2016-04-01 01:00:34.485 阴影立方体[30266:12687154] SceneKit:错误,缺少缓冲区 [-1/0]
编辑 我试图遵循@lock 的建议,但我仍然遇到同样的错误。这是完整的项目存储库:https://github.com/ramy89/Shaded-Cube.git
【问题讨论】:
-
嗨,Ramy,我可以通过电子邮件向您介绍一个潜在的项目吗?在 GitHub 页面上找不到您的电子邮件地址。谢谢!
标签: ios swift shader scenekit metal