2

我将jvm openvr 绑定更新到最后一个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)
}

由另外两个类依次实现。

我的第一个猜测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)

我的推理看起来正确吗?

4

1 回答 1

3

您使用该方法获得 a Structure(包括Union)的大小size()。在工会的情况下,您将获得最大成员的大小。

您使用 设置所需的联合类型Union.setType()

于 2017-01-20T14:05:25.507 回答