2011-01-10 11 views
0

これが私の最初の投稿です、と私はごく最近のAndroidおよびOpenGLのプログラミングを開始しましたので、私にはいいです:)配列インデックス

私は1つの画面が含まれます小さなアプリケーションを書いています色の迅速な変更のためにパレタイズされた画像を使用します。スピードに関しては、シェーダを使ってシステムを実装できると思ったので、Open GL ES 2.0プログラミングガイドの素晴らしい例を使ってシェーダを起動しています。私が過去数日間頭を悩ませていた問題は、シェーダ内のパレットデータを参照する方法が登場しています。

私のシェーダが現在ある:

precision lowp float; 
varying vec2  v_texCoord; 
uniform sampler2D s_texture; 
uniform int  s_palette[204]; // Specify a palette of 64 rgb entries 

void main() 
{ 
    vec4 col = texture2D(s_texture, v_texCoord); 
    int index = (int(col.r * 255.0) * 3; 

    gl_FragColor = vec4(float(s_palette[index])/255.0, float(s_palette[index+1])/255.0, float(s_palette[index+2])/255.0, 1.0); 
} 

年齢のためにこれで遊んで、非常に遠くに私は一定の値で、私のパレットデータを参照する場合、私は結果を得ることができることを発見し、ではなく、参照することで得ていない後変数を使ってGoogleでしばらく検索したところ、これはGLSL 1.1とまったく同じ方法であり、GLSL 1.3で修正されたことがわかりました。私はAndroidがGLSL 1.3に基づいたGLSL ES1.0上で動作していると信じていますので、うまくいくはずです。私はGLSLESの仕様で何も見つけられませんが、それはどちらも不可能であると示唆しています。どこが間違っていますか?

単純にできないのであれば、私の計画でこのやや欠点を乗り越える方法は他にもありますか?

答えて

0

いいえ、定数配列は変数では索引付けできませんが、定数データ配列ではなくテクスチャを使用してパレット検索を簡単に行うことができます。 Nx1の2Dテクスチャを使用し、GLSLのtexture2Dを使用してルックアップを行います。

もちろん、OpenGLの通常のテクスチャ関数を使用してCPU側からテクスチャデータを読み込む必要があります。

+0

ありがとうございます。魅力のように働いた。 :) – Teknogrebo

関連する問題