Невозможно притвориться, что 2D-текстура фактически является вершинными данными. Тем не менее, мне интересно, почему вы пытаетесь это сделать.
Самый эффективный способ сделать это - не хранить данные частиц в виде текстур, а в buffer objects. Вы можете напрямую использовать объекты буфера в качестве исходных данных для массивов вершин.
Учитывая «Я хранение данных в виде текстур, поскольку расположение частиц является выходом фрагмента шейдера,» я могу посоветовать что-то более полезное: buffer textures. Это 1D-текстуры, которые хранят свои данные в объекте-буфере. Они все равно могут использоваться как цель рендеринга (хотя, очевидно, вам нужно будет изменить, как вы растеризуете данные, поскольку они являются объектами рендеринга 1D), но то, что они визуализируют, хранится в объекте-буфере.
Таким образом, вы можете сделать рендер для текстуры буфера, а затем связать буфер как массив и источник от этого.
Если вы абсолютно должны визуализации в 2D текстуры, вы можете использовать более медленный метод: read from the texture into a buffer object. ОПО в первую очередь для асинхронной передачи пикселей, так что я хотел бы предложить давая GPU-то еще делать между временем выполнить glGetTexImage
в буфер и время, которое вы вызываете glDrawArrays
для визуализации. В противном случае вы просто остановите GPU.
Какие инструменты Вы используете, чтобы это сделать? Попытайтесь пометить свой вопрос названием этого инструмента и, возможно, некоторыми другими, тесно связанными и соответствующими тегами. – Irfy