MTLBuffer损坏的数据

时间:2019-07-11 12:51:46

标签: c++ metal

我已经开始使用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

这是我捕获帧时看到的:

enter image description here 编辑:我还注意到这是在我第一次创建MTLBuffer时发生的,我尝试先为颜色数据创建MTLBuffer,然后为位置和颜色创建MTLBuffer,并且位置很好。

有什么想法会导致这种情况吗?

1 个答案:

答案 0 :(得分:0)

最后,我设法找到了一个问题。我使用的是XCode-Beta版MacOS 10.15 Catalina Beta(19A501i)。我试图在非Beta版的XCode中构建应用程序,即使在gpu调试器中检查了这些缓冲区之后,一切似乎也是正确的。

在使用Xcode-beta(版本11.0 beta(11M336w))之前,这似乎是个问题。