从着色器中随机访问1GB数据的最佳openGL工具?

从着色器中随机访问1GB数据的最佳openGL工具?,opengl,graphics,glsl,shader,gpu,Opengl,Graphics,Glsl,Shader,Gpu,我有一个巨大的数据结构,大约1gb。我需要能够从着色器中随机访问它 我可以将结构拆分为更小的容器,但是我必须绑定所有内容并执行多个draw调用,这会降低性能 我希望尽可能以最古老的opengl版本为目标,但我宁愿使用更高的版本,也不愿使用黑客或不合法的解决方案 缓冲区纹理太小。即使SSBO也太小了。有什么想法吗 我能想到的另一件事是PRT,但我没有这方面的经验,我不知道它是否适合我的需要。为什么缓冲区纹理“太小”?它们的大小与你可以为它们创建的缓冲区一样大,但我想你不能只创建1GB的缓冲区(即G

我有一个巨大的数据结构,大约1gb。我需要能够从着色器中随机访问它

我可以将结构拆分为更小的容器,但是我必须绑定所有内容并执行多个draw调用,这会降低性能

我希望尽可能以最古老的opengl版本为目标,但我宁愿使用更高的版本,也不愿使用黑客或不合法的解决方案

缓冲区纹理太小。即使SSBO也太小了。有什么想法吗


我能想到的另一件事是PRT,但我没有这方面的经验,我不知道它是否适合我的需要。

为什么缓冲区纹理“太小”?它们的大小与你可以为它们创建的缓冲区一样大,但我想你不能只创建1GB的缓冲区(即GPU上的碎片会导致这样的分配失败)?@peppe我有一台相当高端的机器,我可以用缓冲区纹理分配的最大值只有230兆,我使用opengl get命令进行了检查,我不知道你想对这个庞大的数据集做什么,但是如果你想做一些计算,甚至渲染图像,我建议你看看CUDA/OpenCL。您可以上载纹理,并根据需要使用纹理作为输出。据我所知,内存没有限制(只有物理内存)。由于着色只是一个数学问题,所以你可以使用cuda实现所有功能。你可以使用普通纹理(或者阵列纹理)而不是TBO。如果你选择真正现代的材质,会有稀疏纹理和无绑定纹理,这在这里可能也有一些用处。@BlazArt:问题是你会使用哪种纹理,1D纹理可能太有限了。在当前硬件上,纹理2D通常限制为16384x16384,有4个通道和1个字节/通道,正好为1GB,但您可能需要使用其他布局。阵列纹理在这里也会有所帮助,您只需要对数据进行一些三维组织,但这很容易映射到线性缓冲区,反之亦然。