首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Shader storage buffer object slow -替代?

Shader storage buffer object slow -替代?
EN

Stack Overflow用户
提问于 2019-05-22 09:36:16
回答 1查看 1.1K关注 0票数 2

我正在尝试使vec3数组可用于片段着色器。在目标应用程序中,可能有数百个元素。

我测试了以着色器存储缓冲区对象的形式传输数据,该对象声明为

代码语言:javascript
复制
layout(binding = 0) buffer voxels { vec3 xyz[]; }

并使用glBufferData设置,但我发现我的片段着色器变得非常慢,即使只有33个元素。

此外,当我将相同的数据转换为const vec3[]的GLSL代码并将其包含在着色器代码中时,着色器会变得明显更快。

有没有更好的方法--比SSBO更快,比创建着色器代码更优雅?

从上面可以明显看出,该数组仅从着色器中读取。它在着色器内以及不同片段的着色器调用上都是恒定的,因此有效地统一,并且在程序的运行时中仅设置一次或几次。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-22 12:35:34

考虑到您使用的是vec3数据类型,我建议在SSBO上使用std430布局说明符,否则您将被迫填充数据,这不会很好。通常,如果缓冲区是固定大小的,则首选使用glBufferSubData而不是glBufferData (后者可能会在GPU上重新分配内存)。

作为另一种选择,如果您能够针对GL 4.4+,考虑使用glBufferStorage (或者更好,如果GL4.5可用,则使用glCreateuffers和glNamedBufferStorage)。这让您可以向GL驱动程序传递一些关于缓冲区的使用方式的提示。我会尝试一些选项(例如映射、子数据和每次重新创建)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56248221

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档