static matrix4x4_t GetWorldToViewMatrix() { void ML_ModelViewMatrix(float *modelview, const vec3_t viewangles, const vec3_t vieworg, qboolean zup); matrix4x4_t worldToViewMatrixT, worldToViewMatrix; ML_ModelViewMatrix( &worldToViewMatrixT.m[0][0], r_refdef.viewangles, r_refdef.vieworg, true); // ML is OGL matrix style, here something sane is needed Matrix4x4_Transpose( &worldToViewMatrix, &worldToViewMatrixT ); return worldToViewMatrix; }
static matrix4x4_t GetWorldToLightMatrix( const R_ShaderLight *light ) { void ML_ModelViewMatrix(float *modelview, const vec3_t viewangles, const vec3_t vieworg, qboolean zup); matrix4x4_t worldToLightMatrixT, worldToLightMatrix; ML_ModelViewMatrix( &worldToLightMatrixT.m[0][0], light->angles, light->origin, false); // ML is OGL matrix style, here something sane is needed Matrix4x4_Transpose( &worldToLightMatrix, &worldToLightMatrixT ); return worldToLightMatrix; }
/** * @brief */ void R_MatricesChanged_default(void) { r_default_program_t *p = &r_default_program; if (r_state.active_program->matrix_dirty[R_MATRIX_MODELVIEW]) { // recalculate normal matrix if the modelview has changed. static matrix4x4_t normalMatrix; R_GetMatrix(R_MATRIX_MODELVIEW, &normalMatrix); Matrix4x4_Invert_Full(&normalMatrix, &normalMatrix); Matrix4x4_Transpose(&normalMatrix, &normalMatrix); R_ProgramParameterMatrix4fv(&p->normal_mat, (const GLfloat *) normalMatrix.m); } }