Невозможно сделать вид, что 2D-текстура на самом деле является данными вершины.Однако мне интересно, почему вы пытаетесь сделать это таким образом.
Самый эффективный способ сделать это - не хранить данные частиц в виде текстур, а в буферных объектах ,Вы можете напрямую использовать буферные объекты в качестве исходных данных для ваших вершинных массивов.
Учитывая, что «я сохраняю данные в качестве текстур, потому что расположение частиц является выходом фрагментного шейдера», я могу посоветовать еще кое-чтополезно: буфер текстур .Это одномерные текстуры, которые хранят свои данные в буферном объекте.Они по-прежнему могут использоваться в качестве цели рендеринга (хотя, очевидно, вам необходимо изменить способ растрирования данных, поскольку они являются одномерными целями рендеринга), но то, что они рендерит, хранится в буферном объекте.
Таким образом, вы можете выполнить рендеринг в буферную текстуру, а затем связать буфер как массив и источник из этого.
Если вы абсолютно должны визуализировать в 2D текстуру, вы можетеиспользуйте более медленный метод: чтение из текстуры в буферный объект. PBOs в основном предназначены для асинхронной передачи пикселей, поэтому я бы посоветовал дать GPU что-то еще, что нужно сделать между временем выполнения glGetTexImage
вбуфер и время, которое вы вызываете glDrawArrays
для рендеринга из него.В противном случае вы просто остановите графический процессор.