Вы пытаетесь использовать структуру данных, которая не хранит свои элементы непрерывно в API, который требует непрерывного хранения. Ну, один из них должен дать, и это не будет OpenGL. GL не собирается анализировать структуру данных concurrent_vector
(если вам не нравится производительность).
Таким образом, вы не должны использовать непоследовательные объекты.
Я могу только догадываться о том, что вы делаете (поскольку вы не предоставили пример кода для генератора), так что это ограничивает то, что я могу посоветовать. Если ваш parallel_for
повторяется фиксированное количество раз (под «фиксированным», я имею в виду значение, которое известно непосредственно перед выполнением parallel_for
. Оно не изменяется в зависимости от того, сколько раз вы повторяли), тогда вы можно просто использовать обычный vector
.
Просто задайте размер вектора с помощью vector::size
. Это будет инициализировать элементы по значению, что означает, что каждый элемент существует. Теперь вы можете выполнить цикл parallel_for
, но вместо использования push_back
или чего-либо еще, вы просто копируете элемент непосредственно в его местоположение в выводе. Я думаю, что parallel_for
может перебирать действительные векторные итераторы, но я не уверен. В любом случае, это не имеет значения; вы не получите никаких условий гонки, если не попытаетесь установить одинаковый элемент из разных потоков.