我将jvm openvr binding更新为最后一个openvr版本1.0.5,但我不确定一件事。
在cpp中,IVROverlay
类具有此虚拟SetOverlayIntersectionMask
函数:
virtual EVROverlayError SetOverlayIntersectionMask(
VROverlayHandle_t ulOverlayHandle,
VROverlayIntersectionMaskPrimitive_t *pMaskPrimitives,
uint32_t unNumMaskPrimitives,
uint32_t unPrimitiveSize = sizeof( VROverlayIntersectionMaskPrimitive_t ) ) = 0;
我怀疑最后一个论点。
VROverlayIntersectionMaskPrimitive_t
:
struct VROverlayIntersectionMaskPrimitive_t
{
EVROverlayIntersectionMaskPrimitiveType m_nPrimitiveType;
VROverlayIntersectionMaskPrimitive_Data_t m_Primitive;
};
是一个带有枚举类型和联合类型变量的结构,名为VROverlayIntersectionMaskPrimitive_Data_t
:
typedef union
{
IntersectionMaskRectangle_t m_Rectangle;
IntersectionMaskCircle_t m_Circle;
} VROverlayIntersectionMaskPrimitive_Data_t;
上面的两个班级IntersectionMaskRectangle_t
和IntersectionMaskCircle_t
现在,枚举转换为Int
但后者?既然它应该是一个指针,我猜它应该是Pointer.SIZE
?
然而,这是我的实现,其中VROverlayIntersectionMaskPrimitive_Data_t
是一个抽象类:
abstract class VROverlayIntersectionMaskPrimitive_Data_t : Structure {
constructor() : super()
constructor(peer: Pointer) : super(peer)
}
由two other classes依次实施。
我的first guess是sizeof(VROverlayIntersectionMaskPrimitive_Data_t)
转换为Int + Pointer.SIZE
@JvmOverloads fun setOverlayIntersectionMask(
ulOverlayHandle: VROverlayHandle_t,
pMaskPrimitives: VROverlayIntersectionMaskPrimitive_t.ByReference,
unNumMaskPrimitives: Int,
unPrimitiveSize: Int = Int.BYTES + Pointer.SIZE)
我的推理是否正确?
答案 0 :(得分:2)
您使用Structure
方法获得Union
(包括size()
)的大小。在工会的情况下,您将获得最大成员的大小。
您可以使用Union.setType()
设置所需的联合类型。