0
是否可以在不浪費舊內容的情況下向VBO添加更多數據?基本上有一種方法可以在保留舊內容的同時調整VBO的大小?OpenGL將更多數據添加到VBO
例如,可以說我交織一些顏色(CrCgCb)和位置(PxPy)數據在VBO使用兩個三角形,使得在VBO存儲器的抽象表示看起來像表示的正方形:
[P1x,P1y,C1r,C1g,C1b,P2x,P2y,C2r,C2g,C2b,P3x,P3y,C3r,C3g,C3b,P4x,P4y,C4r,C4g,C4b,P5x,P5y,C5r,C5g,C5b,P6x,P6y,C6r,C6g,C6b]
現在一些事件蒸騰作用和突然的另一個方出生,我希望把它放在同一個VBO使得數據現在看起來像:
[P1x,P1y,C1r,C1g,C1b,P2x,P2y,C2r,C2g,C2b,P3x,P3y,C3r,C3g,C3b,P4x,P4y,C4r,C4g,C4b,P5x,P5y,C5r,C5g,C5b,P6x,P6y,C6r,C6g,C6b,P7x,P7y,C7r,C7g,C7b,P8x,P8y,C8r,C8g,C8b,P9x,P9y,C9r,C9g,C9b,P10x,P10y,C10r,C10g,C10b,P11x,P11y,C11r,C11g,C11b,P12x,P12y,C12r,C12g,C12b]
爲了將第一批數據的我這樣做:
GLuint vbo;
glGenBuffers(1, &vbo);
float verticies[6 * 2 + 6 * 3] = ...;
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_DYNAMIC_DRAW);
我們在那裏得到第二平方我如下通常會做一些事情:
glDeleteBuffers(1, &vbo);
glGenBuffers(1, &vbo);
float verticies[12 * 2 + 12 * 3] = ...;
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_DYNAMIC_DRAW);
你如何做到這一點,而不必調用glDeleteBuffers()
?
感謝您的意見,但我已經意識到這一功能。它不適合我的原因是因爲我有一個非常動態的系統,並且我有內存限制。我不能調整VBO的大小,然後運行一些碎片算法。我想我最好的選擇就是維護一個矢量並動態調整大小。然後在時間到來的時候跟蹤哪些對象要繪製。加載所有數據的VBO,然後到glDrawArays使用開始和計數變量。不想要,但如果這是我唯一的選擇,那麼我會去用它。 –
是的,這是您唯一的選擇。處理這樣的事情是使遊戲引擎有價值的原因。你必須管理你自己的記憶。通常最簡單的算法雖然夠用了。每個池1MB,像堆棧一樣增長並回收空池。 – starmole