diff --git a/gfx/common/d3d_common.c b/gfx/common/d3d_common.c index 8df5ac2cfc..fa7a9526ca 100644 --- a/gfx/common/d3d_common.c +++ b/gfx/common/d3d_common.c @@ -25,7 +25,7 @@ #define D3D_TEXTURE_FILTER_LINEAR 2 #define D3D_TEXTURE_FILTER_POINT 1 -void *d3d_matrix_transpose(void *_pout, const void *_pm) +void d3d_matrix_transpose(void *_pout, const void *_pm) { unsigned i,j; struct d3d_matrix *pout = (struct d3d_matrix*)_pout; @@ -36,51 +36,42 @@ void *d3d_matrix_transpose(void *_pout, const void *_pm) for (j = 0; j < 4; j++) pout->m[i][j] = pm->m[j][i]; } - return pout; } -void *d3d_matrix_identity(void *_pout) +void d3d_matrix_identity(void *_pout) { struct d3d_matrix *pout = (struct d3d_matrix*)_pout; - if ( !pout ) - return NULL; - + pout->m[0][0] = 1.0f; pout->m[0][1] = 0.0f; pout->m[0][2] = 0.0f; pout->m[0][3] = 0.0f; pout->m[1][0] = 0.0f; + pout->m[1][1] = 1.0f; pout->m[1][2] = 0.0f; pout->m[1][3] = 0.0f; pout->m[2][0] = 0.0f; pout->m[2][1] = 0.0f; + pout->m[2][2] = 1.0f; pout->m[2][3] = 0.0f; pout->m[3][0] = 0.0f; pout->m[3][1] = 0.0f; pout->m[3][2] = 0.0f; - pout->m[0][0] = 1.0f; - pout->m[1][1] = 1.0f; - pout->m[2][2] = 1.0f; pout->m[3][3] = 1.0f; - return pout; } -void *d3d_matrix_ortho_off_center_lh(void *_pout, +void d3d_matrix_ortho_off_center_lh(void *_pout, float l, float r, float b, float t, float zn, float zf) { struct d3d_matrix *pout = (struct d3d_matrix*)_pout; - - d3d_matrix_identity(pout); - pout->m[0][0] = 2.0f / (r - l); pout->m[1][1] = 2.0f / (t - b); pout->m[2][2] = 1.0f / (zf -zn); pout->m[3][0] = -1.0f -2.0f *l / (r - l); pout->m[3][1] = 1.0f + 2.0f * t / (b - t); pout->m[3][2] = zn / (zn -zf); - return pout; } -void *d3d_matrix_multiply(void *_pout, +void d3d_matrix_multiply(void *_pout, const void *_pm1, const void *_pm2) { unsigned i,j; @@ -91,24 +82,20 @@ void *d3d_matrix_multiply(void *_pout, for (i = 0; i < 4; i++) { for (j = 0; j < 4; j++) - pout->m[i][j] = pm1->m[i][0] * - pm2->m[0][j] + pm1->m[i][1] * pm2->m[1][j] + - pm1->m[i][2] * pm2->m[2][j] + - pm1->m[i][3] * pm2->m[3][j]; + pout->m[i][j] = pm1->m[i][0] * pm2->m[0][j] + + pm1->m[i][1] * pm2->m[1][j] + + pm1->m[i][2] * pm2->m[2][j] + + pm1->m[i][3] * pm2->m[3][j]; } - return pout; } -void *d3d_matrix_rotation_z(void *_pout, float angle) +void d3d_matrix_rotation_z(void *_pout, float angle) { struct d3d_matrix *pout = (struct d3d_matrix*)_pout; - - d3d_matrix_identity(pout); pout->m[0][0] = cos(angle); pout->m[1][1] = cos(angle); pout->m[0][1] = sin(angle); pout->m[1][0] = -sin(angle); - return pout; } int32_t d3d_translate_filter(unsigned type) diff --git a/gfx/common/d3d_common.h b/gfx/common/d3d_common.h index ad8d83b879..4591c96a70 100644 --- a/gfx/common/d3d_common.h +++ b/gfx/common/d3d_common.h @@ -90,17 +90,17 @@ typedef struct Vertex /* Clear target surface */ #define D3D_COMM_CLEAR_TARGET 0x00000001l -void *d3d_matrix_transpose(void *_pout, const void *_pm); +void d3d_matrix_transpose(void *_pout, const void *_pm); -void *d3d_matrix_identity(void *_pout); +void d3d_matrix_identity(void *_pout); -void *d3d_matrix_ortho_off_center_lh(void *_pout, +void d3d_matrix_ortho_off_center_lh(void *_pout, float l, float r, float b, float t, float zn, float zf); -void *d3d_matrix_multiply(void *_pout, +void d3d_matrix_multiply(void *_pout, const void *_pm1, const void *_pm2); -void *d3d_matrix_rotation_z(void *_pout, float angle); +void d3d_matrix_rotation_z(void *_pout, float angle); int32_t d3d_translate_filter(unsigned type); diff --git a/gfx/drivers/d3d8.c b/gfx/drivers/d3d8.c index 7d29534c51..735531b937 100644 --- a/gfx/drivers/d3d8.c +++ b/gfx/drivers/d3d8.c @@ -859,7 +859,9 @@ static void d3d8_set_viewport(void *data, d3d->final_viewport.MinZ = 0.0f; d3d->final_viewport.MaxZ = 0.0f; + d3d_matrix_identity(&ortho); d3d_matrix_ortho_off_center_lh(&ortho, 0, 1, 0, 1, 0.0f, 1.0f); + d3d_matrix_identity(&rot); d3d_matrix_rotation_z(&rot, d3d->dev_rotation * (M_PI / 2.0)); d3d_matrix_multiply(&proj, &ortho, &rot); d3d_matrix_transpose(&d3d->mvp, &ortho); @@ -949,6 +951,7 @@ static bool d3d8_initialize(d3d8_video_t *d3d, const video_info_t *info) if (!d3d->menu_display.buffer) return false; + d3d_matrix_identity(&d3d->mvp_transposed); d3d_matrix_ortho_off_center_lh(&d3d->mvp_transposed, 0, 1, 0, 1, 0, 1); d3d_matrix_transpose(&d3d->mvp, &d3d->mvp_transposed); diff --git a/gfx/drivers/d3d9cg.c b/gfx/drivers/d3d9cg.c index c633ce3cdc..c48e2d6549 100644 --- a/gfx/drivers/d3d9cg.c +++ b/gfx/drivers/d3d9cg.c @@ -901,7 +901,9 @@ static void d3d9_cg_renderchain_calc_and_set_shader_mvp( struct d3d_matrix proj, ortho, rot, matrix; CGparameter cgp = cgGetNamedParameter(data, "modelViewProj"); + d3d_matrix_identity(&ortho); d3d_matrix_ortho_off_center_lh(&ortho, 0, vp_width, 0, vp_height, 0, 1); + d3d_matrix_identity(&rot); d3d_matrix_rotation_z(&rot, rotation * (D3D_PI / 2.0)); d3d_matrix_multiply(&proj, &ortho, &rot); d3d_matrix_transpose(&matrix, &proj); @@ -1465,6 +1467,7 @@ static bool d3d9_cg_initialize(d3d9_video_t *d3d, const video_info_t *info) if (!d3d->menu_display.buffer) return false; + d3d_matrix_identity(&d3d->mvp_transposed); d3d_matrix_ortho_off_center_lh(&d3d->mvp_transposed, 0, 1, 0, 1, 0, 1); d3d_matrix_transpose(&d3d->mvp, &d3d->mvp_transposed); diff --git a/gfx/drivers/d3d9hlsl.c b/gfx/drivers/d3d9hlsl.c index 388d7e9e70..a36d512c09 100644 --- a/gfx/drivers/d3d9hlsl.c +++ b/gfx/drivers/d3d9hlsl.c @@ -354,8 +354,10 @@ static void hlsl_d3d9_renderchain_calc_and_set_shader_mvp( { struct d3d_matrix proj, ortho, rot, matrix; + d3d_matrix_identity(&ortho); d3d_matrix_ortho_off_center_lh(&ortho, 0, vp_width, 0, vp_height, 0, 1); + d3d_matrix_identity(&rot); d3d_matrix_rotation_z(&rot, rotation * (D3D_PI / 2.0)); d3d_matrix_multiply(&proj, &ortho, &rot); d3d_matrix_transpose(&matrix, &proj); @@ -1031,6 +1033,7 @@ static bool d3d9_hlsl_initialize( if (!d3d->menu_display.buffer) return false; + d3d_matrix_identity(&d3d->mvp_transposed); d3d_matrix_ortho_off_center_lh(&d3d->mvp_transposed, 0, 1, 0, 1, 0, 1); d3d_matrix_transpose(&d3d->mvp, &d3d->mvp_transposed);