2014-11-05 136 views
5

基本上就是這樣,爲什麼glBufferData需要一個指針而不是int?這個arg應該是緩衝區對象的大小,那爲什麼不用GLsizei呢?上glBufferData https://www.opengl.org/sdk/docs/man/html/glBufferData.xhtmlglBufferData第二個參數是GLsizeiptr而不是GLsizei,爲什麼?

+3

這不是一個指針。它是一個與指針相同大小的整數類型。 – 2014-11-05 13:20:18

+0

@BenVoigt:這是一個答案,而不是評論:) – datenwolf 2014-11-05 13:35:17

+0

@datenwolf:不,我沒有解釋爲什麼這個大小的整數比那個更受歡迎。 – 2014-11-05 13:38:43

回答

10

當頂點緩衝器對象是introduced via the OpenGL extension mechanism,新型GLsizeiptrARB創建和下面的理由

OpenGL的文檔被提供:

什麼類型應<偏移>和<大小>參數使用?

已解決:我們定義了可在64位 系統上運行良好的新類型,類似於C的「intptr_t」。當預計 值可能超過20億時,應使用新類型「GLintptrARB」 來代替GLint。 只要預計 可能超過20億,應使用新型「GLsizeiptrARB」 來代替GLsizei。這兩種類型被定義爲 有符號整數足以包含任何指針值。作爲 的結果,它們自然會在具有64位甚至更大指針的系統 上擴展到更大數量的位。

在此擴展中引入的偏移量的類型爲GLintptrARB, 與其他GL參數一致,但必須爲非負數,但是算術性(不是uint),並且不是大小;例如,對於 示例,TexSubImage * D的xoffset參數的類型爲GLint。 緩衝區大小鍵入GLsizeiptrARB。

考慮使這些類型無符號的想法,但是最終被拒絕的原因是支持緩衝區大於2 GB在32位系統上不被認爲是重要的。

當此擴展被接受爲核心的OpenGL,該類型的擴展兼容型GLsizeiptrARB有一個規範的名稱GLsizeiptr您在函數簽名今天所看到的。

相關問題