Удивительно, что на нашем форуме еще нет этой темы.
VR-технологии уже достаточно распространены, чтобы начать вести разработку VR-игр и прочих VR-приложений. Кто уже? На чём ведёте разработку, какие успехи?
Совместное тестирование игр на разном VR-оборудовании: https://gamedev.ru/code/forum/?id=261050
Сервер VR RUS в Дискороде: http://ruvr.su/
romanshuvalov
> GetProjectionMatrix() вызывает Access Violation (0xC0000005)
открыть исходники openVR и посмотреть что в этих методах может быть недоступным.
cyberpunk2077
> открыть исходники openVR и посмотреть что в этих методах может быть недоступным.
Открыты только заголовки, реализации нет: https://github.com/ValveSoftware/openvr/search?q=GetProjectionMatrix
cyberpunk2077
> открыть исходники openVR и посмотреть что в этих методах может быть
> недоступным.
ничего там нет, это интерфейс не более, вся реализация в библиотеке исходников которой нет.
romanshuvalov
ты либы собирал сам или скачал с гита те что есть?
cyberpunk2077
> открыть исходники openVR
Он не на столько open ))
romanshuvalov
Это чистая виртуальная функция:
virtual HmdMatrix44_t GetProjectionMatrix(EVREye eEye, float fNearZ, float fFarZ ) = 0;
Aroch
Ты же сам написал что исходников реализации нет, поэтому я скачал с гита собранные либы, потому что больше их взять неоткуда. Пробовал ради эксперимента подменить ДЛЛшку на ту, которая лежит в steamapps/common/SteamVR, она там вроде другая. Не помогло.
cyberpunk2077
> Это чистая виртуальная функция:
Они там все такие. В заголовках только интерфейс с виртуальными функциями. А при инициализации создаётся объект "неизвестного класса", наследованный от этого интерфейса. Адрес метода я кстати проверял - ненулевой. И все другие методы работают, возвращают корректные значения.
romanshuvalov
> Ты же сам написал что исходников реализации нет, поэтому я скачал с гита
> собранные либы, потому что больше их взять неоткуда. Пробовал ради эксперимента
> подменить ДЛЛшку на ту, которая лежит в steamapps/common/SteamVR, она там вроде
> другая. Не помогло.
dll, но dll и lib не одно и тоже, и судя по тому что у них для винды именно .lib то собирали они студийным компилятором, а у тебя mingw, собери и получи на выходе .a который и подключишь линкеру.
Aroch
> собирали они студийным компилятором, а у тебя mingw, собери и получи на выходе .a
Как собрать, если нет исходников? Студия умеет собирать .a для последующего использования в mingw? Или я не так тебя понял.
upd.: Нарыл https://stackoverflow.com/questions/11793370/how-can-i-convert-a-… -to-a-mingw-a - буду пробовать, хорошая идея (нижний ответ про dlltool)
romanshuvalov
> Как собрать, если нет исходников?
есть там исходники, тебе надо собрать .a для динамического связывания и всё. А саму dll возьмешь с папки bin.
https://github.com/ValveSoftware/openvr/blob/master/src/README
Aroch
> а у тебя mingw
хе-хе
romanshuvalov
использовать студийные lib, если пользуешься mingw - это безнадежное дело.
Для OpenVR есть С-интерфейс, так что можно динамически грузить dll без всяких либ, это удобно если у пользователя не установлен SteamVR и вообще VR опционально идет.
А разве mingw не поддерживает *.lib? Я когда-то подключал какую-то M$ библиотеку к mingw проекту и все работало (возможно, только, что я тупо переименовал ее в *.a, уже не помню).
Ок, я понял, линковать надо через .a. Но угадайте что?
Я совершенно случайно обнаружил в пакетах mingw пакет openvr, датированный, правда, 2019 годом, но правильно собранный и с линковочным .dll.a в комплекте. И с ним ошибка точно та же.
Вообще судя по бэктрейсу ошибка вообще происходит не у меня:
> backtrace
#0 0x00007ffb447f9f98 in xrNegotiateLoaderRuntimeInterface () from C:\Program Files (x86)\Steam\steamapps\common\SteamVR\bin\vrclient_x64.dll
#1 0x0000000000407613 in CMainApplication::GetHMDMatrixProjectionEye (this=0x1254550, nEye=vr::Eye_Left) at C:\develop\tests\vrsample1\main.cpp:1721
#2 0x0000000000000000 in ?? ()
Backtrace stopped: previous frame inner to this frame (corrupt stack?)
а в vrclient_x64.dll самого Стима. Я как бы вообще не при делах. И в этом случае даже
> С-интерфейс, так что можно динамически грузить dll без всяких ли
не спасёт.