代码之家  ›  专栏  ›  技术社区  ›  fho

使用std::vector管理映射内存(glMapBuffer)

  •  2
  • fho  · 技术社区  · 14 年前

    我突然想到用std::vector管理一系列映射内存(来自glMapBuffer)是个好主意。

    // map data to ptr
    T* dataPtr = (T*)glMapBuffer(this->target, access);
    
    [... debug code ...]
    
    // try to construct a std::vector from dataPtr
    T* dataPtrLast = dataPtr + size;
    mappedVector = new std::vector<T>(dataPtr, dataPtrLast);
    

    问题是内存范围不会被直接使用,而是被复制到向量中。

    我的问题是:有没有可能让向量仅仅“使用”映射的内存范围(理想情况下,在resize/reserve上抛出异常)

    谨致问候, 弗洛里安

    1 回复  |  直到 14 年前
        1
  •  3
  •   Puppy    14 年前

    不,有充分的理由。这个代码永远不会起作用。例如,您可以更改MapBuffer并在向量中中断大小/容量值。您可能会推入向量并导致访问冲突/分段错误。可能会导致调整大小,破坏缓冲区。而且,从根本上说,如果它已经在一个连续的数组中,那么它的好处是什么?我想你可以为固定长度的数组设置一个定制的容器。

    尤其是!如果已经有一对指针可以像迭代器一样工作。