21 ATTR_BILLBOARD_MASK = (1 << 8) - 1,
23 ATTR_T_IGNORE = (1 << 27),
24 ATTR_S_UNIFORM = (1 << 28),
25 ATTR_ALL_S_UNIFORM = (1 << 29),
26 ATTR_S_ONE = (1 << 30),
27 ATTR_ALL_S_ONE = (1 << 31),
31 static ResNodeData::Billboard GetBillboard(ulong attr) {
32 return static_cast<ResNodeData::Billboard
>(attr & ATTR_BILLBOARD_MASK);
34 static ulong SetBillboard(ulong attr, ResNodeData::Billboard billboard) {
35 return (attr & ~ATTR_BILLBOARD_MASK) | billboard;
38 static bool IsIgnoreTrans(ulong attr) {
39 return (attr & ATTR_T_IGNORE) ? true :
false;
41 static ulong AnmIgnoreTrans(ulong attr) {
42 return attr | ATTR_T_IGNORE;
44 static ulong AnmNotIgnoreTrans(ulong attr) {
45 return attr & ~ATTR_T_IGNORE;
48 static bool IsScaleUniform(ulong attr) {
49 return (attr & ATTR_S_UNIFORM) ? true :
false;
51 static ulong AnmScaleUniform(ulong attr) {
52 return attr | ATTR_S_UNIFORM;
54 static ulong AnmNotScaleUniform(ulong attr) {
55 return attr & ~(ATTR_S_UNIFORM | ATTR_ALL_S_UNIFORM | ATTR_S_ONE |
59 static bool IsAllScaleUniform(ulong attr) {
60 return (attr & ATTR_ALL_S_UNIFORM) ? true :
false;
62 static ulong AnmAllScaleUniform(ulong attr) {
63 return attr | ATTR_ALL_S_UNIFORM;
65 static ulong AnmNotAllScaleUniform(ulong attr) {
66 return attr & ~(ATTR_ALL_S_UNIFORM | ATTR_ALL_S_ONE);
69 static bool IsScaleOne(ulong attr) {
70 return (attr & ATTR_S_ONE) ? true :
false;
72 static ulong AnmScaleOne(ulong attr) {
73 return attr | ATTR_S_ONE;
75 static ulong AnmNotScaleOne(ulong attr) {
76 return attr & ~(ATTR_S_ONE | ATTR_ALL_S_ONE);
79 static bool IsAllScaleOne(ulong attr) {
80 return (attr & ATTR_ALL_S_ONE) ? true :
false;
82 static ulong AnmAllScaleOne(ulong attr) {
83 return attr | ATTR_ALL_S_ONE;
85 static ulong AnmNotAllScaleOne(ulong attr) {
86 return attr & ~ATTR_ALL_S_ONE;
89 static ulong GetRootMtxAttr() {
90 return ATTR_S_UNIFORM | ATTR_ALL_S_UNIFORM | ATTR_S_ONE |