我已经开始使用Metal api,并将其作为新的API包含在渲染器中。但是,创建和初始化后,我的MTLBuffer
中的数据出现了问题。
我有一些关于顶点缓冲区和流的api不可知类,我这样使用它:
// Fill vertex streams with data
auto& positionStream = vb.GetDataStream<0>().AddData(
// Quad 1
Vec4{ -0.5f, -0.5f, -0.5f, 1.0f },
Vec4{ x.xf, -0.5f, -0.5f, 1.0f },
Vec4{ 0.5f, -0.5f, 0.5f, 1.0f },
Vec4{ -0.5f, -0.5f, 0.5f, 1.0f },
// Quad 2
Vec4{ -0.5f, 0.5f, -0.5f, 1.0f },
Vec4{ 0.5f, 0.5f, -0.5f, 1.0f },
Vec4{ 0.5f, 0.5f, 0.5f, 1.0f },
Vec4{ -0.5f, 0.5f, 0.5f, 1.0f }
);
其中Vec4确实是更简单的结构:
struct Vec4
{
float x{ 0.0f };
float y{ 0.0f };
float z{ 0.0f };
float w{ 0.0f };
};
每个顶点缓冲区的数据流都由MTLBuffer支持。但是,当我使用数据创建并初始化此流时,在代码示例中标记为x
的{{1}}元素包含一些垃圾值。如果将此值设置为任何值,则始终是垃圾。我将其他一些流用于索引,颜色,texcoords,所有这些数据都是正确的。我通过调用来创建缓冲区
x.x
这是我捕获帧时看到的:
编辑:我还注意到这是在我第一次创建MTLBuffer时发生的,我尝试先为颜色数据创建MTLBuffer,然后为位置和颜色创建MTLBuffer,并且位置很好。
有什么想法会导致这种情况吗?
答案 0 :(得分:0)
最后,我设法找到了一个问题。我使用的是XCode-Beta版MacOS 10.15 Catalina Beta(19A501i)。我试图在非Beta版的XCode中构建应用程序,即使在gpu调试器中检查了这些缓冲区之后,一切似乎也是正确的。
在使用Xcode-beta(版本11.0 beta(11M336w))之前,这似乎是个问题。