🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Metal

Metalは、Apple社が提供するローレベルなグラフィックスAPIです。各macOS/iOSの各バージョンで利用でき、OpenGLとOpenCLに似た機能をAPIとして提供しています。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

3DCG

コンピュータの演算により、3次元空間の仮想物体を、2次元平面上で表現する手法である。

Q&A

0回答

769閲覧

シェーダーの単純な画面塗りつぶしの速度が遅い

clateratail

総合スコア24

Metal

Metalは、Apple社が提供するローレベルなグラフィックスAPIです。各macOS/iOSの各バージョンで利用でき、OpenGLとOpenCLに似た機能をAPIとして提供しています。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

3DCG

コンピュータの演算により、3次元空間の仮想物体を、2次元平面上で表現する手法である。

0グッド

0クリップ

投稿2021/09/07 15:19

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}

よろしくお願いします

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ikadzuchi

2021/09/08 16:53

Metalは知らないのですが(特に「画面」がどのような扱いなのか知らない)、 「画面全体をアルファありの単色で塗りつぶす」というのは、「画面」上のピクセルにある色に対してアルファ合成した色でそれを置き換えるという意味でしょうか。 それとも、「画面」上のピクセルを既存の値に関係なく固定の色にする(アルファはその「画面」を別の「画面」と合成するために使われる)ということでしょうか。 前者なら、遅いのはアルファ合成(のためのメモリリード)かと思います。後者ならわかりません。
clateratail

2021/09/09 15:00

例えばホワイトイン等の演出などになります、ので、おそらく前者になります。 シンプルな全画面への塗りつぶしなので、何か専用の高速な関数が用意されてるかもと思いましたが そうではないようでしょうか。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問