Хочется узнать, можно ли запретить ImmediateContext'у устанавливать эффекты в текущий кадр?
Если по-русски, то:
Код
GraphicsDevice->Clear(1);
GraphicsDevice->SetForceEffectThisFrame(Effect); //Устанавливаем эффект на весь кадр
//(При вызове Present он обнуляется и не используется до последующего вызова)
GraphicsDevice->DrawMyLittlePony(OtherEffect); //Рисуем какую-то фигню, используя какой-то другой эффект
GraphicsDevice->Present();
Как следствие, после вызова SetForceEffectThisFrame(), нужно запретить вызов ImmediateContext->VSSetShader() и ImmediateContext->PSSetShader(),
чтобы у нас использовался только Effect для всей геометрии, а не Effect и OtherEffect.
Первым делом я решил просто сделать проверку:
Код
void GraphicsDevice::DrawMyLittlePony(OtherEffect)
{
if (Effect == NULL)
{
ImmediateContext->VSSetShader(OtherEffect->VertexShader, ..., ...);
ImmediateContext->PSSetShader(OtherEffect->PixelShader, ..., ...);
}
}
Но понял, что можно вызвать так:
Код
GraphicsDevice->Clear(1);
GraphicsDevice->SetForceEffectThisFrame(Effect);
GraphicsDevice->ImmediateContext->VSSetShader(OtherEffect->VertexShader, ..., ...);
GraphicsDevice->ImmediateContext->PSSetShader(OtherEffect->PixelShader, ..., ...);
GraphicsDevice->DrawMyLittlePony(OtherEffect);
GraphicsDevice->Present();
Добавлено (05 августа 2016, 02:36)
---------------------------------------------
ладно, понял, прошаренных тут нет, тему можно закрыть