3 回答

TA貢獻1831條經(jīng)驗 獲得超4個贊
這聽起來像是紋理緩沖區(qū)對象的一個很好的用例。這些與常規(guī)紋理沒有太大關(guān)系,基本上可以讓您以簡單的線性數(shù)組的形式在著色器中訪問緩沖區(qū)對象的內(nèi)存。它們類似于1D紋理,但不進行過濾,只能由整數(shù)索引訪問,這聽起來像您將其稱為值列表時需要執(zhí)行的操作。而且它們還支持比1D紋理更大的尺寸。要更新它,你可以再使用標準緩沖對象的方法(glBufferData,glMapBuffer,...)。
但另一方面,我認為它們需要使用GL3 / DX10硬件,甚至已經(jīng)成為OpenGL 3.1的核心。如果您的硬件/驅(qū)動程序不支持它,那么您的第二種解決方案將是選擇的方法,而是使用1D紋理而不是寬度x 1 2D紋理)。在這種情況下,您還可以使用非平面2D紋理和一些索引魔術(shù)來支持大于最大紋理大小的列表。
但是,我認為紋理緩沖區(qū)是您問題的完美選擇。為了獲得更準確的了解,您還可以查看相應(yīng)的擴展規(guī)范。
編輯:為了回應(yīng)Nicol關(guān)于統(tǒng)一緩沖區(qū)對象的評論,您還可以在此處查找兩者的一些比較。我仍然傾向于使用TBO,但是不能真正地說明原因,僅是因為我認為它在概念上更合適。但是,也許尼克爾可以提供答案,使人們對該事件有更多的了解。
添加回答
舉報