1

私はアンドロイドでゲームを作っていますが、色があまりにも光沢があり、スプライトを変更できないので、シェーダーを実装することにしました:

const char* fETCShader = "\
uniform mediump sampler2D sTexture 
uniform mediump sampler2D sTexture_alpha 
\
varying mediump vec4 vColor 
varying mediump vec2 vTexCoord 
uniform lowp mat4 cCorrection 
\
void main()\
{\
    lowp vec4 color = vec4(texture2D(sTexture, vTexCoord).rgb, texture2D(sTexture_alpha, vTexCoord).r) * vColor 
    gl_FragColor = cCorrection * color 
}"

しかし、fpsは劇的に低下します( 20 など)

これを行うための安価な操作が存在するかどうかは誰にもわかりません。

ありがとう。

4

2 に答える 2

1

それぞれ 3 チャンネルと 1 チャンネルの 2 つのテクスチャを使用する代わりに、単一の 4 チャンネル RGBA テクスチャを作成するだけで、テクスチャ フェッチを 1 回行うだけで済みます。

携帯電話のフラグメント シェーダーはすぐにボトルネックになります。フラグ シェーダーが実行する必要のある作業量を常に最小限に抑えるようにしてください。

シェーダーは次のようになります。

const char* fETCShader = "\
uniform mediump sampler2D sTexture 
uniform mediump sampler2D sTexture_alpha 
\
varying mediump vec4 vColor 
varying mediump vec2 vTexCoord 
uniform lowp mat4 cCorrection 
\
void main()\
{\
    gl_FragColor = cCorrection * texture2D(sTexture, vTexCoord) * vColor; 
}"
于 2012-07-31T20:44:49.330 に答える
0

スプライトを最初にロードしたときに一度だけ変更してから、以前に使用していたメカニズムを使用することはできませんか?それができない場合は、少なくとも2つのテクスチャを1つに結合します。

于 2012-07-31T20:46:05.907 に答える