static void update_viewproj_matrix(struct gs_device *device) { struct gs_shader *vs = device->cur_vertex_shader; struct matrix4 cur_proj; gs_matrix_get(&device->cur_view); matrix4_copy(&cur_proj, &device->cur_proj); if (device->cur_fbo) { cur_proj.x.y = -cur_proj.x.y; cur_proj.y.y = -cur_proj.y.y; cur_proj.z.y = -cur_proj.z.y; cur_proj.t.y = -cur_proj.t.y; glFrontFace(GL_CW); } else { glFrontFace(GL_CCW); } gl_success("glFrontFace"); matrix4_mul(&device->cur_viewproj, &device->cur_view, &cur_proj); matrix4_transpose(&device->cur_viewproj, &device->cur_viewproj); if (vs->viewproj) gs_shader_set_matrix4(vs->viewproj, &device->cur_viewproj); }
static void update_viewproj_matrix(struct gs_device *device) { struct gs_shader *vs = device->cur_vertex_shader; gs_matrix_get(&device->cur_view); matrix4_mul(&device->cur_viewproj, &device->cur_view, &device->cur_proj); matrix4_transpose(&device->cur_viewproj, &device->cur_viewproj); if (vs->viewproj) gs_shader_set_matrix4(vs->viewproj, &device->cur_viewproj); }
void gs_device::UpdateViewProjMatrix() { gs_matrix_get(&curViewMatrix); /* negate Z col of the view matrix for right-handed coordinate system */ curViewMatrix.x.z = -curViewMatrix.x.z; curViewMatrix.y.z = -curViewMatrix.y.z; curViewMatrix.z.z = -curViewMatrix.z.z; curViewMatrix.t.z = -curViewMatrix.t.z; matrix4_mul(&curViewProjMatrix, &curViewMatrix, &curProjMatrix); matrix4_transpose(&curViewProjMatrix, &curViewProjMatrix); if (curVertexShader->viewProj) gs_shader_set_matrix4(curVertexShader->viewProj, &curViewProjMatrix); }