2017-03-19 47 views
0

我有一個紋理,紋理環繞需要根據視圖進行更改。修改無結/駐留紋理的參數

我使用無壓紋理,因此我使它成爲常駐。

我明白我不能叫glTexParameter/glTextureParameter如果手柄居民,但這並不工作之一:

makeNonResident() 
glTextureParameter(....) -> invalid_operation 
makeResident() 

我缺少什麼?奇怪的是,我甚至沒有渲染,這只是在創建紋理並使其駐留之後。

回答

1

一旦您調用glGetTextureHandleARB從紋理中檢索句柄,該紋理將變爲不可變。不是immutable storage,而是完全不可變的。

您不能更改其參數的任何。以後再。沒有撤消。

原因是該句柄在內部存儲所有紋理參數。因此,更改這些參數不會影響句柄的副本,並允許這些更改影響紋理引用的每個句柄都會對性能和同步造成不必要的負擔。

什麼你真的是使用glGetTextureSamplerHandleARB從紋理/ sampler對獲得手柄。所以你可以用你想要的任何採樣參數創建一個採樣器,然後爲它和原始紋理獲取一個新的句柄。採樣器的參數將會覆蓋來自紋理的參數,並且您會從中獲取一個新的句柄,用於對紋理和採樣器的參數進行編碼。

現在,你不想在處理這些事情之後繼續創建句柄。因此,您應該計劃出您需要的紋理/採樣器對,並預先創建它們。

+0

謝謝。這樣可行。我之前只准備了2個不同的採樣器,我使用其中一個或另一個與glGetTextureSamplerHandleARB – psquare