OpenGL 着色器和常量

发布于 2024-10-22 01:59:56 字数 322 浏览 5 评论 0原文

我需要在我的 GLSL 几何着色器中访问一堆常量值。我尝试了这种方式:

const int lookup[HUGE_NUMBER] = int[HUGE_NUMBER](1,32,...)

这适用于某些硬件。在 ATI 卡上,我收到警告,指出几何着色器的大小可能会导致性能不佳(听起来很合理)。在其他卡 (NV) 上,由于内存不足,着色器将无法链接。定义常量数组似乎是一种不受支持的黑客行为。

那么——该怎么走呢?我读过 DirectX 管道中的“常量缓冲区”。有类似的吗?或者我必须使用纹理?

I need to access a bunch of constant values in my GLSL geometry shader. I tried it this way:

const int lookup[HUGE_NUMBER] = int[HUGE_NUMBER](1,32,...)

This works... for some hardware. On ATI cards I'm getting warnings that the size of my geometry shader may cause poor performance (sounds reasonable). On other cards (NV) the shader won't link because of insufficient memory. Defining constant arrays seems to be a unsupported hack.

So - what's the way to go? I've read of "constant buffers" in the DirectX pipeline. Is there anything similar? Or do I have to use textures?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

一指流沙 2024-10-29 01:59:56

您至少可以使用以下任何接口:

  1. 纹理
  2. 统一缓冲区对象
  3. 纹理缓冲区

You can go with at least any of the following interfaces:

  1. Texture
  2. Uniform buffer object
  3. Texture buffer
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文