DX11を使用してSharpDXで2つのレンダーターゲットを使用すると、私は奇妙な問題が発生します。 レイヤーできるオブジェクトのセットをレンダリングしており、部分的な透明性を実現するためにブレンドモードを使用しています。レンダリングは、1回のパスで2つのレンダーターゲットに対して行われ、2番目のレンダリングターゲットはカラーピッカーとして使用されます。この2番目のターゲットにオブジェクトID(整数)をレンダリングし、レンダリング後にマウスの下のテクスチャからオブジェクトIDを取得します。 。ブレンド状態が設定されているときに2番目のRenderTargetに出力がありません
私が問題になっているのは、すべてのコンピュータで発生しないため、イライラしています。実際に、当社の開発マシンでは発生しませんが、一般的にインテル(HD)グラフィックスを搭載したマシンでは野生で報告されています。これらのコンピュータでは、2番目のレンダーターゲットで出力が生成されません。ここでラップトップで問題を再現できました。がにブレンド状態を設定しないと、問題は解決されます。明らかに、これは修正ではありません。ブレンドが必要なためです。
主レンダーターゲット(0)、このようなターゲットの外観を選ぶ色のテクスチャの説明:
var desc = new Texture2DDescription
{
BindFlags = BindFlags.RenderTarget | BindFlags.ShaderResource,
Format = Format.B8G8R8A8_UNorm,
Width = width,
Height = height,
MipLevels = 1,
SampleDescription = sampleDesc,
Usage = ResourceUsage.Default,
OptionFlags = RenderTargetOptionFlags,
CpuAccessFlags = CpuAccessFlags.None,
ArraySize = 1
};
var colourPickerDesc = new Texture2DDescription
{
BindFlags = BindFlags.RenderTarget,
Format = Format.R32_SInt,
Width = width,
Height = height,
MipLevels = 1,
SampleDescription = new SampleDescription(1, 0),
Usage = ResourceUsage.Default,
OptionFlags = ResourceOptionFlags.None,
CpuAccessFlags = CpuAccessFlags.None,
ArraySize = 1,
};
ブレンド状態は次のように設定されている:
var blendStateDescription = new BlendStateDescription { AlphaToCoverageEnable = false };
blendStateDescription.RenderTarget[0].IsBlendEnabled = true;
blendStateDescription.RenderTarget[0].SourceBlend = BlendOption.SourceAlpha;
blendStateDescription.RenderTarget[0].DestinationBlend = BlendOption.InverseSourceAlpha;
blendStateDescription.RenderTarget[0].BlendOperation = BlendOperation.Add;
blendStateDescription.RenderTarget[0].SourceAlphaBlend = BlendOption.SourceAlpha;
blendStateDescription.RenderTarget[0].DestinationAlphaBlend = BlendOption.InverseSourceAlpha;
blendStateDescription.RenderTarget[0].AlphaBlendOperation = BlendOperation.Add;
blendStateDescription.RenderTarget[0].RenderTargetWriteMask = ColorWriteMaskFlags.All;
_blendState = new BlendState(_device, blendStateDescription);
とで適用されますレンダリングの開始。私はRenderTarget [1]に対してIsBlendEnabledをfalseに明示的に設定しようとしましたが、違いはありません。
これについてのお手伝いが大歓迎です。最終的には2回のレンダーパスを行う必要がありますが、それは迷惑でしょう。
「BlendStateDescription」の 'IndependentBlendEnable'フラグと何か関係があるかもしれません。 'RenderTarget [1]'(および残りの)ブレンド状態は、trueに設定されている場合にのみ使用されます。 – VTT
チップのおかげで - 私は本当に解決策になるだろうと思っていたが、残念ながらそれは何の違いもない(まだ出力はない)。奇妙なことは、ほとんどのグラフィックスカードではうまく動作するが、一部ではうまくいかないということだ。間違いなく何か間違ったことをやっているが、何とかそれを取り除くことは間違いない。 – Matt