2017-12-26 7 views
1

現在、以下の処理を並列に行う方法を理解しようとしています。それは、次の手順に煮詰めすることができます。テクスチャの使用上の問題により、アップルの遅延レンダリングの例がメタル2上で実行されない

  1. は、リニアサンプリングに「ぼかし」の三角形を許可するフレームに、小さなテクスチャを描く小さなテクスチャ
  2. に三角形を描画します。

私がそれを行うことができれば、私は自分のシーンをレンダリングできるはずです。問題は、テクスチャが読み書きアクセスの両方を持つことができないことです。私はこれが常にそうだったのか、それともちょうど金属であるのかどうかはわかりません。

私はAppleのdeferred rendering exampleに目を向けると、複数のテクスチャに書き込んで同じテクスチャを一緒に読み込んで、スクリーン描画可能なイメージに最終イメージを生成することで、遅延レンダリングが機能することを知りました。しかし、それを実行しているアポンは、私が現在のレンダリングコードで得たのと同じエラーを受けました。ここにはcolorAttachment[0] does not have usage that specifies _があります。

これは、MetalまたはiOSの変更によるものと推測しています。

興味深いのは、XCodeに接続するとすぐにクラッシュすることですが、ホーム画面から開いた場合はフリーズする前に数秒間は問題なく処理できます。

読み取りと書き込みの両方にテクスチャを使用するにはどうすればよいですか?サンプルコードが動作しないのはなぜですか?

答えて

2

アップルはサンプルを更新せずに改ざんを行ったため、サンプルコードは機能しません。それは起こる。

ここでは、サンプルの実行得るために作ることができるの変更の最小限のセットです:

ライン204 AAPLRenderer.mmでは、追加:

shadowTextureDesc.usage = MTLTextureUsageRenderTarget | MTLTextureUsageShaderRead; 

ライン130 AAPLView.mmでは、追加:

desc.usage = MTLTextureUsageRenderTarget; 

上記の行153および178を繰り返します。

あなたのユースケースでは、あなたのオフスクリーンレンダリングターゲットにMTLTextureUsageRenderTarget | MTLTextureUsageShaderReadを使用したいと思うでしょう。これにより、1回のパスでレンダリングし、後続のパスでそれからサンプリングすることができます。

関連する問題