Macro

# マクロ

## 説明

GX_FX16PAIR(a, b) | fx16型の固定小数２つを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