2014-08-31 94 views

回答

3

:通常,您應該總是儘可能減少CPU與GPU之間傳輸的數據量,以最大限度地保持性能。

因此,應該避免使用glBufferSubData()更新整個頂點緩衝區,並儘可能使用glTranslate()和glLoadMatrix()(不推薦使用)或着色器等變換。

但是,既然您已經在使用VBOs,我會推薦使用着色器使用着色器統一變量和glUniformMatrix()進行轉換。

:分離頂點,法線和紋理座標或將它們組合在一個VBO中取決於您。在大多數情況下,我將它們合併在一起,因爲它只生成一個句柄,而我只需要一次glBufferData()調用。但是如果只有一個部分像紋理座標更新並且其他部分保持原樣,那麼分離會更好,因爲您也可以單獨更新它們。

更高級: 如果您使用的是緩衝隔行掃描,那麼顯然必須將它們組合起來。 有時使用緩衝隔行掃描可能會比沒有隔行掃描更快,因爲單個頂點所需的數據可以保持在一起,並且可以使用緩存。但是你必須嘗試一下對性能有什麼影響(如果有的話),因爲它很大程度上取決於你使用的硬件。

+0

謝謝。我將學習如何使用着色器,而不是使用已棄用的函數和'glBufferSubData',因爲無論如何我都需要它。另外分隔VBO可能是最好的想法,因爲有時只有頂點或紋理座標需要更新。 – user2513924 2014-08-31 16:29:59

+0

我會首先探討在着色器中是否可以這樣做,或者先在內存中準備好變體緩衝區:) – Grimmy 2014-09-01 13:35:52

相關問題