我想到用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);
问题是内存范围不会直接使用,而是会被复制到矢量中。
我的问题是:是否可以使向量只是'使用'映射的内存范围。 (最好在调整大小/保留时抛出异常) 或者是否有任何其他标准容器可以实现这一目标?
亲切的问候, 弗洛里安
答案 0 :(得分:3)
不,并且有充分的理由。这段代码永远不会有效。例如,您可以更改MapBuffer并中断向量内的大小/容量值。您可能会进入向量并导致访问冲突/分段错误。您可能会导致调整大小,破坏缓冲区。而且,从根本上说,如果它已经在一个连续的阵列中,那么有什么好处呢?我猜你可以为固定长度数组滚动一个自定义容器。
特别!如果你已经有一对像迭代器一样的指针。