Здравствуйте.
Для вывода видео я использую свой аллокатор:
class CAllocator : public IVMRSurfaceAllocator9,
IVMRImagePresenter9
Функция перерисовки экрана в большинстве случаев вызывается из CAllocator::PresentHelper и всё работает нормально.
Но иногда требуется принудительно перерисовать экран, используя переданную и сохранённую аллокатором текстуру.
Проблема возникает в случае, когда внутренний поток DirectX декодирует очередной кадр и одновременно я из основного потока программы выполняю перерисовку, происходит конфликт доступа к текстуре.
Сообщения DirectX:
Direct3D9: (WARN) :Can not render to a render target that is also used as a texture. A render target was detected as bound, but couldn't detect if texture was actually used in rendering.
Direct3D9: (ERROR) :BeginScene, already in scene. BeginScene failed.
В результате текстура портится (на видео появляются линии, которые должны рисоваться поверх текстуры).
Блокировки внутри функций CAllocator не помогают, т.к. эти функции в тот момент ещё не вызываются.