2012-08-27 30 views
0

我有一個包含頂點信息的緩衝區,我用這個緩衝區爲glDrawArrays。緩衝區中的三角形作爲精靈在屏幕周圍分佈。我想以某種方式忽略繪製一些這些項目,而不必更新整個緩衝區。忽略緩衝區中頂點的列表

是否有某種方式可以修改頂點,以便在遇到它們時不會繪製任何東西?我不想完全刪除它,因爲這涉及到再次更新整個緩衝區。

我只針對一些只支持OpenGL ES 2.0的設備。

+0

@genpfault,http://meta.stackexchange.com/questions/145077/decide-between-generic-and-version-specific-tag-opengl-and-opengl-es –

回答

1

glDrawArrays具有offsetcount參數。您可以使用這些參數僅繪製緩衝區中可見的元素。這導致多個glDrawArray調用單個緩衝區。

另一種替代方法是使用片段着色器中的discard命令跳過着色器中的三角形。在這種情況下,您必須提供關於哪些三角形需要呈現給着色器的信息(例如,通過制服)

+0

不應繪製的項目會有點散亂,所以我可能需要很多平局。我導致相信一個電話會一直更有效率(儘管我可以嘗試一下)。我已經嘗試過放棄,並且相當昂貴(與繪製透明像素相比,巨大的幀速率)。 –

+0

你是對的,一次通話比多次通話更有效。但我不認爲有另一種方法來做到這一點,如果你不想每次更新緩衝區(或使用像上次GetLastError提到的索引緩衝區)。也許你可以排列三角形以減少散射。 – micha

2

您可以使用glDrawElements並提供索引緩衝區。

+0

我每次都必須重新加載索引列表的緩衝區。當然這比頂點數據小,但仍然很大(因爲每個頂點需要6個頂點)。 –

+0

索引將消耗每個四字節12個字節。否則,這取決於每個頂點有多少個屬性。 – GetLastError