0

我是 Android 上 OpenGLES2 编程的新手。我想知道如何将 Java 类映射到 Shader 程序中的属性/统一。假设在我的着色器中我定义了名为“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 程序中?

4

1 回答 1

2

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

于 2012-05-11T04:58:57.917 回答