2011-05-20 132 views
1

我正在製作一個遊戲引擎,並且Texture類中的一個功能應該是創建一個具有指定寬度,高度和像素格式的空白紋理。創建一個空白的opengl紋理

我知道如何創建紋理和所有這一切,我也知道我可以使用glTexImage2d格式化爲null作爲數據。然而,我不得不告訴openGL我的數據格式(即使它是空的),這意味着我必須編寫一個函數,將PIXEL_INTERNAL_FORMAT枚舉轉換爲PIXEL_FORMAT和PIXEL_TYPE。

我怎樣才能讓opengl只分配基於PIXEL_INTERNAL_FORMAT的內存?

回答

0

PIXEL_FORMATPIXEL_TYPE不應該匹配PIXEL_INTERNAL_FORMAT。他們應該描述你傳入的數據,所以OpenGL可以根據需要進行轉換。當沒有數據傳入時,將不會有任何轉換。

因此,當數據指針爲空(假設您沒有綁定VBO)時,您可以使用這兩個參數的任何合法值。

+0

這就是我的想法。但是,如果我使用DEPTH_COMPONENT作爲PIXEL_INTERNAL_FORMAT創建紋理,那麼如果我使用除DEPTH_COMPONENT以外的其他任何東西作爲PIXEL_FORMAT,則OpenGL會給我一個INVALID_OPERATION錯誤。 – Hannesh 2011-05-20 16:08:47

+0

@Hannesh:你說得對:「如果internalFormat是GL_DEPTH_COMPONENT,GL_DEPTH_COMPONENT16,GL_DEPTH_COMPONENT24或GL_DEPTH_COMPONENT32,並且格式不是GL_DEPTH_COMPONENT,則會生成GL_INVALID_OPERATION。」但是這些特殊情況只有極少數。 – 2011-06-04 16:59:40