在我的代码中,我有以下内容:
struct alignas(16) sphere
{
glm::vec4 center;
glm::vec4 color;
float radius;
};
sphere* m_sphere_ptr;
m_sphere_ptr = static_cast<sphere*>(glMapNamedBufferRange(m_sphere_buffer, 0, m_spheres.size() * sizeof(sphere), GL_MAP_WRITE_BIT));
auto sphere_x_offset { 5.0f };
for (int index{ 0 }; index < m_spheres.size(); ++index)
{
float sphere_x { static_cast<float>(index) / m_spheres.size()};
m_sphere_ptr[index].center = glm::vec4{ sphere_x + sphere_x_offset, -1, -5, 0 };
m_sphere_ptr[index].color = m_spheres[index].color;
m_sphere_ptr[index].radius = m_spheres[index].radius;
}
glUnmapNamedBuffer(m_sphere_buffer);
我想将sphere* m_sphere_ptr
更改为智能指针。但是,如果我创建它:std::unique_ptr<sphere> m_sphere_ptr;
(并且不要更改我的任何其他代码)我收到编译错误,m_sphere_ptr
不是数组类型。
当它是一个唯一的指针时,是否有一种安全的方法可以索引和写入m_sphere_ptr
?
供参考glMapNamedBufferRange
返回void *
,这就是投票的原因。