OpenVR:虚拟 API 函数的实现 (GetProjectionMatrix)

OpenVR: Implementation of virtual API functions (GetProjectionMatrix)

我无法从 openvr header.

中找到纯虚函数的实现(也就是源代码)

我主要对GetProjectionMatrix()函数感兴趣。

我搜索的地方(没有结果):

到目前为止我发现了什么:https://github.com/ValveSoftware/openvr/issues/103 ,但这似乎处理了不同编译器产生的问题。这个问题的错误是在SteamVR提供的vrclient.dll中产生的。两者似乎都没有 public 来源。

知道这些虚函数是如何(/在哪里)实现的吗?

你不会喜欢这个答案,因为可悲的现实是它没有可供我们使用的开源。

OpenVR是一个纯粹的虚拟界面库,是的界面是开源的,但这些界面的实际实现不是。在 libopenvr_api(看起来像)的情况下,它们将作为二进制 blob 附加到接口构建中。

工作方式是通过在接口库中声明但在其他地方定义的工厂函数,那些外部定义的部分对我们来说就像一个黑盒子,除非 Valve 突然改变主意,否则它将保持不变方式。

这些工厂函数在 openvr.hopenvr_driver.hOPENVR_INTERFACE_INTERNAL 部分中声明和使用(同样在 openvr.h 的情况下,这些工厂函数在 openvr_capi.h,但它们使用在运行时加载的共享库中定义的工厂函数,整个模式与 openvr.h) 中的非常相似。

编辑:

(also in case of openvr.h those factory functions are defined in openvr_capi.h, but they use factory functions that are defined in a shared library which is just loaded at runtime and the entire pattern is very similar to the one in openvr.h)

我的记忆显然让我失望了,内部工厂函数在 openvr_api_public.cpp 中定义,它是源文件之一 libopenvr_api 是从 构建的不是 openvr_capi.h 中(为我辩护,我有一段时间没有看 libopenvr_api 来源)。