2011-07-05 33 views

回答

2

隨機存取是GLSL的一項基本功能。例如。

vec2 someLocation = ... whatever you like ...; 
vec4 sampledColour = texture2D(sampler, someLocation); 

根據您的硬件,它可能花費更多閱讀紋理如果你在像素着色器直接計算出樣品的位置,而不是出在頂點着色器,並允許他們自動爲變進行插值,但這只是一個不可改變的硬件成本,與你正在做的事情的可預測性降低有關。

+0

是的,隨機訪問是很有可能的,我只是感到困惑的是,從我讀到的隨機訪問GPU的問題遠遠多於CPU的問題,所以我想知道是否有一種通用的方式來最小化處罰的隨機訪問。 –

+1

我不確定你的平臺是什麼,但我對這一趨勢的理解是,這比過去重要得多(手機類型設備處於曲線的較早點),因爲它與GPU可以明顯並且容易地並行處理多個碎片相比,它與單獨爲每個碎片執行的處理相關。然而,對GPGPU的推動使得每個人都進一步推廣,以獲得更多的CPU,就像猜測智能訪問模式的策略一樣。所以你可能會遇到性能問題,但不應該擔心太多。 – Tommy

1

您可以隨時將其他紋理傳遞給包含隨機值和來自其中的樣本的着色器。這將爲每個紋理座標賦予相同的隨機值,但如果您不希望這樣做,則始終可以通過您更新每個幀的統一種子來乘坐座標。

+0

對不起。我不是那個意思。我對生成隨機值不感興趣。我的意思是我最有可能以隨機的方式訪問紋理數據,而不是以序列化的方式訪問紋理數據。 –