Я пытаюсь заставить "SharpDX.Direct3D11.DeviceContext.OutputMerger.Blendstate" работать. Без этого у меня есть хорошая сцена (полигоны с текстурами на ней, для космического шутера). Я занимался графикой OpenGL в течение последних трех лет, поэтому я подумал, что это может быть так же просто, как и в OpenGL — просто включите смешивание и установите правильные режимы Dst/Src. Но если я установлю новое описание BlendStateDescription, весь вывод будет черным, даже если для «RenderTarget[x].IsBlendEnabled» установлено значение «false». Я искал учебник или что-то в этом роде и нашел его, но он использует эффекты. Итак, мой вопрос прост: нужно ли использовать технику и эффекты в SharpDX? Другого пути для простого смешивания не осталось?
Вот что я сделал:
mBackBuffer = Texture2D.FromSwapChain<Texture2D>(mSwapChain, 0);
mRenderView = new RenderTargetView(mDevice, mBackBuffer);
mContext.OutputMerger.SetTargets(mDepthStencilView, mRenderView);
mContext.OutputMerger.SetBlendState(new BlendState(mDevice, new BlendStateDescription()), new SharpDX.Color4(1.0f), -1);
mContext.OutputMerger.BlendState.Description.RenderTarget[0].IsBlendEnabled = true;
mContext.OutputMerger.BlendState.Description.RenderTarget[0].SourceBlend = BlendOption.SourceAlpha;
mContext.OutputMerger.BlendState.Description.RenderTarget[0].DestinationBlend = BlendOption.InverseSourceAlpha;
mContext.OutputMerger.BlendState.Description.RenderTarget[0].BlendOperation = BlendOperation.Add;
mContext.OutputMerger.BlendState.Description.RenderTarget[0].SourceAlphaBlend = BlendOption.One;
mContext.OutputMerger.BlendState.Description.RenderTarget[0].DestinationAlphaBlend = BlendOption.Zero;
mContext.OutputMerger.BlendState.Description.RenderTarget[0].AlphaBlendOperation = BlendOperation.Add;
mContext.OutputMerger.BlendState.Description.RenderTarget[0].RenderTargetWriteMask = ColorWriteMaskFlags.All;
И, даже если просто сделать:
mContext.OutputMerger.SetBlendState(new BlendState(mDevice, new BlendStateDescription()), new SharpDX.Color4(1.0f), -1);
mContext.OutputMerger.BlendState.Description.RenderTarget[0].IsBlendEnabled = false;
вывод весь черный.. может быть, мне просто нужно что-то изменить в пиксельных шейдерах?