2013-10-01 4 views
5

Я пытаюсь написать простой тест GPGPU. Чтобы загрузить данные в массив буфера вершин, выполните некоторые вычисления в вершинном шейдере и прочитайте данные обратно. Является ли это возможным? Я планирую запустить это на графических процессорах SGX.
Есть ли способ сделать это? Я не хочу, чтобы он проходил трансформацию, обрезку, фазы черепицы и обработку пикселей. что накладывает дополнительные накладные расходы и меняет мои данные.можно ли читать данные из вершинного шейдера?

Могу ли я прочитать данные и изучить их в CPU? все равно в opengl?

Я могу делать вычисления в пиксельном шейдере, а также отправлять данные через текстуру и умножать некоторые константы и записывать их в другой буфер кадров. но как мне его вернуть? Я действительно не хочу представить его на экране. есть все равно, чтобы это сделать? может ли кто-нибудь указать мне на некоторые учебные пособия, если они доступны?

+0

Я не думаю, что вы можете сделать это с помощью es 2 –

+0

связанных http://stackoverflow.com/questions/14086926/get-results-of-gpu-calculations-back-to-the-cpu-program-in -opengl –

ответ

4

Чтение Выход вершин: Ищите Transform Feedback - Но для этого вам понадобится OpenGL ES 3.0.

Для ES2.0 я предлагаю использовать методы фрагментарного шейдера и Render To Texture. Here is some link with tutorial После рендеринга текстуры вам в основном нужно читать пиксели текстуры.

Nice tutorial on reading the data here

учебник о обратной связи: http://open.gl/feedback

+0

Я вижу, что обратная связь преобразования может быть захвачена и передана несколько раз в вершинный шейдер, но может ли она быть прочитана в CPU и расшифрована? –

+0

Вы выводите данные в буферы, поэтому вы можете просто использовать буфер карты, но я не уверен в этом, если честно. – fen

+0

руководство по обратной связи: http://open.gl/feedback – fen

1
"...computation in the vertex shader, and read the data back. Is it possible? I am planning to run this on SGX GPUs." 

В SGX поддерживает OpenGLES 2.0 не 3.0, PowerVR SGX не поддерживает чтение вывода вершинного шейдера (OpenGL ES 2.0 спецификация не включает в себя такой. функциональность).

"can I read back the data and examine it in the CPU? is there anyway in opengl es?" Вы можете использовать объекты framebuffer и читать то же самое с помощью API glRead. Вы можете прочитать о FrameBuffer объектов здесь

Ref: http://en.wikipedia.org/wiki/Framebuffer_Object Ref: Reading the pixels values from the Frame Buffer Object (FBO) using Pixel Buffer Object (PBO)

Если расчет GPGPU вы после этого, то я рекомендую вам нужно пойти на OpenCL. SGX поддерживает OpenCL EP 1.1.

+0

Это зависит от поставщика SOC для поддержки поддержки OpenCL. Это не все поставщики. – prabindh

1

Хотя запись в вершинном шейдере на экран не возможна в OpenGL ES2, вы можете сделать это из пиксельного шейдера.

Сначала нужно визуализировать буфер вне экрана, а затем вы можете визуализировать его как текстуру для другого объекта на экране, или вы можете прочитать его с помощью readPixels обычным способом. Простой список шагов приведен в https://gist.github.com/prabindh/9201855.

2

Вы не можете читать данные из вершинного шейдера непосредственно в OpenGL ES 2.0. Итак, вы можете привязать свои данные к пиксельным/фрагментарным шейдерам, присоединить их к объекту буфера кадров (FBO), а затем использовать glReadPixels для получения данных как текстуры в вашем CPU. Эта ссылка описывает концепцию и код snnipet: here. Надеюсь, это поможет.