将2D数组传递到GLES opengl着色器

时间:2015-10-16 06:42:33

标签: android arrays opengl-es

我有一个2D浮点数组(在这种情况下,它代表一个256色的调色板,带有R G B值)

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

我填充数组,现在想将它传递给GLES。如何在android中传递2D数组?我试试

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

但它抱怨期待一维数组(找到float [] []期望浮点数[])。

着色器期待vec3制服,即

uniform vec3 palette[256];

所以我需要保留2D数组,以便RGB组件是单独的浮点数。

将2D数组正确传递给GLES着色器的秘诀是什么,以便我可以使用

访问着色器中的RGB值
int red = palette[100].r;

1 个答案:

答案 0 :(得分:1)

简短的回答是:您无法将2D数组传递给着色器。

为了将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];

但我建议,如果可能的话,你可以直接在1D中定义数组。