マクロ

説明

GX_FX16PAIR(a, b) fx16型の固定小数2つをu32型にパックします。
GX_RGB(r, g, b) それぞれ5bitのrgb値をGXRgb型にパックします。
GX_RGBA(r, g, b, a) それぞれ5bitのrgb値と1ビットのα値をGXRgba型にパックします。
GX_VECFX10(x, y, z) 法線や光線のベクトル情報をVecFx10型にパックします。
GX_VECVTX10(x, y, z) s3.6の3次元ベクトルをVecVtx10型にパックします。
GX_ST(s, t) テクスチャ座標をパックします。
GX_COMP4x4_PLTT_IDX(image) COMP4x4テクスチャのイメージアドレスからパレットインデックスのアドレスを計算します。

マクロの定義

#define GX_FX16PAIR(a, b)              ((u32)((u32)(u16)(a) | ((u32)(u16)(b) << 16)))

#define GX_RGB(r, g, b)           ((GXRgb)(((r) << GX_RGB_R_SHIFT) | \
                                                 ((g) << GX_RGB_G_SHIFT) | \
                                                 ((b) << GX_RGB_B_SHIFT)))

#define GX_RGBA(r, g, b, a)       ((GXRgba)(((r) << GX_RGBA_R_SHIFT) | \
                                                  ((g) << GX_RGBA_G_SHIFT) | \
                                                  ((b) << GX_RGBA_B_SHIFT) | \
                                                  ((a) << GX_RGBA_A_SHIFT)))

#define GX_VECFX10(x, y, z) \
    ((VecFx10)(((((x) >> (FX32_DEC_SIZE - GX_FX10_DEC_SIZE)) & GX_FX10_MASK) << GX_VEC_FX10_X_SHIFT) | \
               ((((y) >> (FX32_DEC_SIZE - GX_FX10_DEC_SIZE)) & GX_FX10_MASK) << GX_VEC_FX10_Y_SHIFT) | \
               ((((z) >> (FX32_DEC_SIZE - GX_FX10_DEC_SIZE)) & GX_FX10_MASK) << GX_VEC_FX10_Z_SHIFT)))

#define GX_VECVTX10(x, y, z) \
    ((VecVtx10) (((((x) >> (FX32_DEC_SIZE - GX_VTX10_DEC_SIZE)) & GX_VTX10_MASK) << GX_VEC_VTX10_X_SHIFT) | \
                 ((((y) >> (FX32_DEC_SIZE - GX_VTX10_DEC_SIZE)) & GX_VTX10_MASK) << GX_VEC_VTX10_Y_SHIFT) | \
                 ((((z) >> (FX32_DEC_SIZE - GX_VTX10_DEC_SIZE)) & GX_VTX10_MASK) << GX_VEC_VTX10_Z_SHIFT)))

#define GX_FX16ST(x)                   ((s16)((x) >> 8))
// s: fx32/fx16, t: fx32/fx16
#define GX_ST(s, t)                    ((GXSt)((u16)GX_FX16ST(s) | ((u16)GX_FX16ST(t) << 16)))

#define GX_COMP4x4_PLTT_IDX(image) \
    ((u32)(0x20000 + (((image) & 0x1ffff) >> 1) + (((image) & 0x40000) >> 2)))

履歴

Ver. 2004/02/23