Android/OpenglES2:将Java对象映射到着色器结构?

Android/OpenglES2:将Java对象映射到着色器结构?,java,android,opengl-es,opengl-es-2.0,Java,Android,Opengl Es,Opengl Es 2.0,我是Android上OpenGLES2编程的新手。我想知道如何将Java类映射到着色器程序中的属性/一致性。 假设我在着色器中定义了名为“灯光”的结构: 如果我编写一个Java类,它反映了如下相同的结构: public class Light{ public float[] position=new float[4]; public float[] ambient=new float[4]; public float[] diffuse=new float[4]; public floa

我是Android上OpenGLES2编程的新手。我想知道如何将Java类映射到着色器程序中的属性/一致性。 假设我在着色器中定义了名为“灯光”的结构:

如果我编写一个Java类,它反映了如下相同的结构:

public class Light{
 public float[] position=new float[4];
 public float[] ambient=new float[4];
 public float[] diffuse=new float[4];
 public float[] specular=new float[4];
 public float[] spotDirection=new float[3];
 public float[] attenFactors=new float[3];
 public float spotExponent;
 public float spotCutoffAngle;
 public boolean computeDA;
}

可以将灯光实例映射到着色器程序中吗?

不,我认为不可能,您必须单独上载这些值。常规OpenGL有一个统一缓冲区对象的概念,它可能与您想要的类似,但我在GLES api中没有看到任何提及它们的内容。

即使是统一缓冲区也会与Java愚蠢的动态分配数组相冲突,当然是+1。
public class Light{
 public float[] position=new float[4];
 public float[] ambient=new float[4];
 public float[] diffuse=new float[4];
 public float[] specular=new float[4];
 public float[] spotDirection=new float[3];
 public float[] attenFactors=new float[3];
 public float spotExponent;
 public float spotCutoffAngle;
 public boolean computeDA;
}