2016-08-08 26 views
7

問題: 爲什麼相同數量的像素如果存儲在方形紋理中比在長方形紋理中佔用更少的視頻內存?OpenGL:爲什麼方形紋理需要更少的內存

示例: 我使用glTexImage2D命令創建360 4x16384大小的紋理。內部格式是GL_RGBA。 視頻內存:1328 MB。

如果我使用相同的數據創建360個256x256紋理,則內存使用量小於100MB。

使用集成的英特爾HD4000 GPU。

+0

我不是100%確定,但我認爲它與OpenGL如何使用glTexture調用處理像素數據有關。當圖像是正方形時,我認爲它與2的冪相關,當它將數據存儲在後臺緩衝區中以準備渲染時。 –

+0

您是否生成了mipmap?我認爲你不知道,但只是爲了確保;) – Mars

+0

@Mars:你是對的,忘了確切的說我不使用mipmap。 – Szak1

回答

6

這不是關於矩形的紋理。這是關於其中一個尺寸是極其

爲了以最佳方式從紋理中選擇紋理元素,硬件將採用所謂的混合。總體思路是它將重構紋理中的字節,以便在二維中彼此相鄰的像素也將成爲內存中的鄰居。但是這樣做需要紋理在兩個維度上都具有一定的最小尺寸。

現在,紋理過濾硬件可以忽略這個最小尺寸,只能從紋理實際尺寸內的像素中提取。但是額外的存儲空間仍然存在,佔用了空間而沒有任何用處。

鑑於您所看到的情況,英特爾調配硬件的基本最小尺寸爲32或64像素的可能性很大。

在OpenGL中,除了您在這裏完成的操作之外,您無法檢測到這種不協調。

+0

謝謝,剛剛接觸OpenGL,我不知道怎麼玩。 實際上,將每個紋理的4x16384尺寸增加到32x16384並不會增加內存使用量(首次增加發生在64x16384)。這表明 - 正如你所建議的那樣 - 英特爾芯片組的OpenGL實現爲一個方向分配了至少32個像素。 我已將您的答案標記爲解決方案。 – Szak1

+0

是否有像NSight這樣的工具可以檢測到? – Zouch