[英]My OpenGL Cubemap is using 6 copies of the same texture instead of 6 different textures
[英]Bind the same “texture memory” to textures with different dimensionalities
如何將相同的“紋理記憶”綁定到具有不同尺寸的紋理。
例如,我需要訪問使用2D圖像陣列sampler2DArray
在着色器,以及sampler3D
在另一個着色器,而無需加載並存儲在圖形卡存儲器中的數據的兩倍。
我想做這樣的事情:
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D_ARRAY, tex);
glTexImage3D(GL_TEXTURE_2D_ARRAY, ...); // allocate & store pixel data
接着:
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_3D, tex); // "reuse" the texture storage with a
// different dimensionality in another
// texture unit
但是最后一行顯然是無效的。
有什么方法可以做這樣的事情嗎?
OpenGL(4.3+)有一個稱為視圖紋理的概念。 如果您創建具有不可變存儲的紋理,則可以創建引用該不可變存儲的紋理。 或不可變存儲的一部分。 您可以更改圖像格式(如果兼容)甚至紋理目標。 您可以提取2D數組的單個元素,並將其用作常規2D紋理。 或者,您可以將2D紋理轉換為1層的2D陣列。
但是,您無法將2D陣列紋理的存儲視為3D紋理。 或相反亦然。 他們的Mipmap的工作方式不同。 在3D紋理中,mipmap在X,Y和Z中減小。在2D陣列紋理中,它們僅在X和Y中變小。
甚至Vulkan也不允許您從分配為VkImage
2D圖像的VkImageView
創建VkImageView
,它是3D圖像視圖(反之亦然)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.