Я пишу код, используя VS.Net 10 и SlimDX для рендеринга 3D-контента в D3DImage. Он отлично работает под 32-битной Windows XP. Однако после перехода на 64-битную Windows 7 (четырехъядерный процессор и 4 ГБ оперативной памяти) тот же код больше не работает. Симптом заключается в том, что после рендеринга примерно 10 или 20 раз возникает событие IsFrontBufferAvailableChanged объекта D3DImage, а свойство IsFrontBufferAvailable имеет значение false.

Я проверил все, что мог придумать, например. RenderCapability.Tier, вызов SetBackBuffer, проверка устройства (по факту типа DeviceEx) после потери переднего буфера, обновление драйвера видеокарты (nvidia 9500 GT 1G RAM) и т.д. Ничего из этого не сработало.

Одна вещь, которая может способствовать возникновению проблемы, заключается в том, что элемент управления изображением, который использует D3DImage в качестве источника, не создается в потоке графического интерфейса. Я делаю это, чтобы уменьшить нагрузку на поток GUI, чтобы сделать приложение более отзывчивым. Конечно, я использовал Dispatcher.Invoke, чтобы избежать проблем с потоками. Опять же, он отлично работает в XP.

Любая помощь очень ценится. Заранее спасибо.

2
Rapido 21 Мар 2011 в 02:34

1 ответ

Я думаю, что есть x64-версия slimdx.dll. Если вы используете x32-версию, это может быть проблемой.

0
mdm20 22 Мар 2011 в 22:34
Пробовал 32-битную и 64-битную версию, пробовал любой ПК, конфигурации x86, x64 и Mixed Platform и пробовал много других вещей. Ни один не работает. :(
 – 
Rapido
15 Апр 2011 в 05:30