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

时间:2010-07-05 09:08:40

标签: c++ opengl vector

我想到用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);

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

我的问题是:是否可以使向量只是'使用'映射的内存范围。 (最好在调整大小/保留时抛出异常) 或者是否有任何其他标准容器可以实现这一目标?

亲切的问候, 弗洛里安

1 个答案:

答案 0 :(得分:3)

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

特别!如果你已经有一对像迭代器一样的指针。