Переключение NvAPI_Stereo_Deactivate/NvAPI_Stereo_activate приводит к сбою приложения Unity

В настоящее время я работаю над внешним плагином в Unity3d, который использует NVAPI и 3D Vision. В NVAPI есть два вызова API для включения/выключения активного стерео.

NvAPI_Stereo_Deactivate   
NvAPI_Stereo_Activate

Поэтому всякий раз, когда я пытаюсь включить / выключить стерео, он вылетает в случайное время со следующим исключением:

Unity Player [версия: Unity 2017.1.0f3 (472613c02cf7)]
nvwgf2umx.dll вызвал нарушение прав доступа (0xc0000005) в модуле nvwgf2umx.dll по адресу 0033:6f9981d8.

Сбой может произойти с третьей попытки, а иногда и с любой попытки позже. В настоящее время я предполагаю, что он должен что-то делать с некоторым значением, к которому обращается dll. Проблема в том, что у NVIDIA нет к нему доступа.

Я уже пробовал другие простые методы, такие как отключение вертикальной синхронизации, изменение настроек качества на максимальное в разделе «Управление настройками 3D», но все они терпели неудачу.

Я наткнулся на аналог проблема на форумах разработчиков NVDIA, но, похоже, ответа на нее нет. Любые предложения или помощь по этому поводу будут очень признательны.

Также здесь находится ссылка на журнал ошибок.


person killer_mech    schedule 06.08.2018    source источник


Ответы (1)


Мне удалось исправить эту проблему, используя окольный путь. Вместо использования

NvAPI_Stereo_Deactivate   
NvAPI_Stereo_Activate

Функции для включения и выключения 3D-видения. Я передаю текстуру рендеринга в моно-глаз в NvAPI_Stereo_SetActiveEye в моно-камеру, а в активном режиме я передаю ее в левый глаз и правый глаз соответственно. Переключение, похоже, работает правильно, хотя я также отметил, что использование NvAPI_Stereo_IsActivated в цикле, по-видимому, вызывает такое же нарушение прав доступа, поэтому вместо этого можно использовать только пользовательскую функцию NvAPI_Stereo_SetActiveEye, а не возиться с собственными функциями NVAPI. Одним из недостатков использования этого является то, что 3D-эмиттер будет оставаться включенным до выхода из приложения (для моего проекта это кажется нормальным). Надеюсь, это поможет кому-нибудь в будущем столкнуться с этой проблемой. Обновите ответ, если у кого-то есть лучшее решение. Это было бы чудесно.

person killer_mech    schedule 07.08.2018