Я начал играть с металлическим 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
, который я отметил в примере кода как x.x
, содержит некоторое значение мусора. Если я устанавливаю это значение на что-либо, это всегда мусор. Я использую некоторые другие потоки для индексов, цветов, текстовых координат и все эти данные верны. Я создаю буферы с вызовом
[device newBufferWithBytes:data length:length options:0]
Вот что я вижу, когда снимаю кадр:
Изменить: я также заметил, что это происходит при моем первом создании MTLBuffer, я пытался сначала создать MTLBuffer для данных о цвете, а затем для позиций и цветов были повреждены и позиции в порядке.
Есть идеи, что может вызвать это?