void gr_reset_matrices() { vm_matrix4_set_identity(&gr_projection_matrix); vm_matrix4_set_identity(&gr_last_projection_matrix); vm_matrix4_set_identity(&gr_view_matrix); vm_matrix4_set_identity(&gr_last_view_matrix); vm_matrix4_set_identity(&gr_model_view_matrix); gr_model_matrix_stack.clear(); }
void gr_end_view_matrix() { Assert(modelview_matrix_depth == 2); gr_model_matrix_stack.clear(); vm_matrix4_set_identity(&gr_view_matrix); vm_matrix4_set_identity(&gr_model_view_matrix); modelview_matrix_depth = 1; htl_view_matrix_set = false; gr_env_texture_matrix_set = false; }
void gr_opengl_end_view_matrix() { Assert(GL_modelview_matrix_depth == 2); GL_model_matrix_stack.clear(); vm_matrix4_set_identity(&GL_view_matrix); vm_matrix4_set_identity(&GL_model_view_matrix); GL_modelview_matrix_depth = 1; GL_htl_view_matrix_set = 0; GL_env_texture_matrix_set = false; }
// set a view and projection matrix for a 2D element // TODO: this probably needs to accept values void gr_set_2d_matrix(/*int x, int y, int w, int h*/) { // don't bother with this if we aren't even going to need it if (!gr_htl_projection_matrix_set) { return; } Assert( htl_2d_matrix_set == 0 ); Assert( htl_2d_matrix_depth == 0 ); // the viewport needs to be the full screen size since glOrtho() is relative to it gr_set_viewport(0, 0, gr_screen.max_w, gr_screen.max_h); gr_last_projection_matrix = gr_projection_matrix; // the top and bottom positions are reversed on purpose, but RTT needs them the other way if (gr_screen.rendering_to_texture != -1) { create_orthographic_projection_matrix(&gr_projection_matrix, 0, i2fl(gr_screen.max_w), 0, i2fl(gr_screen.max_h), -1, 1); } else { create_orthographic_projection_matrix(&gr_projection_matrix, 0, i2fl(gr_screen.max_w), i2fl(gr_screen.max_h), 0, -1, 1); } matrix4 identity_mat; vm_matrix4_set_identity(&identity_mat); gr_model_matrix_stack.push_and_replace(identity_mat); gr_last_view_matrix = gr_view_matrix; gr_view_matrix = identity_mat; vm_matrix4_x_matrix4(&gr_model_view_matrix, &gr_view_matrix, &identity_mat); htl_2d_matrix_set = true; htl_2d_matrix_depth++; }