2012-05-11 4 views
0

私はAndroidでOpenGLES2プログラミングの初心者です.ShaderプログラムのJavaクラスを属性/制服にマッピングする方法が不思議でした。 セイは私のシェーダで、私は「光」と呼ばれる構造を定義している:私は次のように同じ構造を反映したJavaクラスを記述する場合Android/OpenGLES2:Javaオブジェクトをシェーダ構造体にマッピングしますか?

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]; 

をそして:

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; 
} 

は光にのインスタンスをマッピングすることが可能ですシェイダープログラム?

答えて

2

いいえ、可能ではないと思います。値を個別にアップロードする必要があります。通常のOpenGLにはUniform Buffer Objectsのコンセプトがありますが、これはあなたが望むものと似ているかもしれませんが、GLES APIには言及していません。

+0

均一なバッファであっても、Javaの愚かな動的割り当て配列では破損しますが、もちろん+1になります。 –

関連する問題