1 /*---------------------------------------------------------------------------* 2 Project: Dolphin GD library 3 File: GDTransform.h 4 5 Copyright 2001 Nintendo. All rights reserved. 6 7 These coded instructions, statements, and computer programs contain 8 proprietary information of Nintendo of America Inc. and/or Nintendo 9 Company Ltd., and are protected by Federal copyright law. They may 10 not be disclosed to third parties or copied or duplicated in any form, 11 in whole or in part, without the prior written consent of Nintendo. 12 13 $Log: GDTransform.h,v $ 14 Revision 1.2 2006/02/04 11:56:46 hashida 15 (none) 16 17 Revision 1.1.1.1 2005/05/12 02:41:07 yasuh-to 18 Ported from dolphin source tree. 19 20 21 4 2004/02/09 9:45 Hirose 22 Parenthesized 'mtxId' in __*MtxToXFMem macros for safety. 23 24 3 2002/08/05 19:49 Hirose 25 Const type specifier support. 26 27 2 2002/05/30 13:39 Hirose 28 Added GDSetProjection. 29 30 1 2001/09/12 1:55p Carl 31 Initial revision of GD: Graphics Display List Library. 32 33 $NoKeywords: $ 34 *---------------------------------------------------------------------------*/ 35 36 #ifndef __GDTRANSFORM_H__ 37 #define __GDTRANSFORM_H__ 38 39 /*---------------------------------------------------------------------------*/ 40 #include <revolution/types.h> 41 #include <revolution/gx/GXEnum.h> 42 /*---------------------------------------------------------------------------*/ 43 44 #ifdef __cplusplus 45 extern "C" { 46 #endif 47 48 // Define some XF memory spaces: 49 #define __XFMemPosMtx 0x0000 50 #define __XFMemNrmMtx 0x0400 51 #define __XFMemDTTMtx 0x0500 52 53 // Define conversions from GX enums to XF memory spaces: 54 #define __PosMtxToXFMem(mtxId) ((u16)(__XFMemPosMtx + (mtxId) * 4)) 55 #define __TexMtxToXFMem(mtxId) ((u16)(__XFMemPosMtx + (mtxId) * 4)) 56 #define __NrmMtxToXFMem(mtxId) ((u16)(__XFMemNrmMtx + (mtxId) * 3)) 57 #define __DTTMtxToXFMem(mtxId) ((u16)(__XFMemDTTMtx + ((mtxId)-GX_PTTEXMTX0) * 4)) 58 59 /*---------------------------------------------------------------------------*/ 60 61 void GDLoadPosMtxImm ( const f32 mtx[3][4], u32 id ); 62 void GDLoadPosMtxIndx ( u16 mtx_indx, u32 id ); 63 void GDLoadNrmMtxImm ( const f32 mtx[3][4], u32 id ); 64 void GDLoadNrmMtxImm3x3 ( const f32 mtx[3][3], u32 id ); 65 void GDLoadNrmMtxIndx3x3 ( u16 mtx_indx, u32 id ); 66 void GDLoadTexMtxImm ( const f32 mtx[][4], u32 id, GXTexMtxType type ); 67 void GDLoadTexMtxIndx ( u16 mtx_indx, u32 id, GXTexMtxType type ); 68 69 void GDSetCurrentMtx ( u32 pn, u32 t0, u32 t1, u32 t2, u32 t3, 70 u32 t4, u32 t5, u32 t6, u32 t7 ); 71 72 void GDSetProjection ( const f32 mtx[4][4], GXProjectionType type ); 73 74 75 /*---------------------------------------------------------------------------*/ 76 77 #define MATIDX_REG_A_POSIDX_SHIFT 0 78 #define MATIDX_REG_A_TEX0IDX_SHIFT 6 79 #define MATIDX_REG_A_TEX1IDX_SHIFT 12 80 #define MATIDX_REG_A_TEX2IDX_SHIFT 18 81 #define MATIDX_REG_A_TEX3IDX_SHIFT 24 82 #define MATIDX_REG_A(posIdx, tex0Idx, tex1Idx, tex2Idx, tex3Idx) \ 83 ((((unsigned long)(posIdx)) << MATIDX_REG_A_POSIDX_SHIFT) | \ 84 (((unsigned long)(tex0Idx)) << MATIDX_REG_A_TEX0IDX_SHIFT) | \ 85 (((unsigned long)(tex1Idx)) << MATIDX_REG_A_TEX1IDX_SHIFT) | \ 86 (((unsigned long)(tex2Idx)) << MATIDX_REG_A_TEX2IDX_SHIFT) | \ 87 (((unsigned long)(tex3Idx)) << MATIDX_REG_A_TEX3IDX_SHIFT)) 88 89 #define MATIDX_REG_B_TEX4IDX_SHIFT 0 90 #define MATIDX_REG_B_TEX5IDX_SHIFT 6 91 #define MATIDX_REG_B_TEX6IDX_SHIFT 12 92 #define MATIDX_REG_B_TEX7IDX_SHIFT 18 93 #define MATIDX_REG_B(tex4Idx, tex5Idx, tex6Idx, tex7Idx) \ 94 ((((unsigned long)(tex4Idx)) << MATIDX_REG_B_TEX4IDX_SHIFT) | \ 95 (((unsigned long)(tex5Idx)) << MATIDX_REG_B_TEX5IDX_SHIFT) | \ 96 (((unsigned long)(tex6Idx)) << MATIDX_REG_B_TEX6IDX_SHIFT) | \ 97 (((unsigned long)(tex7Idx)) << MATIDX_REG_B_TEX7IDX_SHIFT)) 98 99 #define CP_MATINDEX_A 0x30 100 #define CP_MATINDEX_B 0x40 101 102 #define XF_MATINDEX_A 0x1018 103 #define XF_MATINDEX_B 0x1019 104 105 #define XF_PROJECTION_ID 0x1020 106 107 /*---------------------------------------------------------------------------*/ 108 #ifdef __cplusplus 109 } 110 #endif 111 112 #endif // __GDTRANSFORM_H__ 113