| 2210 | //Modify the WorldProject matrix, used by Kirby & SSB //Corn |
| 2211 | |
| 2212 | void BaseRenderer::InsertMatrix(u32 w0, u32 w1) |
| 2213 | { |
| 2214 | mWPmodified = true; //Signal that Worldproject matrix is changed |
| 2215 | |
| 2216 | //Make sure WP matrix is up to date before changing WP matrix |
| 2217 | if( !mWorldProjectValid ) |
| 2218 | { |
| 2219 | mWorldProject = mModelViewStack[mModelViewTop] * mProjectionMat; |
| 2220 | mWorldProjectValid = true; |
| 2221 | } |
| 2222 | |
| 2223 | u32 x {(w0 & 0x1F) >> 1}; |
| 2224 | u32 y {x >> 2}; |
| 2225 | x &= 3; |
| 2226 | |
| 2227 | if (w0 & 0x20) |
| 2228 | { |
| 2229 | //Change fraction part |
| 2230 | mWorldProject.m[y][x] = (f32)(s32)mWorldProject.m[y][x] + ((f32)(w1 >> 16) / 65536.0f); |
| 2231 | mWorldProject.m[y][x+1] = (f32)(s32)mWorldProject.m[y][x+1] + ((f32)(w1 & 0xFFFF) / 65536.0f); |
| 2232 | } |
| 2233 | else |
| 2234 | { |
| 2235 | //Change integer part |
| 2236 | mWorldProject.m[y][x] = (f32)(s16)(w1 >> 16); |
| 2237 | mWorldProject.m[y][x+1] = (f32)(s16)(w1 & 0xFFFF); |
| 2238 | } |
| 2239 | #ifdef DAEDALUS_DEBUG_DISPLAYLIST |
| 2240 | DL_PF( |
| 2241 | " %#+12.5f %#+12.5f %#+12.5f %#+12.5f\n" |
| 2242 | " %#+12.5f %#+12.5f %#+12.5f %#+12.5f\n" |
| 2243 | " %#+12.5f %#+12.5f %#+12.5f %#+12.5f\n" |
| 2244 | " %#+12.5f %#+12.5f %#+12.5f %#+12.5f\n", |
| 2245 | mWorldProject.m[0][0], mWorldProject.m[0][1], mWorldProject.m[0][2], mWorldProject.m[0][3], |
| 2246 | mWorldProject.m[1][0], mWorldProject.m[1][1], mWorldProject.m[1][2], mWorldProject.m[1][3], |
| 2247 | mWorldProject.m[2][0], mWorldProject.m[2][1], mWorldProject.m[2][2], mWorldProject.m[2][3], |
| 2248 | mWorldProject.m[3][0], mWorldProject.m[3][1], mWorldProject.m[3][2], mWorldProject.m[3][3]); |
| 2249 | #endif |
| 2250 | } |
| 2251 | |
| 2252 | |
| 2253 | //Replaces the WorldProject matrix //Corn |
no outgoing calls
no test coverage detected