(XMB) Start using custom typedefs instead of GL ones for menu drivers

This commit is contained in:
twinaphex 2015-07-12 06:12:39 +02:00
parent c697923eb6
commit ccafdf8cc4
1 changed files with 33 additions and 30 deletions

View File

@ -48,6 +48,9 @@
#define XMB_DELAY 10 #define XMB_DELAY 10
#endif #endif
typedef float GRfloat;
typedef unsigned int GRuint;
typedef struct typedef struct
{ {
float alpha; float alpha;
@ -55,8 +58,8 @@ typedef struct
float zoom; float zoom;
float x; float x;
float y; float y;
GLuint icon; GRuint icon;
GLuint content_icon; GRuint content_icon;
} xmb_node_t; } xmb_node_t;
enum enum
@ -96,7 +99,7 @@ enum
struct xmb_texture_item struct xmb_texture_item
{ {
GLuint id; GRuint id;
}; };
typedef struct xmb_handle typedef struct xmb_handle
@ -110,7 +113,7 @@ typedef struct xmb_handle
char box_message[PATH_MAX_LENGTH]; char box_message[PATH_MAX_LENGTH];
float x; float x;
float alpha; float alpha;
GLuint boxart; GRuint boxart;
float boxart_size; float boxart_size;
struct struct
@ -225,14 +228,14 @@ typedef struct xmb_handle
gfx_font_raster_block_t raster_block; gfx_font_raster_block_t raster_block;
} xmb_handle_t; } xmb_handle_t;
static const GLfloat rmb_vertex[] = { static const GRfloat rmb_vertex[] = {
0, 0, 0, 0,
1, 0, 1, 0,
0, 1, 0, 1,
1, 1, 1, 1,
}; };
static const GLfloat rmb_tex_coord[] = { static const GRfloat rmb_tex_coord[] = {
0, 1, 0, 1,
1, 1, 1, 1,
0, 0, 0, 0,
@ -339,12 +342,12 @@ static void xmb_draw_icon_end(void)
} }
static void xmb_draw_icon(gl_t *gl, xmb_handle_t *xmb, static void xmb_draw_icon(gl_t *gl, xmb_handle_t *xmb,
GLuint texture, float x, float y, GRuint texture, float x, float y,
float alpha, float rotation, float scale_factor) float alpha, float rotation, float scale_factor)
{ {
struct gfx_coords coords; struct gfx_coords coords;
unsigned width, height; unsigned width, height;
GLfloat color[16]; GRfloat color[16];
math_matrix_4x4 mymat, mrot, mscal; math_matrix_4x4 mymat, mrot, mscal;
if (alpha > xmb->alpha) if (alpha > xmb->alpha)
@ -379,6 +382,12 @@ static void xmb_draw_icon(gl_t *gl, xmb_handle_t *xmb,
color[14] = 1.0f; color[14] = 1.0f;
color[15] = alpha; color[15] = alpha;
matrix_4x4_rotate_z(&mrot, rotation);
matrix_4x4_multiply(&mymat, &mrot, &gl->mvp_no_rot);
matrix_4x4_scale(&mscal, scale_factor, scale_factor, 1);
matrix_4x4_multiply(&mymat, &mscal, &mymat);
glViewport(x, height - y, xmb->icon.size, xmb->icon.size); glViewport(x, height - y, xmb->icon.size, xmb->icon.size);
coords.vertices = 4; coords.vertices = 4;
@ -387,23 +396,17 @@ static void xmb_draw_icon(gl_t *gl, xmb_handle_t *xmb,
coords.lut_tex_coord = rmb_tex_coord; coords.lut_tex_coord = rmb_tex_coord;
coords.color = color; coords.color = color;
matrix_4x4_rotate_z(&mrot, rotation);
matrix_4x4_multiply(&mymat, &mrot, &gl->mvp_no_rot);
matrix_4x4_scale(&mscal, scale_factor, scale_factor, 1);
matrix_4x4_multiply(&mymat, &mscal, &mymat);
menu_video_draw_frame(gl->shader, &coords, &mymat, false, texture); menu_video_draw_frame(gl->shader, &coords, &mymat, false, texture);
} }
static void xmb_draw_icon_predone(gl_t *gl, xmb_handle_t *xmb, static void xmb_draw_icon_predone(gl_t *gl, xmb_handle_t *xmb,
math_matrix_4x4 *mymat, math_matrix_4x4 *mymat,
GLuint texture, float x, float y, GRuint texture, float x, float y,
float alpha, float rotation, float scale_factor) float alpha, float rotation, float scale_factor)
{ {
struct gfx_coords coords; struct gfx_coords coords;
unsigned width, height; unsigned width, height;
GLfloat color[16]; GRfloat color[16];
if (alpha > xmb->alpha) if (alpha > xmb->alpha)
alpha = xmb->alpha; alpha = xmb->alpha;
@ -457,7 +460,7 @@ static void xmb_draw_boxart(gl_t *gl, xmb_handle_t *xmb)
unsigned width, height; unsigned width, height;
float x, y; float x, y;
math_matrix_4x4 mymat, mrot, mscal; math_matrix_4x4 mymat, mrot, mscal;
GLfloat color[16]; GRfloat color[16];
video_driver_get_size(&width, &height); video_driver_get_size(&width, &height);
@ -483,6 +486,12 @@ static void xmb_draw_boxart(gl_t *gl, xmb_handle_t *xmb)
x = xmb->margins.screen.left + xmb->icon.spacing.horizontal + x = xmb->margins.screen.left + xmb->icon.spacing.horizontal +
xmb->icon.spacing.horizontal*4 - xmb->icon.size / 4; xmb->icon.spacing.horizontal*4 - xmb->icon.size / 4;
matrix_4x4_rotate_z(&mrot, 0);
matrix_4x4_multiply(&mymat, &mrot, &gl->mvp_no_rot);
matrix_4x4_scale(&mscal, 1, 1, 1);
matrix_4x4_multiply(&mymat, &mscal, &mymat);
glViewport(x, height - y, xmb->boxart_size, xmb->boxart_size); glViewport(x, height - y, xmb->boxart_size, xmb->boxart_size);
coords.vertices = 4; coords.vertices = 4;
@ -491,12 +500,6 @@ static void xmb_draw_boxart(gl_t *gl, xmb_handle_t *xmb)
coords.lut_tex_coord = rmb_tex_coord; coords.lut_tex_coord = rmb_tex_coord;
coords.color = color; coords.color = color;
matrix_4x4_rotate_z(&mrot, 0);
matrix_4x4_multiply(&mymat, &mrot, &gl->mvp_no_rot);
matrix_4x4_scale(&mscal, 1, 1, 1);
matrix_4x4_multiply(&mymat, &mscal, &mymat);
menu_video_draw_frame(gl->shader, &coords, &mymat, false, xmb->boxart); menu_video_draw_frame(gl->shader, &coords, &mymat, false, xmb->boxart);
} }
@ -1157,7 +1160,7 @@ static void xmb_populate_entries(const char *path,
xmb_list_open(xmb); xmb_list_open(xmb);
} }
static GLuint xmb_icon_get_id(xmb_handle_t *xmb, static GRuint xmb_icon_get_id(xmb_handle_t *xmb,
xmb_node_t *core_node, xmb_node_t *node, unsigned type, bool active) xmb_node_t *core_node, xmb_node_t *node, unsigned type, bool active)
{ {
switch(type) switch(type)
@ -1264,8 +1267,8 @@ static void xmb_draw_items(xmb_handle_t *xmb, gl_t *gl,
menu_entry_t entry; menu_entry_t entry;
float icon_x, icon_y; float icon_x, icon_y;
GLuint texture_switch = 0; GRuint texture_switch = 0;
GLuint icon = 0; GRuint icon = 0;
xmb_node_t * node = (xmb_node_t*)menu_list_get_userdata_at_offset(list, i); xmb_node_t * node = (xmb_node_t*)menu_list_get_userdata_at_offset(list, i);
uint32_t hash_label = 0; uint32_t hash_label = 0;
uint32_t hash_value = 0; uint32_t hash_value = 0;
@ -1437,7 +1440,7 @@ static void xmb_draw_cursor(gl_t *gl, xmb_handle_t *xmb, float x, float y)
unsigned width, height; unsigned width, height;
struct gfx_coords coords; struct gfx_coords coords;
math_matrix_4x4 mymat, mrot; math_matrix_4x4 mymat, mrot;
GLfloat color[16]; GRfloat color[16];
color[ 0] = 1.0f; color[ 0] = 1.0f;
color[ 1] = 1.0f; color[ 1] = 1.0f;
@ -1458,6 +1461,9 @@ static void xmb_draw_cursor(gl_t *gl, xmb_handle_t *xmb, float x, float y)
video_driver_get_size(&width, &height); video_driver_get_size(&width, &height);
matrix_4x4_rotate_z(&mrot, 0);
matrix_4x4_multiply(&mymat, &mrot, &gl->mvp_no_rot);
glViewport(x, height - y, xmb->cursor.size, xmb->cursor.size); glViewport(x, height - y, xmb->cursor.size, xmb->cursor.size);
coords.vertices = 4; coords.vertices = 4;
@ -1466,9 +1472,6 @@ static void xmb_draw_cursor(gl_t *gl, xmb_handle_t *xmb, float x, float y)
coords.lut_tex_coord = rmb_tex_coord; coords.lut_tex_coord = rmb_tex_coord;
coords.color = color; coords.color = color;
matrix_4x4_rotate_z(&mrot, 0);
matrix_4x4_multiply(&mymat, &mrot, &gl->mvp_no_rot);
xmb_draw_icon_begin(gl); xmb_draw_icon_begin(gl);
menu_video_draw_frame(gl->shader, &coords, &mymat, true, xmb->textures.list[XMB_TEXTURE_POINTER].id); menu_video_draw_frame(gl->shader, &coords, &mymat, true, xmb->textures.list[XMB_TEXTURE_POINTER].id);