是,紋理可以在帆船裝載。
wa行ay要做到這一點,首先調用glTexImage2D()
全尺寸,最後一個參數的空指針,否則你會傳遞一個指向數據的指針。這指定紋理的大小和格式,但不填充數據。
之後,可以使用glTexSubImage2D()
來填充具有數據塊的紋理。
例如,填補了4096×4096 RGBA紋理1024×1024大小的塊:
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 4096, 4096, 0,
GL_RGBA, GL_UNSIGNED_BYTE, 0);
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 1024, 1024,
GL_RGBA, GL_UNSIGNED_BYTE, data00);
glTexSubImage2D(GL_TEXTURE_2D, 0, 1024, 0, 1024, 1024,
GL_RGBA, GL_UNSIGNED_BYTE, data01);
glTexSubImage2D(GL_TEXTURE_2D, 0, 2048, 0, 1024, 1024,
GL_RGBA, GL_UNSIGNED_BYTE, data02);
glTexSubImage2D(GL_TEXTURE_2D, 0, 3072, 0, 1024, 1024,
GL_RGBA, GL_UNSIGNED_BYTE, data03);
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 1024, 1024, 1024,
GL_RGBA, GL_UNSIGNED_BYTE, data10);
glTexSubImage2D(GL_TEXTURE_2D, 0, 1024, 1024, 1024, 1024,
GL_RGBA, GL_UNSIGNED_BYTE, data11);
glTexSubImage2D(GL_TEXTURE_2D, 0, 2048, 1024, 1024, 1024,
GL_RGBA, GL_UNSIGNED_BYTE, data12);
...
如果你真的需要這樣的紋理大,你可能要考慮使用壓縮紋理。不幸的是,支持特定的壓縮紋理格式的設備依賴於ES 2.0。但考慮到它可以減少內存使用量,並可能提高性能/功耗,它可能仍值得研究。查看glCompressedTexImage2D()
的起點。
當然,您還要確保您的資產不會高於需要的分辨率。
自2009年以來,應用程序並未擁有16MB託管堆限制。儘管如此,64MB是移動設備上單個紋理的相當大量的數據,使用壓縮紋理格式會更好。 – fadden 2014-09-05 15:34:19