我不明白這個命令結構如何工作。所有這些似乎都是有意義的(在文檔中,我還沒有實際調用函數),除了firstIndex。實際上,它看起來好像文檔中存在拼寫錯誤。在給glMultiDrawElementsIndirect的命令結構中,firstIndex參數意味着什麼?
這裏我似乎在每一個地方,看到我查找相關文件全文:
通過間接尋址的參數被包裝成一個結構,它採用的形式(C):
typedef struct { uint count; uint instanceCount; uint firstIndex; uint baseVertex; uint baseInstance; } DrawElementsIndirectCommand;
到glMultiDrawElementsIndirect單個呼叫是等價的,假設沒有錯誤產生:
GLsizei n; for (n = 0; n < drawcount; n++) { const DrawElementsIndirectCommand *cmd; if (stride != 0) { cmd = (const DrawElementsIndirectCommand *)((uintptr)indirect + n * stride); } else { cmd = (const DrawElementsIndirectCommand *)indirect + n; } glDrawElementsInstancedBaseVertexBaseInstance(mode, cmd->count, type, cmd->firstIndex + size-of-type, cmd->instanceCount, cmd->baseVertex, cmd->baseInstance); }
但是這些頁面並沒有說「size-of-type」是什麼意思,或者它爲什麼被添加到firstIndex中,而不是被乘以它。看起來,glDrawElementsInstancedBaseVertexBaseInstance在那裏需要一個字節偏移量,所以我認爲firstIndex是指向GL_ELEMENT_ARRAY_BUFFER頂點索引數組的索引 - 因此,索引索引 - 和類型大小一個頂點索引的大小(以字節爲單位),你需要在這裏將索引轉換爲索引數組,將其轉換爲該數組的字節偏移量。
但是......該轉換將表示爲乘法,他們說+不*。 :(
對嗎?是firstIndex是頂點索引數組中的一個入口的索引,而size-of-type是頂點索引的大小(以字節爲單位),而+ a是否爲錯誤?如果不是,我是什麼失蹤?
我正在查看規範,沒有看到firstIndex和size-of-type實際上是什麼意思,但是......我想我會打電話看看會發生什麼。 – mjwach 2015-03-25 18:11:41
@mjwach:如果你有'GL_UNSIGNED_INT'索引,** 2 **如果你有'GL_UNSIGNED_SHORT'索引和** 1 **如果你有'GL_UNSIGNEDB_BYTE'索引提示:不這樣做,硬件不喜歡8位頂點索引)。 – 2015-03-26 01:25:22
@mjwach我補充說明了什麼是價值。這聽起來像你已經找到了那部分。 – 2015-03-26 04:50:22