我正在用OpenGL实现一个简单的光线跟踪器。我有一个包含所有三角形的着色器存储缓冲区,因此可以在计算着色器中测试它们的交集。它可以在特定缓冲区大小下正常工作。但是,如果我超过一定数量,它将停止工作,并显示以下消息:OpenGL:缓冲区使用警告:丢弃仅视频内存缓冲区对象。下次使用该缓冲区对象时,将重新分配数据存储。


该程序不会崩溃。

GL_MAX_SHADER_STORAGE_BLOCK_SIZE为2147483647,因此为2GB。当缓冲区不再工作时,缓冲区的大小只有几MB,大约6至7 MB。

我可以忽略一些东西吗?还有其他我不知道的限制吗?

编辑:

我的规格:Linux Mint 17.2,带有6GB VRAM的GTX 980Ti

评论

这只是警告,表明该vram过量使用,可能导致更多的内存传输。

@ratchetfreak:那只是副作用吗?我仍然不明白为什么程序会停止运行。

您可以共享OS + GPU详细信息吗?

@DanielMGessel:是的,我正在使用Linux Mint 17.2,并且我的GPU是具有6GB VRAM的GTX 980Ti。

@Andreas:不,它们不限于16MB。 16MB是保证的最小大小。通常,它们仅限于VRAM。如果您看我的问题,我已经使用GL_MAX_SHADER_STORAGE_BLOCK_SIZE检查了大小,它的大小为2GB(这实际上不是我的VRAM大小,但仍然足够大)。