Opengl 统一整数数组大于246时的GLSL性能问题

Opengl 统一整数数组大于246时的GLSL性能问题,opengl,graphics,glsl,shader,Opengl,Graphics,Glsl,Shader,我只是想在片段着色器中实现柏林噪波。因此,我需要将大小为512的统一int数组传递给片段着色器。现在,在我不太旧的mac上,这导致了糟糕的性能1FPS。我试图减小数组的大小,这会导致数组中存在246个元素的硬限制,这仍然会产生交互式帧率。所以我的问题是: 这一限制从何而来?OSX?显卡?OpenGL版本? 有办法解决这个问题吗?我尝试使用整数纹理,但我的操作系统不支持这些! 有没有人经历过类似的事情 它必须是硬件或着色器版本限制。你能用纹理来代替吗 它必须是硬件或着色器版本限制。你能用纹理来代替

我只是想在片段着色器中实现柏林噪波。因此,我需要将大小为512的统一int数组传递给片段着色器。现在,在我不太旧的mac上,这导致了糟糕的性能1FPS。我试图减小数组的大小,这会导致数组中存在246个元素的硬限制,这仍然会产生交互式帧率。所以我的问题是:

这一限制从何而来?OSX?显卡?OpenGL版本? 有办法解决这个问题吗?我尝试使用整数纹理,但我的操作系统不支持这些!
有没有人经历过类似的事情

它必须是硬件或着色器版本限制。你能用纹理来代替吗

它必须是硬件或着色器版本限制。你能用纹理来代替吗

因此,我需要将大小为512的统一int数组传递给片段着色器

您可以使用1D纹理。你们甚至不需要整数,浮点数同样适用于柏林噪声

因此,我需要将大小为512的统一int数组传递给片段着色器


您可以使用1D纹理。你甚至不需要整数,浮点数同样适用于柏林噪波。

和整数纹理可能不受支持。1D纹理的问题是我不能使用texelFetch,因为OSX不支持它。因此,我需要使用texture1D来获取值,这是一个混乱的过程。我需要关心值的插值和正确的索引规范化。@Nicholas:Perlin Noise工作,无论插值与否。柏林噪声的整个概念是使用一个倍频程的值作为下一个倍频程的偏移量。如果插值并将索引保持在[0;1]范围内,效果也一样好。这是一个在Shader Model 2 GPU上实现Perlin噪波的视频,我在2004年使用该汇编着色器语言写过——所有LUT都是float类型,并标准化为[0;1]范围。TL;DR:不需要texelFetch,它也可以与插值纹理1D一起工作。整数纹理可能不受支持。1D纹理的问题是我不能使用texelFetch,因为OSX不支持它。因此,我需要使用texture1D来获取值,这是一个混乱的过程。我需要关心值的插值和正确的索引规范化。@Nicholas:Perlin Noise工作,无论插值与否。柏林噪声的整个概念是使用一个倍频程的值作为下一个倍频程的偏移量。如果插值并将索引保持在[0;1]范围内,效果也一样好。这是一个在Shader Model 2 GPU上实现Perlin噪波的视频,我在2004年使用该汇编着色器语言写过——所有LUT都是float类型,并标准化为[0;1]范围。TL;DR:不需要texelFetch,它也可以与插值纹理一起工作。顺便说一句,你可能对阅读GPU gems中的perlin noise文章感兴趣,顺便说一句,你可能对阅读GPU gems中的perlin noise文章感兴趣,