Управление отображенной памятью (glMapBuffer) с помощью std :: vector - PullRequest
2 голосов
/ 05 июля 2010

мне пришло в голову, что было бы неплохо управлять диапазоном отображаемой памяти (из glMapBuffer) с помощью std :: vector.

// 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 Ответ

3 голосов
/ 05 июля 2010

Нет, и не зря. Этот код никогда не будет работать. Например, вы можете изменить MapBuffer и разбить значения размера / емкости внутри вектора. Вы можете нажать на вектор и вызвать нарушение прав доступа / ошибку сегментации. Вы можете вызвать изменение размера, уничтожив буфер. И, в принципе, если это уже в непрерывном массиве, в чем выгода? Полагаю, вы могли бы свернуть специальный контейнер для массивов фиксированной длины.

Особенно! если у вас уже есть пара указателей, действующих как итераторы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...