2011-06-13 236 views
10

有沒有什麼辦法在opengl es 2.0中以不同於寬度的間距對紋理進行blit處理。通常我會通過使用PBO或通過glPixelStore調整GL_PACK_ROW_LENGTH來解決此問題。不過,在Android平臺上,GL_PIXEL_UNPACK_BUFFER似乎無法將緩衝區綁定到或GL_PACK_ROW_LENGTH。Android NDK OpenGL ES 2.0紋理間距

glTex(Sub)Image2D不支持這個。

任何提示?

+1

在這裏回答我自己的問題。 在某些情況下,這可以通過調整紋理座標來解決。假設我有一個512x512紋理以512 * bitdepth投射,但我想要使用的數據投射到256 * bitdepth。我繼續前進,並且glSubTexImage2D仍然是,但是將紋理座標調整爲0到(256/512)而不是0到1.換句話說,剝掉我沒有使用的紋理部分。 – Halsafar 2011-06-15 04:20:14

+1

您可以將您的解決方案作爲下面的答案發布嗎?謝謝。 – 2011-06-15 12:34:14

回答

0

因爲我回答了在這裏評論是更直接的答案:

// width and height is 256 and max is 512 
// texture coordinates 
float uMax = (width/max); 
float vMax = (height/max); 

_texCoords[0] = 0.0; _texCoords[1] = vMax; 
_texCoords[2] = uMax; _texCoords[3] = vMax; 
_texCoords[4] = 0.0; _texCoords[5] = 0.0; 
_texCoords[6] = uMax; _texCoords[7] = 0.0; 

現在使用這些texcoords來呈現,你可以在512×512緩衝堅持256x256的質感。您想要使用的寬度和高度可以是等於或小於您的最大尺寸的任何尺寸。

2

報價@Halsafar

在某些情況下,這可以通過來解決調整紋理座標


可以說我有一個512 X 512質地金字512 * bitdepth

,但我想使用的數據投以256 * bitdepth

我繼續前進,glSubTexImage2D但仍調整紋理COORDS是0到(256/512

,而不是01

換句話說剝離我不使用的紋理部分

+0

感謝您發佈此信息。我很抱歉讓它死亡。 我編輯了我的問題來澄清。 – Halsafar 2012-01-17 07:42:32

1

它可能聽起來有點矯枉過正(或者甚至不符合你的期望),但也許你可以簡單地利用光柵化器和幀緩衝區對象: 創建一個FBO紋理作爲顏色緩衝區和。通過一個簡單的頂點+片段着色器,在它中畫出一些紋理四邊形(S):你將使用一個簡單的Ortho。在頂點着色器中使用投影矩陣,並在片段着色器中使用點採樣紋理採樣。