2

ESシェーダーで少しあいまいな問題が発生していて、今ではほとんどアイデアがありません。

ここにいくつかのコードがあります:

.. precision mediump float;
.. #define STEP (1f/6f)

53 vec4 colorBasedOnProgress(float progress){
54     float transition = (progress/STEP);   
55     transition = floor(transition);
56     float position = (progress - (transition*STEP)) * 7f;
57    
58     position = clamp(position, 0f, 1f);
59    
60     vec4 result;
61        
62     if(transition == 0f){
63         result = mix(COLOR_VIOLET, COLOR_BLUE, position);
64     } else if (transition == 1f){
65         result = mix(COLOR_BLUE, COLOR_GREEN, position);
66     } else if (transition == 2f){
67         result = mix(COLOR_GREEN, COLOR_YELLOW, position);
68     } else if (transition == 3f){
69         result = mix(COLOR_YELLOW, COLOR_ORANGE, position);
70     } else if (transition == 4f){
71         result = mix(COLOR_ORANGE, COLOR_RED, position);
72     } else if (transition == 5f){
73         result = mix(COLOR_RED, COLOR_VIOLET, position);
74     }
75     
76     return result;
77 }

私が得ているエラー(デバイス、Galaxy S2だけで):

09-16 00:05:04.415: I/InitialLoadingScreen(29901): 0:54: L0001: Expected token ')', found 'identifier'
09-16 00:05:04.415: I/InitialLoadingScreen(29901): 0:55: L0002: Undeclared variable 'transition'
09-16 00:05:04.415: I/InitialLoadingScreen(29901): 0:56: L0002: Undeclared variable 'transition'
09-16 00:05:04.415: I/InitialLoadingScreen(29901): 0:58: L0002: Undeclared variable 'position'
09-16 00:05:04.415: I/InitialLoadingScreen(29901): 0:62: L0002: Undeclared variable 'transition'
09-16 00:05:04.415: I/InitialLoadingScreen(29901): 0:64: L0001: Expected literal or '(', got 'else'
09-16 00:05:04.415: I/InitialLoadingScreen(29901): 0:66: L0001: Expected literal or '(', got 'else'
09-16 00:05:04.415: I/InitialLoadingScreen(29901): 0:68: L0001: Expected literal or '(', got 'else'
09-16 00:05:04.415: I/InitialLoadingScreen(29901): 0:70: L0001: Expected literal or '(', got 'else'
09-16 00:05:04.415: I/InitialLoadingScreen(29901): 0:72: L0001: Expected literal or '(', got 'else'

私はシェーダー言語の経験があまりないので、どこから始めればよいのか正確にはわかりません。任意のヘルプとポインタをいただければ幸いです!

4

1 に答える 1

4

私はあなたのコードをコンパイルしようとしました。float、1f、2f、3fなどを使用しているため、問題が発生しているようです

代わりに 1.,2.,3 を試してください。これは、シェーダー プログラムで常に浮動小数点を定義する方法です。これを Mali Shader コンパイラで正常にコンパイルしました。S2にはMali GPUが搭載されているため、S2で動作するはずです。

于 2012-09-16T05:43:04.233 に答える