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

时间:2012-05-11 01:12:28

标签: java android opengl-es opengl-es-2.0

我是Android上的OpenGLES2编程的新手。我想知道如何在Shader程序中将Java类映射到属性/制服。 在我的着色器中说我定义了一个名为“light”的结构:

    struct light {
        vec4 position; 
        vec4 ambient_color;
        vec4 diffuse_color;
        vec4 specular_color;
        vec3 spot_direction;
        vec3 attenuation_factors;
        float spot_exponent;
        float spot_cutoff_angle;
        bool compute_distance_attenuation;
    };

uniform light light_state[8];

如果我编写一个反映相同结构的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;
}

是否可以将Light的实例映射到Shader程序?

1 个答案:

答案 0 :(得分:2)

不,我认为不可能,你必须单独上传这些值。常规OpenGL有一个统一缓冲区对象的概念,可能与你想要的类似,但我没有在GLES API中看到它们。