iOSでMetal APIによる2D描画を行なっています
デバッガで描画コストを確認したところ
"画面全体をアルファありの単色で塗りつぶす処理"が
多数のオブジェを描画するより高コストになっています
シーンにもよりますが、全描画処理コストのうち1/4を1度の塗りつぶし処理が占めています
(描画ピクセルが多いので当然な気もしますが)
実装としては、画面いっぱいの短形で塗りつぶしているだけで、これが一般的なやり方でしょうか?
何か専用のもっと高速な方法があるのでしょうか?
metal
1vertex float4 fillScreenV(constant float *pos [[ buffer(0) ]], const uint index [[ vertex_id ]]){ 2 return float4(pos[index*2],pos[index*2+1], 0.0, 1.0);//ただの画面いっぱいの短形 3} 4fragment half4 fillScreenF(constant half4 &color [[ buffer(0) ]]){ 5 return color;//単色 6}
よろしくお願いします
Metalは知らないのですが(特に「画面」がどのような扱いなのか知らない)、
「画面全体をアルファありの単色で塗りつぶす」というのは、「画面」上のピクセルにある色に対してアルファ合成した色でそれを置き換えるという意味でしょうか。
それとも、「画面」上のピクセルを既存の値に関係なく固定の色にする(アルファはその「画面」を別の「画面」と合成するために使われる)ということでしょうか。
前者なら、遅いのはアルファ合成(のためのメモリリード)かと思います。後者ならわかりません。
例えばホワイトイン等の演出などになります、ので、おそらく前者になります。
シンプルな全画面への塗りつぶしなので、何か専用の高速な関数が用意されてるかもと思いましたが
そうではないようでしょうか。ありがとうございました。
あなたの回答
tips
プレビュー