Можно ли отменить рисование RenderTarget из другого потока?

Цикл рендеринга Direct2D запускается в отдельном потоке по эстетическим причинам. Это обеспечивает плавную и мгновенную анимацию независимо от изменения размера окна или других блоков перекачки сообщений в основном потоке. Этот поток рендеринга остается заблокированным большую часть времени (используя Monitor.Wait < / a>), если сцена не становится недействительной из-за наведения мыши, прокрутки, изменения размера окна и т. д.

Я не вижу способа отменить презентацию после того, как код рисования вызывает BeginDraw на цели рендеринга. Если окно некорректно определенным образом, сцена все равно будет отброшена и перерисована. Что я могу сделать, чтобы вернуться к «чистому листу», готовому к следующему BeginDraw, не доработав и не представив сцену? Могу ли я вызвать ошибку рендеринга, чтобы прервать поток рисования, который пропустил бы презентацию?


person jnm2    schedule 30.06.2014    source источник
comment
Рендеринг одного кадра занимает столько времени, что вам нужно заморачиваться? Если да, то, вероятно, у вас другая проблема.   -  person Roger Rowland    schedule 01.07.2014
comment
Я пытаюсь облегчить например, эта проблема с мерцанием. Даже при простом клиренсе лагает. Я хочу поиграть со своими вариантами. Вынужденное представление сцены перед изменением размера цели рендеринга неэффективно.   -  person jnm2    schedule 01.07.2014


Ответы (1)


Да, попробуйте вызвать ошибку. Например, renderTarget->PushAxisAlignedClip(), затем renderTarget->EndDraw(), не открывая зажим. Это вызовет D2DERR_PUSH_POP_UNBALANCED (0x88990016). Тогда вам придется Flush() цель сбросить состояние ошибки.

person vt.    schedule 02.07.2014