2011-04-14 80 views
3

有沒有一種簡單而快速的方法來在OpenGL中創建未初始化的紋理?OpenGL中未初始化的紋理

我目前的做法是這樣的:

std::vector<byte> nothing = std::vector<byte>([size of texture in bytes]); 
glTexImage(
    target, 
    level, 
    internalFormat, 
    size, 
    border, 
    format, 
    type, 
    nothing 
    ); 

,但是這涉及東西的上傳。

另一種方法是創建一個未初始化的緩衝區(通過調用沒有數據的glBufferData)並從該緩衝區創建紋理。但afaik這有兩倍的內存佔用(和我在低內存預算)。

有沒有一種很好的方法來創建一個紋理,以後寫入,而不使用帶寬或額外的內存?

回答

6

只需傳遞數據的空指針即可。這是它是如何在OpenGL自1版從OpenGL的1.2規範第3.8.1節,第118頁指定的最後一段:

如果TexImage1D, TexImage2D,或TexImage3D的數據參數是空 指針(在 C實現零值指針),一維,二維,或 三維紋理陣列 使用指定的目標, 水平,internalformat,寬度,高度,和 深度創建,但與未指定的圖像 的內容。在這種情況下,在客戶端存儲器中不訪問像素值 ,並且沒有執行像素處理 。但是,生成錯誤 ,但是,儘管數據指針有效,但與 完全一樣。

+0

woha ...誰來了,我只是不知道這一點? opengl.org上的文檔對此沒有提及,是嗎?您能否指出我提到的具體文字? – fho 2011-04-14 08:43:15

+0

啊謝謝。我正在搜索文檔和幾個論壇,但沒有看過規範 – fho 2011-04-14 09:17:37