簡體   English   中英

將相同的“紋理記憶”綁定到具有不同尺寸的紋理

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM