1 /*---------------------------------------------------------------------------* 2 Project: Dolphin GX library 3 File: GXLighting.h 4 5 Copyright 1998- 2002 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: GXLighting.h,v $ 14 Revision 1.2 2006/02/04 11:56:46 hashida 15 (none) 16 17 Revision 1.1.1.1 2005/12/29 06:53:28 hiratsu 18 Initial import. 19 20 Revision 1.1.1.1 2005/05/12 02:41:07 yasuh-to 21 Ported from dolphin source tree. 22 23 24 10 2002/07/24 9:07 Hirose 25 Resolved version conflicts. 26 27 10 2002/04/09 15:15 Hirose 28 const type specifier support. (worked by hiratsu@IRD) 29 30 9 2001/10/03 9:33a Hirose 31 Fixed GXInitSpecularDirHAv macro again. 32 33 8 2000/08/21 4:44p Hirose 34 Fixed GXInitSpecularDirHAv macro 35 36 7 2000/08/21 11:36a Hirose 37 Deleted GXInitSpecularHA / added GXInitSpecluarDirHA instead 38 39 6 2000/05/12 6:04p Hirose 40 Changed definition of GXInit*v macros 41 42 5 2000/04/10 3:09p Alligator 43 Removed GXInitSpecularHAv macro 44 45 4 2000/02/12 5:16p Alligator 46 Integrated ArtX source tree changes 47 48 3 2000/02/01 7:22p Alligator 49 Second GX update from ArtX 50 51 2 1999/12/13 4:54p Hirose 52 Added GXInitLightShininess macro 53 54 9 1999/11/17 4:14p Hirose 55 Added macros for vector type 56 57 8 1999/10/29 3:35p Hirose 58 Replaced GXSetChannels(GXChannelID) to GXSetNumChans(u8) 59 60 7 1999/10/28 4:20p Hirose 61 Added GXSetChannels 62 63 6 1999/10/18 3:49p Hirose 64 Changed the type of light_mask on GXSetChanCtrl to u32 65 66 5 1999/09/30 10:40p Yasu 67 Renamed some GX functions and enums 68 69 4 1999/09/09 1:22p Hirose 70 Added GXInitLightSpot() and GXInitLightDistAttn() 71 72 3 1998/01/05 3:02p Ryan 73 Routine update of header file to match man pages 74 75 2 1999/07/28 4:07p Alligator 76 Updated header files and emulator for hw changes 77 78 1 1999/07/14 4:20p Alligator 79 Split gx.h into individual header files for each major section of API 80 $NoKeywords: $ 81 *---------------------------------------------------------------------------*/ 82 83 #ifndef __GXLIGHTING_H__ 84 #define __GXLIGHTING_H__ 85 86 #ifdef __cplusplus 87 extern "C" { 88 #endif 89 90 /*---------------------------------------------------------------------------*/ 91 #include <revolution/types.h> 92 #include <revolution/gx/GXEnum.h> 93 #include <revolution/gx/GXStruct.h> 94 95 /*---------------------------------------------------------------------------*/ 96 void GXInitLightAttn( 97 GXLightObj* lt_obj, 98 f32 a0, 99 f32 a1, 100 f32 a2, 101 f32 k0, 102 f32 k1, 103 f32 k2 ); 104 105 void GXInitLightAttnA ( GXLightObj *lt_obj, f32 a0, f32 a1, f32 a2); 106 void GXInitLightAttnK ( GXLightObj *lt_obj, f32 k0, f32 k1, f32 k2 ); 107 108 void GXInitLightSpot( 109 GXLightObj* lt_obj, 110 f32 cutoff, 111 GXSpotFn spot_func ); 112 113 void GXInitLightDistAttn( 114 GXLightObj* lt_obj, 115 f32 ref_distance, 116 f32 ref_brightness, 117 GXDistAttnFn dist_func ); 118 119 120 void GXInitLightPos ( GXLightObj* lt_obj, f32 x, f32 y, f32 z ); 121 void GXInitLightColor ( GXLightObj* lt_obj, GXColor color ); 122 void GXLoadLightObjImm ( const GXLightObj* lt_obj, GXLightID light ); 123 void GXLoadLightObjIndx ( u32 lt_obj_indx, GXLightID light ); 124 void GXSetChanAmbColor ( GXChannelID chan, GXColor amb_color ); 125 void GXSetChanMatColor ( GXChannelID chan, GXColor mat_color ); 126 void GXSetNumChans ( u8 nChans ); 127 128 void GXInitLightDir ( GXLightObj* lt_obj, f32 nx, f32 ny, f32 nz ); 129 130 // New functions to set light direction and half-angle. 131 void GXInitSpecularDir ( GXLightObj* lt_obj, f32 nx, f32 ny, f32 nz ); 132 void GXInitSpecularDirHA( 133 GXLightObj* lt_obj, 134 f32 nx, 135 f32 ny, 136 f32 nz, 137 f32 hx, 138 f32 hy, 139 f32 hz ); 140 141 void GXSetChanCtrl( 142 GXChannelID chan, 143 GXBool enable, 144 GXColorSrc amb_src, 145 GXColorSrc mat_src, 146 u32 light_mask, 147 GXDiffuseFn diff_fn, 148 GXAttnFn attn_fn ); 149 150 /*---------------------------------------------------------------------------*/ 151 // Convenient Macros 152 153 #define GXInitLightPosv(lo,vec) \ 154 (GXInitLightPos((lo), *(f32*)(vec), *((f32*)(vec)+1), *((f32*)(vec)+2))) 155 156 #define GXInitLightDirv(lo,vec) \ 157 (GXInitLightDir((lo), *(f32*)(vec), *((f32*)(vec)+1), *((f32*)(vec)+2))) 158 159 #define GXInitSpecularDirv(lo,vec) \ 160 (GXInitSpecularDir((lo), *(f32*)(vec), *((f32*)(vec)+1), *((f32*)(vec)+2))) 161 162 #define GXInitSpecularDirHAv(lo,vec0,vec1) \ 163 (GXInitSpecularDirHA((lo), \ 164 *(f32*)(vec0), *((f32*)(vec0)+1), *((f32*)(vec0)+2), \ 165 *(f32*)(vec1), *((f32*)(vec1)+1), *((f32*)(vec1)+2))) 166 167 #define GXInitLightShininess(lobj, shininess) \ 168 (GXInitLightAttn(lobj, 0.0F, 0.0F, 1.0F, \ 169 (shininess)/2.0F, 0.0F, \ 170 1.0F-(shininess)/2.0F )) 171 172 173 /*---------------------------------------------------------------------------*/ 174 #ifdef __cplusplus 175 } 176 #endif 177 178 #endif // __GXLIGHTING_H__ 179