6

我正在尝试编写一个简单的 GPGPU 基准测试。要将数据加载到顶点缓冲区数组中,请在顶点着色器中进行一些计算,然后将数据读回。可能吗?我计划在 SGX GPU 上运行它。
有没有办法做到这一点?我不希望它经历转换、裁剪、平铺阶段和像素处理。这会产生额外的开销,并更改我的数据。

我可以读回数据并在 CPU 中检查它吗?反正在opengl es中有吗?

我也可以在像素着色器中进行计算,通过纹理发送数据并乘以一些常量并将其写入另一个帧缓冲区。但我该如何取回它?我真的不想把它呈现到屏幕上。有没有办法做到这一点?如果有的话,有人可以指点我一些教程吗?

4

4 回答 4

5

阅读顶点输出:寻找变换反馈——但你必须有 OpenGL ES 3.0 才能使用它。

对于 ES2.0,我建议使用片段着色器和渲染到纹理技术。这是教程的一些链接 在渲染到纹理后,您基本上必须读取纹理的像素。

在这里阅读数据的好教程

关于反馈的教程:http: //open.gl/feedback

于 2013-10-01T18:28:43.957 回答
3

您不能直接在 OpenGL ES 2.0 中从顶点着色器读取数据。因此,您可以将数据发送到像素/片段着色器,将其附加到帧缓冲区对象(FBO),然后使用 glReadPixels 将数据作为纹理存储在 CPU 中。此链接描述了概念和代码片段: here。希望这可能会有所帮助。

于 2014-10-09T06:12:51.987 回答
2
"...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?" 您可以使用帧缓冲区对象并使用 glRead API 读取相同的对象。您可以在此处阅读有关 FrameBuffer 对象的信息

参考:http ://en.wikipedia.org/wiki/Framebuffer_Object 参考:使用像素缓冲区对象 (PBO) 从帧缓冲区对象 (FBO) 读取像素值

如果您追求的是 GPGPU 计算,那么我建议您使用 OpenCL。新交所支持 OpenCL EP 1.1。

于 2014-04-07T10:04:54.267 回答
1

虽然在 OpenGL ES2 中无法从顶点着色器写入屏幕外,但您可以从像素着色器执行此操作。

首先,您需要渲染到屏幕外缓冲区,然后您可以将其作为纹理渲染到屏幕上的另一个对象,或者您可以使用 readPixels 以通常的方式读取它。https://gist.github.com/prabindh/9201855中给出了一个简单的步骤列表。

于 2014-04-07T13:23:08.130 回答