static void get_light_modelviewprojection (const CoglMatrix *model_transform, RutEntity *light, const CoglMatrix *light_projection, CoglMatrix *light_mvp) { const CoglMatrix *light_transform; CoglMatrix light_view; /* TODO: cache the bias * light_projection * light_view matrix! */ /* Move the unit engine from [-1,1] to [0,1], column major order */ float bias[16] = { .5f, .0f, .0f, .0f, .0f, .5f, .0f, .0f, .0f, .0f, .5f, .0f, .5f, .5f, .5f, 1.f }; light_transform = rut_entity_get_transform (light); cogl_matrix_get_inverse (light_transform, &light_view); cogl_matrix_init_from_array (light_mvp, bias); cogl_matrix_multiply (light_mvp, light_mvp, light_projection); cogl_matrix_multiply (light_mvp, light_mvp, &light_view); cogl_matrix_multiply (light_mvp, light_mvp, model_transform); }
static void get_modelview_matrix (RutEntity *camera, RutEntity *entity, CoglMatrix *modelview) { RutCamera *camera_component = rut_entity_get_component (camera, RUT_COMPONENT_TYPE_CAMERA); *modelview = *rut_camera_get_view_transform (camera_component); cogl_matrix_multiply (modelview, modelview, rut_entity_get_transform (entity)); }