【发布时间】:2023-03-17 20:13:02
【问题描述】:
我正在使用 GL 进行一些 gpgpu 计算,并希望从帧缓冲区中读取我的结果。 我的帧缓冲区纹理在逻辑上是一维数组,但我将其设为二维以拥有更大的区域。现在我想从帧缓冲纹理中任意给定长度的任意像素中读取数据。
这意味着所有计算都已经在 GPU 端完成,我只需要将某些数据传递到可以在纹理边界上对齐的 cpu。
这可能吗?如果是,它是否比整个图像上的 glReadPixels 慢/快,然后剪掉我需要的东西?
编辑 我当然知道 OpenCL/CUDA,但它们并不是我们所希望的,因为我希望我的程序能够在(几乎)任何平台上开箱即用。
我也知道 glReadPixels 非常慢,一个原因可能是它提供了一些我不需要的功能(在 2D 中操作)。因此我要求一个更基本的函数,可能更快。
【问题讨论】:
-
"现在我想从帧缓冲纹理中任意给定长度的任意像素中读取数据。" - 这意味着什么?从着色器中读取,还是从您的应用程序中读取?假设支持的话,可以通过相对简单的数学或非常快速的缓冲区复制到缓冲区纹理(复制缓冲区 api)来完成。另一个只能用 glReadPixels 来完成,你不会绕过它(它可能在 CUDA 或 OpenCL 中被不同地调用,但它或多或少还是 glReadPixels)
标签: c++ opengl textures framebuffer glreadpixels