2015-10-16 78 views
1

我有浮子的2D陣列(在這種情況下,它表示具有RGB值的256色調色板)傳遞2D陣列成GLES OpenGL着色

static float[][] glColorPaletteArray = new float[256][3]; 

我填充陣列,現在想將它傳遞給GLES 。如何在android中傳遞2D數組?我嘗試

GLES20.glUniform3fv(paletteLoc,256,glColorPaletteArray,0); 

但它抱怨期待1D數組(預計float [] []期待浮動[])。

着色器期待一個VEC3均勻,即

uniform vec3 palette[256]; 

所以我需要保持2D陣列所以RGB分量是分離的浮動。

的祕訣是什麼,這是讓二維數組正確地傳遞給GLES着色器,所以我可以再利用

int red = palette[100].r; 

回答

1

簡短的回答是訪問着色器中的RGB值:您不能傳遞一個二維數組着色器。

爲了將2D數組傳遞給OpenGL,必須將數組變平。這是相對容易的,並且可以,例如,可以做如下:

static float[][] glColorPaletteArray = new float[256][3]; 
static float[] openglArray = new float[256*3]; 

for (int i = 0; i < 256; i++) 
    for (int j = 0; j < 3; j++) 
     openglArray[i * 3 + j] = glColorPalletArray[i][j]; 

但我會建議,如果可能的話,你定義第一手一維數組。

+0

好的,但一旦轉換爲1D,着色器(期待vec3條目)是否知道如何提取256種顏色中的每一種的RGB分量? – Some1Else

+0

是的。總是3個連續的花車將被用作一個vec3。 – BDL