新手問題...相關與OpenGLES 2.0 + Android的opengles紋理單元行爲
1)上傳的紋理和跨drawarrays電話各州保留嗎? 當我們使用glTexImage2D爲一個活動的Texture5(比如說)上傳一個紋理時,即使另一個GL上下文使用了Texture5並上傳了另一個紋理,它仍然會在那裏?如果是這樣,它將會爲我在兩個視頻幀之間的操作節省相當多的折磨。 2)如果我將textureobjectA綁定到活動的Texture5並且上傳紋理,如果我將textureobjectB綁定到活動的Texture5並將一些其他數據上傳到它,它會被覆蓋掉嗎?
3)是否激活Texture5相當於激活硬件單元的紋理,或者它只是一個狀態激活?我問這是因爲,如果另一個上下文激活同一個單元,那麼可能會有問題,這使我認爲這只是一個狀態激活。 如果是這樣,那麼在GPU中它們完成的所有上下文和紋理上傳都有多少內存可用?
欣賞
感謝您的澄清。我們可以推斷紋理對象和紋理數據未與GPU中的最大紋理採樣器或紋理硬件單元鏈接,並且它們僅反映了每個程序可用的最大紋理單位(TEXTURE0-31或63)。簡而言之,我可能只能在程序中最多使用64個紋理採樣器(或者查詢中的較少數量)。 – user3201692
OpenGL保證每着色器階段有16個紋理單位。頂點着色器中只有16個紋理查找,片段16個,幾何16個。這使GL3中有48個紋理單元,並且由於GL4增加了2個新的階段(曲面細分控制/評估),所以它被提升到了80.對於所有的意圖和目的,GL4中可以綁定80種不同的紋理,但是你只能使用其中16個子集在單個着色器階段。 –
對不起,剛纔意識到這是關於OpenGL ES的討論。忽略我所說的一些事情;)GL ES只需要8個紋理單元,不具有幾何或鑲嵌着色器,並且從頂點着色器進行採樣的功能是可選的。我建議你查看「GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS」和「GL_MAX_COMBINED_TEXTURE_UNITS」進行更徹底的討論。 –