#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. Возможно, вам придется запросить на родном форуме дополнительную информацию о том, как это работает.