2016-05-16 292 views
2

我有一個質地GL_TEXTURE_2D,勢必GL_TEXTURE_EXTERNAL_OES目標綁定GLES紋理從GL_TEXTURE_EXTERNAL_OES

GLES20.glBindTexture(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, textures[0]); 
    GLES20.glTexParameteri(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_CLAMP_TO_EDGE); 
    GLES20.glTexParameteri(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_CLAMP_TO_EDGE); 
    GLES20.glTexParameteri(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_NEAREST); 
    GLES20.glTexParameteri(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_NEAREST); 

怎樣才能重新綁定到GL_TEXTURE_2D目標? GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textures[0]);提供了錯誤

回答

3

你不能。紋理目標是紋理對象的基本部分。如果你有一個external texture,你不能對待它像一個GL_TEXTURE_2D。完全一樣。

這意味着如果要綁定它,則必須將其綁定爲GL_TEXTURE_EXTERNAL_OES紋理。如果您想在採樣器中使用它,則該採樣器必須是samplerExternalOES而不是sampler2D(並且着色器必須啓用適當的擴展名)。等等。

+0

如何使用該紋理的內容?也許我可以將內容複製到另一個紋理,即GL_TEXTURE2D? – Fr0stDev1

+0

因此,沒有任何方法將紋理的內容綁定到2D上?也許我可以以某種方式複製它? – Fr0stDev1

+0

@ Fr0stDev1:「*我怎樣才能使用那個紋理的內容?*」你在我的帖子中看過「你不能」之後的任何內容嗎?除非特別需要* 2D紋理,否則可以像使用其他紋理目標一樣使用外部紋理。它甚至有一個伴隨紋理訪問函數的相關採樣器,以便您可以在着色器中讀取它。同樣,你可以將它附加到一個FBO。它仍然是一種質地;它只是不是目標'GL_TEXTURE_2D'的紋理。唯一的困難是你的着色器需要專門編寫才能讀取。 –