Отложенный контекст ничего не отображает

#multithreading #slimdx #directx-11

#многопоточность #slimdx #directx-11

Вопрос:

я пытаюсь понять, как работает многопоточный рендеринг в dx11, поэтому я начал без каких-либо потоков, просто создал один отложенный контекст и попытался отобразить triangle с его помощью


код находится здесь https://gist.github.com/998406 я изменил образец SlimDX MiniTri для этого способа -> создать отложенный контекст с

 var deferredContext = new DeviceContext(device);
  

затем я привязываю к нему шейдер и визуализирую его

 deferredContext.ClearState();
deferredContext.InputAssembler.InputLayout = layout;
deferredContext.InputAssembler.PrimitiveTopology = PrimitiveTopology.TriangleList;
deferredContext.InputAssembler.SetVertexBuffers(0, new VertexBufferBinding(vertices2, 32, 0));

 for (int i = 0; i < technique.Description.PassCount;   i){
                              pass.Apply(deferredContext);
                              deferredContext.Draw(3, 0);}
  

затем попробуйте получить список команд и выполнить его

 CommandList dc_cl = deferredContext.FinishCommandList(false);
device.ImmediateContext.ExecuteCommandList(dc_cl, true);
  

то, что я ожидаю увидеть, это 2 треугольника
но он отображает только контекст immdeiate, но если я очищу экран в отложенном контексте
как deferredContext.ClearRenderTargetView (просмотр рендеринга, цвет.Помидор);
мой экран теперь томатного цвета, но треугольников по-прежнему нет


также, когда я добавил этот отложенный контекст, ПИКС перестает работать, ведьма означает, что я делаю что-то ужасное неправильно

Ответ №1:

Поскольку отложенный контекст не совпадает с вашим исходным контекстом, вам необходимо повторно установить цели отображения для вашего отложенного устройства в дополнение к исправлению аргументов вашего списка команд.

Это объясняет, почему ваше устройство очищено, но геометрия не отображается.

Ответ №2:

Не уверен, что вы это уже исправили, но если вы избавитесь от вызова ClearState (), а затем установите для логических параметров FinishCommandList и ExecuteCommandList значение true, вы увидите оба треугольника на экране.

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