mirror of
https://github.com/libretro/RetroArch
synced 2025-03-28 19:20:35 +00:00
Cleanup D3D8/D3D9 matrix functions
This commit is contained in:
parent
e061e7028b
commit
275e58c6ce
@ -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)
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user