2017-05-07 10 views
2

私は現在、ゲーム用の簡単なUIを作成しており、2つのパイプライン状態(それぞれに同じ頂点シェーダ)を使用するために必要な各ボタンを描画しています。 1つは、境界線のラインストリップを描画し、静的カラーフラグメントシェーダを使用し、1つは波紋のグラデーションを使用してボタンの内側を描画します。1つのMTLRenderCommandEncoderで複数のMTLRenderPipelineStatesを使用できますか?

let encoder = command.makeRenderCommandEncoder(descriptor: renderPassDesc) 
encoder.setRenderPipelineState(stateWithStaticFragmentShader) 
// encode some buffers and draw line-strips 
encoder.setRenderPipelineState(stateWithGradientFragmentShader) 
// encode some buffers and draw button background 
encoder.endEncoding() 

答えて

3

はい、あなたはコマンドエンコーダをレンダリング一つに複数のパイプライン状態を使用することができます。私は次の操作を行うことができます場合は、別の2は、コマンドエンコーダ、パイプラインごとに1つずつレンダリングする、または必要な場合、私は思ったんだけど。つまり、レンダーパス記述子の一部であるパイプライン状態ではなく、setRenderPipelineState()メソッドが存在するのは正確です。レンダーパス記述子のプロパティは、レンダリングコマンドエンコーダの作成時にのみ読み込まれ、そのエンコーダの有効期間中は変更できません。エンコーダで独立して設定可能なものは、その寿命中に変更することができます。

+0

ありがとうございました。私は考えましたが、わかりませんでした。 –

関連する問題