Я смотрю на документация для IDXGIKeyedMutex
и я немного не уверен относительно следующего:
Вы должны вызвать метод ReleaseSync, когда закончите рендеринг в
поверхность.
Мой вопрос: что значит «когда вы закончите рендеринг»? Это после того, как удалить текстуру в качестве цели рендеринга для непосредственного контекста, когда я вызываю Flush
в ближайшем контексте или мне нужна какая-то другая форма ограждения / синхронизации графического процессора, прежде чем я могу позвонить ReleaseSync
?
И почему D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX
предпочтительнее D3D11_RESOURCE_MISC_SHARED
?
Вы должны вызывать IDXGIKeyedMutex :: ReleaseSync после того, как вы вызвали вызовы ID3D11DeviceContext :: Draw или другие вызовы для выдачи команд графического процессора для записи в буфер (то есть ID3D11DeviceContext :: CopyResource). Вам не нужно явно вызывать Flush. Для примера использования AcquireSync / ReleaseSync, пожалуйста, посмотрите на http://code.msdn.microsoft.com/DXGISyncSharedSurf
D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX предпочтительнее, чем D3D11_RESOURCE_MISC_SHARED, потому что его можно использовать с D3D11_RESOURCE_MISC_SHARED_NTHANDLE, что обеспечивает лучшую безопасность для совместного использования поверхности между процессами.
Других решений пока нет …