2014-01-16 109 views
0

新手問題...相關與OpenGLES 2.0 + Android的opengles紋理單元行爲

1)上傳的紋理和跨drawarrays電話各州保留嗎? 當我們使用glTexImage2D爲一個活動的Texture5(比如說)上傳一個紋理時,即使另一個GL上下文使用了Texture5並上傳了另一個紋理,它仍然會在那裏?如果是這樣,它將會爲我在兩個視頻幀之間的操作節省相當多的折磨。 2)如果我將textureobjectA綁定到活動的Texture5並且上傳紋理,如果我將textureobjectB綁定到活動的Texture5並將一些其他數據上傳到它,它會被覆蓋掉嗎?

3)是否激活Texture5相當於激活硬件單元的紋理,或者它只是一個狀態激活?我問這是因爲,如果另一個上下文激活同一個單元,那麼可能會有問題,這使我認爲這只是一個狀態激活。 如果是這樣,那麼在GPU中它們完成的所有上下文和紋理上傳都有多少內存可用?

欣賞

回答

0

您使用術語active Texture的是關於任何迴應。您不要將紋理上傳到紋理單元,而是將紋理對象綁定到它們。您可以將紋理圖像數據上傳到紋理對象。

現在,如果您問在一個上下文中綁定到紋理圖像單元5的紋理是否會影響另一個紋理,答案絕對不是。即使在上下文資源共享的情況下,每個上下文都有自己的離散紋理圖像單元集(因爲每個上下文都有自己的狀態機)。

「激活」紋理單元僅僅是OpenGL的可疑設計的結果,因爲您必須使用選擇器函數來指示下一個命令適用於哪個對象。例如,它除了告訴glTexImage2D (...)什麼都不做,例如它適用於當前綁定到有效紋理圖像單元的2D紋理。

+0

感謝您的澄清。我們可以推斷紋理對象和紋理數據未與GPU中的最大紋理採樣器或紋理硬件單元鏈接,並且它們僅反映了每個程序可用的最大紋理單位(TEXTURE0-31或63)。簡而言之,我可能只能在程序中最多使用64個紋理採樣器(或者查詢中的較少數量)。 – user3201692

+0

OpenGL保證每着色器階段有16個紋理單位。頂點着色器中只有16個紋理查找,片段16個,幾何16個。這使GL3中有48個紋理單元,並且由於GL4增加了2個新的階段(曲面細分控制/評估),所以它被提升到了80.對於所有的意圖和目的,GL4中可以綁定80種不同的紋理,但是你只能使用其中16個子集在單個着色器階段。 –

+0

對不起,剛纔意識到這是關於OpenGL ES的討論。忽略我所說的一些事情;)GL ES只需要8個紋理單元,不具有幾何或鑲嵌着色器,並且從頂點着色器進行採樣的功能是可選的。我建議你查看「GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS」和「GL_MAX_COMBINED_TEXTURE_UNITS」進行更徹底的討論。 –

相關問題