2015-10-16 79 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