DirectX11 Эквивалент кода OpenGL

В настоящее время я переношу части моего движка на D3D11 из OpenGL и пытался выяснить, как выполнить следующие функции смешивания в D3D11.

glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ONE);
glDepthMask(GL_FALSE);
glDepthFunc(GL_EQUAL);

Я считаю, что это должно быть примерно так:

D3D11_BLEND_DESC blendDesc;
ZeroMemory(&blendDesc, sizeof(blendDesc));

D3D11_RENDER_TARGET_BLEND_DESC rtbd;
ZeroMemory(&rtbd, sizeof(rtbd));

rtbd.BlendEnable = true;
rtbd.SrcBlend = D3D11_BLEND_ONE;
rtbd.DestBlend = D3D11_BLEND_ONE;

rtbd.BlendOp = D3D11_BLEND_OP_ADD;
rtbd.SrcBlendAlpha = D3D11_BLEND_ONE;
rtbd.DestBlendAlpha = D3D11_BLEND_ONE;
rtbd.BlendOpAlpha = D3D11_BLEND_OP_ADD;
rtbd.RenderTargetWriteMask = D3D11_COLOR_WRITE_ENABLE_ALL;
blendDesc.AlphaToCoverageEnable = true;
blendDesc.RenderTarget[0] = rtbd;

m_D3D->GetDevice()->CreateBlendState(&blendDesc, &m_blendMode);

Однако это не работает. Как я могу добиться того же эффекта, что и в первом фрагменте кода?

Спасибо

3 голоса | спросил Nick 21 PMpTue, 21 Apr 2015 15:54:29 +030054Tuesday 2015, 15:54:29

1 ответ


1

Эта часть вашего кода не соответствует техническому состоянию, но может повлиять на поведение здесь:

glDepthMask(FALSE) glDepthFunc(GL_EQUAL)

D3D11 имеет соответствующее состояние, и вы можете установить его, создав и привязав объект ID3D11DepthStencilState, аналогично тому, что вы делаете с ID3D11BlendState.

См. https: //msdn.microsoft.com/en-us/library/windows/desktop/ff476506(v=vs.85).aspx для деталей.

По существу, вы должны заполнить дескриптор D3D11_DEPTH_STENCIL_DESC для создания этого объекта и задать дескриптор «desc»:

  • desc.DepthWriteMask отображает значение glDepthMask
  • desc.DepthEnable = true /false соответствует glEnable (GL_DEPTH_TEST) /glDisable (GL_DEPTH_TEST) соответственно
  • desc.DepthFunc отображает значение glDepthFunc
  • включите трафайкование и назначьте остальные поля, если вы используете трафарет.
ответил jpaver 22 AMpWed, 22 Apr 2015 10:20:32 +030020Wednesday 2015, 10:20:32

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132