索引和写入一个像它一样的唯一指针是一个普通的指针

时间:2018-05-06 09:53:29

标签: c++ smart-pointers

在我的代码中,我有以下内容:

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 *,这就是投票的原因。

0 个答案:

没有答案