Reduce gfx_display_rotate_z calls in menu drivers (#12937)

* (Ozone) Take out gfx_display_rotate_z out of ozone_draw_icon -
lots of matrix rotates and multiplies were happening when
just calling it once would suffice

* (MaterialUI) Reduce calls to gfx_display_rotate_z

* (XMB) Cleanup
This commit is contained in:
Autechre 2021-09-05 03:46:52 +02:00 committed by GitHub
parent f597138827
commit 36888612eb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 296 additions and 126 deletions

View File

@ -2370,26 +2370,16 @@ static void materialui_draw_icon(
uintptr_t texture,
float x, float y,
float rotation, float scale_factor,
float *color)
float *color,
math_matrix_4x4 *mymat)
{
gfx_display_ctx_rotate_draw_t rotate_draw;
gfx_display_ctx_draw_t draw;
struct video_coords coords;
math_matrix_4x4 mymat;
gfx_display_ctx_driver_t *dispctx = p_disp->dispctx;
if (dispctx && dispctx->blend_begin)
dispctx->blend_begin(userdata);
rotate_draw.matrix = &mymat;
rotate_draw.rotation = rotation;
rotate_draw.scale_x = scale_factor;
rotate_draw.scale_y = scale_factor;
rotate_draw.scale_z = 1;
rotate_draw.scale_enable = true;
gfx_display_rotate_z(p_disp, &rotate_draw, userdata);
coords.vertices = 4;
coords.vertex = NULL;
coords.tex_coord = NULL;
@ -2403,7 +2393,7 @@ static void materialui_draw_icon(
draw.scale_factor = scale_factor;
draw.rotation = rotation;
draw.coords = &coords;
draw.matrix_data = &mymat;
draw.matrix_data = mymat;
draw.texture = texture;
draw.prim_type = GFX_DISPLAY_PRIM_TRIANGLESTRIP;
draw.pipeline_id = 0;
@ -2427,7 +2417,8 @@ static void materialui_draw_thumbnail(
unsigned video_width,
unsigned video_height,
float x, float y,
float scale_factor)
float scale_factor,
math_matrix_4x4 *mymat)
{
float bg_x;
float bg_y;
@ -2492,7 +2483,8 @@ static void materialui_draw_thumbnail(
bg_y + (bg_height - icon_size) / 2.0f,
0.0f,
1.0f,
mui->colors.missing_thumbnail_icon);
mui->colors.missing_thumbnail_icon,
mymat);
}
break;
case GFX_THUMBNAIL_STATUS_AVAILABLE:
@ -3875,7 +3867,8 @@ static void materialui_render_switch_icon(
unsigned video_height,
float y,
int x_offset,
bool on)
bool on,
math_matrix_4x4 *mymat)
{
unsigned switch_texture_index = on ?
MUI_TEXTURE_SWITCH_ON : MUI_TEXTURE_SWITCH_OFF;
@ -3899,7 +3892,8 @@ static void materialui_render_switch_icon(
y,
0,
1,
bg_color);
bg_color,
mymat);
/* Draw switch */
if (mui->textures.list[switch_texture_index])
@ -3913,7 +3907,8 @@ static void materialui_render_switch_icon(
y,
0,
1,
switch_color);
switch_color,
mymat);
}
/* Used for standard, non-playlist entries
@ -3930,6 +3925,8 @@ static void materialui_render_menu_entry_default(
unsigned header_height,
int x_offset)
{
math_matrix_4x4 mymat;
gfx_display_ctx_rotate_draw_t rotate_draw;
const char *entry_value = NULL;
const char *entry_label = NULL;
unsigned entry_type = 0;
@ -3947,6 +3944,17 @@ static void materialui_render_menu_entry_default(
bool draw_text_outside = (x_offset != 0);
gfx_display_t *p_disp = disp_get_ptr();
{
rotate_draw.matrix = &mymat;
rotate_draw.rotation = 0.0f;
rotate_draw.scale_x = 1.0f;
rotate_draw.scale_y = 1.0f;
rotate_draw.scale_z = 1;
rotate_draw.scale_enable = true;
gfx_display_rotate_z(p_disp, &rotate_draw, userdata);
}
/* Initial ticker configuration
* > Note: ticker is only used for labels/values,
* not sublabel text */
@ -4025,7 +4033,8 @@ static void materialui_render_menu_entry_default(
entry_y + (node->entry_height / 2.0f) - (mui->icon_size / 2.0f),
0,
1,
mui->colors.list_icon);
mui->colors.list_icon,
&mymat);
entry_margin += mui->icon_size;
usable_width -= mui->icon_size;
@ -4165,14 +4174,18 @@ static void materialui_render_menu_entry_default(
case MUI_ENTRY_VALUE_SWITCH_ON:
{
materialui_render_switch_icon(mui, node, p_disp, userdata,
video_width, video_height, value_icon_y, x_offset, true);
video_width, video_height, value_icon_y, x_offset,
true,
&mymat);
entry_value_width = mui->icon_size;
}
break;
case MUI_ENTRY_VALUE_SWITCH_OFF:
{
materialui_render_switch_icon(mui, node, p_disp, userdata,
video_width, video_height, value_icon_y, x_offset, false);
video_width, video_height, value_icon_y, x_offset,
false,
&mymat);
entry_value_width = mui->icon_size;
}
break;
@ -4190,7 +4203,8 @@ static void materialui_render_menu_entry_default(
value_icon_y,
0,
1,
mui->colors.list_switch_on);
mui->colors.list_switch_on,
&mymat);
entry_value_width = mui->icon_size;
}
@ -4268,6 +4282,8 @@ static void materialui_render_menu_entry_playlist_list(
int x_offset)
{
bool draw_divider;
math_matrix_4x4 mymat;
gfx_display_ctx_rotate_draw_t rotate_draw;
const char *entry_label = NULL;
int entry_x = x_offset + node->x;
int entry_y = header_height - mui->scroll_y + node->y;
@ -4279,6 +4295,17 @@ static void materialui_render_menu_entry_playlist_list(
settings_t *settings = config_get_ptr();
gfx_display_t *p_disp = disp_get_ptr();
{
rotate_draw.matrix = &mymat;
rotate_draw.rotation = 0.0f;
rotate_draw.scale_x = 1.0f;
rotate_draw.scale_y = 1.0f;
rotate_draw.scale_z = 1;
rotate_draw.scale_enable = true;
gfx_display_rotate_z(p_disp, &rotate_draw, userdata);
}
/* Initial ticker configuration
* > Note: ticker is only used for labels,
* not sublabel text */
@ -4342,7 +4369,8 @@ static void materialui_render_menu_entry_playlist_list(
video_height,
(float)(entry_x + thumbnail_margin),
thumbnail_y,
1.0f);
1.0f,
&mymat);
entry_margin += mui->thumbnail_width_max + thumbnail_margin;
usable_width -= mui->thumbnail_width_max + thumbnail_margin;
@ -4360,7 +4388,8 @@ static void materialui_render_menu_entry_playlist_list(
video_height,
(float)(entry_x + node->entry_width - thumbnail_margin - (int)mui->thumbnail_width_max),
thumbnail_y,
1.0f);
1.0f,
&mymat);
usable_width -= mui->thumbnail_width_max + thumbnail_margin;
}
@ -4502,6 +4531,8 @@ static void materialui_render_menu_entry_playlist_dual_icon(
unsigned header_height,
int x_offset)
{
math_matrix_4x4 mymat;
gfx_display_ctx_rotate_draw_t rotate_draw;
const char *entry_label = NULL;
float entry_x = (float)x_offset + node->x;
float entry_y = (float)header_height - mui->scroll_y + node->y;
@ -4520,6 +4551,17 @@ static void materialui_render_menu_entry_playlist_dual_icon(
gfx_display_t *p_disp = disp_get_ptr();
settings_t *settings = config_get_ptr();
{
rotate_draw.matrix = &mymat;
rotate_draw.rotation = 0.0f;
rotate_draw.scale_x = 1.0f;
rotate_draw.scale_y = 1.0f;
rotate_draw.scale_z = 1;
rotate_draw.scale_enable = true;
gfx_display_rotate_z(p_disp, &rotate_draw, userdata);
}
/* Initial ticker configuration
* > Note: ticker is only used for labels */
if (mui->use_smooth_ticker)
@ -4551,7 +4593,8 @@ static void materialui_render_menu_entry_playlist_dual_icon(
video_height,
entry_x + (float)mui->margin,
thumbnail_y,
1.0f);
1.0f,
&mymat);
/* > Secondary thumbnail */
materialui_draw_thumbnail(
@ -4562,9 +4605,11 @@ static void materialui_render_menu_entry_playlist_dual_icon(
userdata,
video_width,
video_height,
entry_x + node->entry_width - (float)mui->margin - (float)mui->thumbnail_width_max,
entry_x + node->entry_width
- (float)mui->margin - (float)mui->thumbnail_width_max,
thumbnail_y,
1.0f);
1.0f,
&mymat);
/* Draw entry label */
if (!string_is_empty(entry_label))
@ -4779,6 +4824,8 @@ static void materialui_render_selected_entry_aux_playlist_desktop(
unsigned header_height, int x_offset,
file_list_t *list, size_t selection)
{
math_matrix_4x4 mymat;
gfx_display_ctx_rotate_draw_t rotate_draw;
materialui_node_t *node = (materialui_node_t*)list->list[selection].userdata;
float background_x = (float)(x_offset + (int)mui->landscape_optimization.border_width);
float background_y = (float)header_height;
@ -4801,6 +4848,17 @@ static void materialui_render_selected_entry_aux_playlist_desktop(
(background_height <= 0))
return;
{
rotate_draw.matrix = &mymat;
rotate_draw.rotation = 0.0f;
rotate_draw.scale_x = 1.0f;
rotate_draw.scale_y = 1.0f;
rotate_draw.scale_z = 1;
rotate_draw.scale_enable = true;
gfx_display_rotate_z(p_disp, &rotate_draw, userdata);
}
/* Draw sidebar background
* > Surface */
gfx_display_draw_quad(
@ -4883,7 +4941,8 @@ static void materialui_render_selected_entry_aux_playlist_desktop(
video_height,
thumbnail_x,
thumbnail_y,
1.0f);
1.0f,
&mymat);
/* Draw secondary */
materialui_draw_thumbnail(
@ -4895,8 +4954,10 @@ static void materialui_render_selected_entry_aux_playlist_desktop(
video_width,
video_height,
thumbnail_x,
thumbnail_y + (float)mui->thumbnail_height_max + (float)mui->margin,
1.0f);
thumbnail_y
+ (float)mui->thumbnail_height_max + (float)mui->margin,
1.0f,
&mymat);
}
/* Draw status bar */
@ -5462,7 +5523,8 @@ static void materialui_render_header(
settings_t *settings,
gfx_display_t *p_disp,
void *userdata,
unsigned video_width, unsigned video_height)
unsigned video_width, unsigned video_height,
math_matrix_4x4 *mymat)
{
char menu_title_buf[255];
size_t menu_title_margin = 0;
@ -5613,7 +5675,8 @@ static void materialui_render_header(
0,
0,
1,
mui->colors.sys_bar_icon);
mui->colors.sys_bar_icon,
mymat);
/* Draw percent text */
gfx_display_draw_text(mui->font_data.hint.font,
@ -5655,7 +5718,8 @@ static void materialui_render_header(
MUI_TIMEDATE_MAX_LENGTH * sizeof(char));
/* Cache width */
mui->sys_bar_cache.timedate_width = font_driver_get_message_width(
mui->sys_bar_cache.timedate_width
= font_driver_get_message_width(
mui->font_data.hint.font,
mui->sys_bar_cache.timedate_str,
(unsigned)strlen(mui->sys_bar_cache.timedate_str),
@ -5748,7 +5812,8 @@ static void materialui_render_header(
(int)mui->sys_bar_height,
0,
1,
mui->colors.header_icon);
mui->colors.header_icon,
mymat);
}
usable_title_bar_width -= menu_title_margin;
@ -5766,7 +5831,8 @@ static void materialui_render_header(
(int)mui->sys_bar_height,
0,
1,
mui->colors.header_icon);
mui->colors.header_icon,
mymat);
usable_title_bar_width -= mui->icon_size;
@ -5782,11 +5848,13 @@ static void materialui_render_header(
video_height,
mui->icon_size,
mui->textures.list[MUI_TEXTURE_SWITCH_VIEW],
(int)video_width - (2 * (int)mui->icon_size) - (int)mui->nav_bar_layout_width,
(int)video_width - (2 * (int)mui->icon_size)
- (int)mui->nav_bar_layout_width,
(int)mui->sys_bar_height,
0,
1,
mui->colors.header_icon);
mui->colors.header_icon,
mymat);
usable_title_bar_width -= mui->icon_size;
}
@ -5882,7 +5950,8 @@ static void materialui_render_nav_bar_bottom(
materialui_handle_t *mui,
gfx_display_t *p_disp,
void *userdata,
unsigned video_width, unsigned video_height)
unsigned video_width, unsigned video_height,
math_matrix_4x4 *mymat)
{
unsigned i;
unsigned nav_bar_width = video_width;
@ -5941,8 +6010,10 @@ static void materialui_render_nav_bar_bottom(
nav_bar_y,
0,
1,
mui->nav_bar.back_tab.enabled ?
mui->colors.nav_bar_icon_passive : mui->colors.nav_bar_icon_disabled);
mui->nav_bar.back_tab.enabled
? mui->colors.nav_bar_icon_passive
: mui->colors.nav_bar_icon_disabled,
mymat);
/* > Resume - right hand side */
materialui_draw_icon(
@ -5955,8 +6026,10 @@ static void materialui_render_nav_bar_bottom(
nav_bar_y,
0,
1,
mui->nav_bar.resume_tab.enabled ?
mui->colors.nav_bar_icon_passive : mui->colors.nav_bar_icon_disabled);
mui->nav_bar.resume_tab.enabled
? mui->colors.nav_bar_icon_passive
: mui->colors.nav_bar_icon_disabled,
mymat);
/* Menu tabs - in the centre, left to right */
for (i = 0; i < mui->nav_bar.num_menu_tabs; i++)
@ -5972,11 +6045,13 @@ static void materialui_render_nav_bar_bottom(
video_height,
mui->icon_size,
mui->textures.list[tab->texture_index],
(((float)i + 1.5f) * tab_width) - ((float)mui->icon_size / 2.0f),
(((float)i + 1.5f) * tab_width)
- ((float)mui->icon_size / 2.0f),
nav_bar_y,
0,
1,
draw_color);
draw_color,
mymat);
/* Draw selection marker */
gfx_display_draw_quad(
@ -6000,7 +6075,8 @@ static void materialui_render_nav_bar_right(
gfx_display_t *p_disp,
void *userdata,
unsigned video_width,
unsigned video_height)
unsigned video_height,
math_matrix_4x4 *mymat)
{
unsigned i;
unsigned nav_bar_width = mui->nav_bar.width;
@ -6059,8 +6135,10 @@ static void materialui_render_nav_bar_right(
(int)((((float)num_tabs - 0.5f) * tab_height) - ((float)mui->icon_size / 2.0f)),
0,
1,
mui->nav_bar.back_tab.enabled ?
mui->colors.nav_bar_icon_passive : mui->colors.nav_bar_icon_disabled);
mui->nav_bar.back_tab.enabled
? mui->colors.nav_bar_icon_passive
: mui->colors.nav_bar_icon_disabled,
mymat);
/* > Resume - top */
materialui_draw_icon(
@ -6070,11 +6148,14 @@ static void materialui_render_nav_bar_right(
mui->icon_size,
mui->textures.list[mui->nav_bar.resume_tab.texture_index],
nav_bar_x,
(int)((0.5f * tab_height) - ((float)mui->icon_size / 2.0f)),
(int)((0.5f * tab_height)
- ((float)mui->icon_size / 2.0f)),
0,
1,
mui->nav_bar.resume_tab.enabled ?
mui->colors.nav_bar_icon_passive : mui->colors.nav_bar_icon_disabled);
mui->nav_bar.resume_tab.enabled
? mui->colors.nav_bar_icon_passive
: mui->colors.nav_bar_icon_disabled,
mymat);
/* Menu tabs - in the centre, top to bottom */
for (i = 0; i < mui->nav_bar.num_menu_tabs; i++)
@ -6091,10 +6172,12 @@ static void materialui_render_nav_bar_right(
mui->icon_size,
mui->textures.list[tab->texture_index],
nav_bar_x,
(((float)i + 1.5f) * tab_height) - ((float)mui->icon_size / 2.0f),
(((float)i + 1.5f) * tab_height)
- ((float)mui->icon_size / 2.0f),
0,
1,
draw_color);
draw_color,
mymat);
/* Draw selection marker */
gfx_display_draw_quad(
@ -6118,13 +6201,15 @@ static void materialui_render_nav_bar(
gfx_display_t *p_disp,
void *userdata,
unsigned video_width,
unsigned video_height)
unsigned video_height,
math_matrix_4x4 *mymat)
{
switch (mui->nav_bar.location)
{
case MUI_NAV_BAR_LOCATION_RIGHT:
materialui_render_nav_bar_right(
mui, p_disp, userdata, video_width, video_height);
mui, p_disp, userdata, video_width, video_height,
mymat);
break;
case MUI_NAV_BAR_LOCATION_HIDDEN:
/* Draw nothing */
@ -6133,7 +6218,8 @@ static void materialui_render_nav_bar(
case MUI_NAV_BAR_LOCATION_BOTTOM:
default:
materialui_render_nav_bar_bottom(
mui, p_disp, userdata, video_width, video_height);
mui, p_disp, userdata, video_width, video_height,
mymat);
break;
}
}
@ -6781,6 +6867,8 @@ static void materialui_update_scrollbar(
static void materialui_frame(void *data, video_frame_info_t *video_info)
{
int list_x_offset;
math_matrix_4x4 mymat;
gfx_display_ctx_rotate_draw_t rotate_draw;
materialui_handle_t *mui = (materialui_handle_t*)data;
settings_t *settings = config_get_ptr();
gfx_display_t *p_disp = disp_get_ptr();
@ -6814,6 +6902,17 @@ static void materialui_frame(void *data, video_frame_info_t *video_info)
return;
}
{
rotate_draw.matrix = &mymat;
rotate_draw.rotation = 0.0f;
rotate_draw.scale_x = 1.0f;
rotate_draw.scale_y = 1.0f;
rotate_draw.scale_z = 1;
rotate_draw.scale_enable = true;
gfx_display_rotate_z(p_disp, &rotate_draw, userdata);
}
video_driver_set_viewport(video_width, video_height, true, false);
/* Clear text */
@ -6900,7 +6999,8 @@ static void materialui_frame(void *data, video_frame_info_t *video_info)
* like this because we need to track its
* position in order to enable fast navigation
* via scrollbar 'dragging' */
materialui_update_scrollbar(mui, video_width, video_height, header_height, list_x_offset);
materialui_update_scrollbar(mui, video_width, video_height,
header_height, list_x_offset);
materialui_render_menu_list(mui, p_disp,
userdata,
video_width, video_height, list_x_offset);
@ -6918,16 +7018,18 @@ static void materialui_frame(void *data, video_frame_info_t *video_info)
/* Draw title + system bar */
materialui_render_header(mui, settings, p_disp, userdata,
video_width, video_height);
video_width, video_height, &mymat);
/* Draw navigation bar */
materialui_render_nav_bar(mui, p_disp, userdata,
video_width, video_height);
video_width, video_height, &mymat);
/* Flush second layer of text
* > Title + system bar only use title and hint fonts */
materialui_font_flush(video_width, video_height, &mui->font_data.title);
materialui_font_flush(video_width, video_height, &mui->font_data.hint);
materialui_font_flush(video_width,
video_height, &mui->font_data.title);
materialui_font_flush(video_width,
video_height, &mui->font_data.hint);
/* Handle onscreen keyboard */
if (menu_input_dialog_get_display_kb())

View File

@ -2393,23 +2393,14 @@ static void ozone_draw_icon(
float x, float y,
unsigned width, unsigned height,
float rotation, float scale_factor,
float *color)
float *color,
math_matrix_4x4 *mymat)
{
gfx_display_ctx_rotate_draw_t rotate_draw;
gfx_display_ctx_draw_t draw;
struct video_coords coords;
math_matrix_4x4 mymat;
gfx_display_ctx_driver_t
*dispctx = p_disp->dispctx;
rotate_draw.matrix = &mymat;
rotate_draw.rotation = rotation;
rotate_draw.scale_x = scale_factor;
rotate_draw.scale_y = scale_factor;
rotate_draw.scale_z = 1;
rotate_draw.scale_enable = true;
gfx_display_rotate_z(p_disp, &rotate_draw, userdata);
coords.vertices = 4;
coords.vertex = NULL;
@ -2424,7 +2415,7 @@ static void ozone_draw_icon(
draw.scale_factor = scale_factor;
draw.rotation = rotation;
draw.coords = &coords;
draw.matrix_data = &mymat;
draw.matrix_data = mymat;
draw.texture = texture;
draw.prim_type = GFX_DISPLAY_PRIM_TRIANGLESTRIP;
draw.pipeline_id = 0;
@ -2700,6 +2691,7 @@ static void ozone_draw_sidebar(
int entry_width;
char console_title[255];
unsigned i, sidebar_height;
math_matrix_4x4 mymat;
gfx_animation_ctx_ticker_t ticker;
gfx_animation_ctx_ticker_smooth_t ticker_smooth;
static const char* const
@ -2852,6 +2844,18 @@ static void ozone_draw_sidebar(
if (dispctx && dispctx->blend_begin)
dispctx->blend_begin(userdata);
{
gfx_display_ctx_rotate_draw_t rotate_draw;
rotate_draw.matrix = &mymat;
rotate_draw.rotation = 0.0f;
rotate_draw.scale_x = 1.0f;
rotate_draw.scale_y = 1.0f;
rotate_draw.scale_z = 1.0f;
rotate_draw.scale_enable = true;
gfx_display_rotate_z(p_disp, &rotate_draw, userdata);
}
for (i = 0; i < (unsigned)(ozone->system_tab_end+1); i++)
{
enum msg_hash_enums value_idx;
@ -2878,9 +2882,10 @@ static void ozone_draw_sidebar(
y + ozone->dimensions.sidebar_entry_height / 2 - ozone->dimensions.sidebar_entry_icon_size / 2 + ozone->animations.scroll_y_sidebar,
video_width,
video_height,
0,
1,
col);
0.0f,
1.0f,
col,
&mymat);
value_idx = ozone_system_tabs_value[ozone->tabs[i]];
title = msg_hash_to_str(value_idx);
@ -2962,9 +2967,10 @@ static void ozone_draw_sidebar(
y + ozone->dimensions.sidebar_entry_height / 2 - ozone->dimensions.sidebar_entry_icon_size / 2 + ozone->animations.scroll_y_sidebar,
video_width,
video_height,
0,
1,
col);
0.0f,
1.0f,
col,
&mymat);
/* Text */
if (ozone->sidebar_collapsed)
@ -4011,7 +4017,8 @@ static void ozone_draw_entry_value(
char *value,
unsigned x, unsigned y,
uint32_t alpha_uint32,
menu_entry_t *entry)
menu_entry_t *entry,
math_matrix_4x4 *mymat)
{
bool switch_is_on = true;
bool do_draw_text = false;
@ -4036,9 +4043,10 @@ static void ozone_draw_entry_value(
y - 22 * scale_factor,
video_width,
video_height,
0,
1,
col);
0.0f,
1.0f,
col,
mymat);
if (dispctx && dispctx->blend_end)
dispctx->blend_end(userdata);
return;
@ -4124,7 +4132,8 @@ static void ozone_draw_no_thumbnail_available(
unsigned video_height,
unsigned x_position,
unsigned sidebar_width,
unsigned y_offset)
unsigned y_offset,
math_matrix_4x4 *mymat)
{
unsigned icon = OZONE_ENTRIES_ICONS_TEXTURE_CORE_INFO;
unsigned icon_size = (unsigned)((float)
@ -4149,7 +4158,10 @@ static void ozone_draw_no_thumbnail_available(
video_height/2 - icon_size/2 - y_offset,
video_width,
video_height,
0, 1, col);
0.0f,
1.0f,
col,
mymat);
if (dispctx->blend_end)
dispctx->blend_end(userdata);
}
@ -4393,7 +4405,8 @@ static void ozone_draw_entries(
file_list_t *selection_buf,
float alpha,
float scroll_y,
bool is_playlist)
bool is_playlist,
math_matrix_4x4 *mymat)
{
uint32_t alpha_uint32;
size_t i;
@ -4727,9 +4740,10 @@ border_iterate:
/ 2 - ozone->dimensions.entry_icon_size / 2,
video_width,
video_height,
0,
1,
icon_color);
0.0f,
1.0f,
icon_color,
mymat);
if (dispctx->blend_end)
dispctx->blend_end(userdata);
}
@ -4817,7 +4831,8 @@ border_iterate:
+ entry_width - ozone->dimensions.entry_icon_padding,
y + ozone->dimensions.entry_height / 2 + ozone->fonts.entries_label.line_centre_offset + scroll_y,
alpha_uint32,
&entry);
&entry,
mymat);
y += node->height;
}
@ -4838,7 +4853,8 @@ static void ozone_draw_thumbnail_bar(
unsigned video_width,
unsigned video_height,
bool libretro_running,
float menu_framebuffer_opacity)
float menu_framebuffer_opacity,
math_matrix_4x4 *mymat)
{
enum gfx_thumbnail_alignment right_thumbnail_alignment;
enum gfx_thumbnail_alignment left_thumbnail_alignment;
@ -4920,7 +4936,8 @@ static void ozone_draw_thumbnail_bar(
userdata,
video_width,
video_height,
x_position, sidebar_width, 0);
x_position, sidebar_width, 0,
mymat);
return;
}
@ -4977,7 +4994,8 @@ static void ozone_draw_thumbnail_bar(
video_height,
x_position,
sidebar_width,
thumbnail_height / 2);
thumbnail_height / 2,
mymat);
/* Bottom row
* > Displays one item, with the following order
@ -5316,7 +5334,10 @@ static void ozone_draw_thumbnail_bar(
video_height - ozone->dimensions.footer_height - ozone->dimensions.sidebar_entry_icon_padding - icon_size,
video_width,
video_height,
0, 1, col);
0.0f,
1.0f,
col,
mymat);
if (dispctx->blend_end)
dispctx->blend_end(userdata);
}
@ -8274,7 +8295,8 @@ static void ozone_draw_header(
unsigned video_width,
unsigned video_height,
bool battery_level_enable,
bool timedate_enable)
bool timedate_enable,
math_matrix_4x4 *mymat)
{
char title[255];
gfx_animation_ctx_ticker_t ticker;
@ -8382,7 +8404,10 @@ static void ozone_draw_header(
14 * scale_factor, /* Where does this come from...? */
video_width,
video_height,
0, 1, col);
0.0f,
1.0f,
col,
&mymat);
else
#endif
ozone_draw_icon(
@ -8397,7 +8422,10 @@ static void ozone_draw_header(
(ozone->dimensions.header_height - logo_icon_size) / 2,
video_width,
video_height,
0, 1, col);
0.0f,
1.0f,
col,
mymat);
}
if (dispctx->blend_end)
dispctx->blend_end(userdata);
@ -8452,7 +8480,10 @@ static void ozone_draw_header(
0,
video_width,
video_height,
0, 1, col);
0.0f,
1.0f,
col,
mymat);
if (dispctx->blend_end)
dispctx->blend_end(userdata);
}
@ -8506,7 +8537,10 @@ static void ozone_draw_header(
0,
video_width,
video_height,
0, 1, col);
0.0f,
1.0f,
col,
mymat);
if (dispctx->blend_end)
dispctx->blend_end(userdata);
}
@ -8521,7 +8555,8 @@ static void ozone_draw_footer(
unsigned video_width,
unsigned video_height,
bool input_menu_swap_ok_cancel_buttons,
settings_t *settings)
settings_t *settings,
math_matrix_4x4 *mymat)
{
bool menu_core_enable = settings->bools.menu_core_enable;
float scale_factor = ozone->last_scale_factor;
@ -8614,7 +8649,10 @@ static void ozone_draw_footer(
icon_y,
video_width,
video_height,
0, 1, col);
0.0f,
1.0f,
col,
mymat);
/* > back */
ozone_draw_icon(
@ -8630,7 +8668,10 @@ static void ozone_draw_footer(
back_x,
icon_y,
video_width,video_height,
0, 1, col);
0.0f,
1.0f,
col,
mymat);
/* > search */
ozone_draw_icon(
@ -8644,7 +8685,10 @@ static void ozone_draw_footer(
search_x,
icon_y,
video_width,video_height,
0, 1, col);
0.0f,
1.0f,
col,
mymat);
/* > fullscreen_thumbs */
if (fullscreen_thumbnails_available)
@ -8659,7 +8703,10 @@ static void ozone_draw_footer(
fullscreen_thumbs_x,
icon_y,
video_width,video_height,
0, 1, col);
0.0f,
1.0f,
col,
mymat);
/* > metadata_toggle */
if (metadata_override_available)
@ -8674,7 +8721,10 @@ static void ozone_draw_footer(
metadata_toggle_x,
icon_y,
video_width,video_height,
0, 1, col);
0.0f,
1.0f,
col,
mymat);
}
if (dispctx->blend_end)
@ -8861,9 +8911,10 @@ static void ozone_draw_footer(
video_height - ozone->dimensions.footer_height / 2 - 15 * scale_factor,
video_width,
video_height,
0,
1,
ozone->pure_white);
0.0f,
1.0f,
ozone->pure_white,
&mymat);
if (dispctx->blend_end)
dispctx->blend_end(userdata);
}
@ -9047,6 +9098,7 @@ static void ozone_frame(void *data, video_frame_info_t *video_info)
gfx_display_t *p_disp = (gfx_display_t*)video_info->disp_userdata;
gfx_animation_t *p_anim = anim_get_ptr();
gfx_display_ctx_driver_t *dispctx = p_disp->dispctx;
math_matrix_4x4 mymat;
#if 0
static bool reset = false;
@ -9142,6 +9194,18 @@ static void ozone_frame(void *data, video_frame_info_t *video_info)
background_color,
NULL);
{
gfx_display_ctx_rotate_draw_t rotate_draw;
rotate_draw.matrix = &mymat;
rotate_draw.rotation = 0.0f;
rotate_draw.scale_x = 1.0f;
rotate_draw.scale_y = 1.0f;
rotate_draw.scale_z = 1.0f;
rotate_draw.scale_enable = true;
gfx_display_rotate_z(p_disp, &rotate_draw, userdata);
}
/* Header, footer */
ozone_draw_header(
ozone,
@ -9152,14 +9216,15 @@ static void ozone_frame(void *data, video_frame_info_t *video_info)
video_width,
video_height,
battery_level_enable,
timedate_enable);
timedate_enable,
&mymat);
ozone_draw_footer(ozone,
p_disp, p_anim,
userdata,
video_width,
video_height,
input_menu_swap_ok_cancel_buttons,
settings);
settings, &mymat);
/* Sidebar */
if (ozone->draw_sidebar)
@ -9199,7 +9264,8 @@ static void ozone_frame(void *data, video_frame_info_t *video_info)
menu_entries_get_selection_buf_ptr(0),
ozone->animations.list_alpha,
ozone->animations.scroll_y,
ozone->is_playlist
ozone->is_playlist,
&mymat
);
/* Old list */
@ -9217,7 +9283,8 @@ static void ozone_frame(void *data, video_frame_info_t *video_info)
&ozone->selection_buf_old,
ozone->animations.list_alpha,
ozone->scroll_old,
ozone->is_playlist_old
ozone->is_playlist_old,
&mymat
);
/* Thumbnail bar */
@ -9230,7 +9297,8 @@ static void ozone_frame(void *data, video_frame_info_t *video_info)
video_width,
video_height,
libretro_running,
menu_framebuffer_opacity);
menu_framebuffer_opacity,
&mymat);
if (dispctx && dispctx->scissor_end)
dispctx->scissor_end(userdata,

View File

@ -844,7 +844,6 @@ static void xmb_draw_icon(
unsigned video_height,
bool xmb_shadows_enable,
int icon_size,
math_matrix_4x4 *mymat,
uintptr_t texture,
float x,
float y,
@ -854,7 +853,8 @@ static void xmb_draw_icon(
float rotation,
float scale_factor,
float *color,
float shadow_offset)
float shadow_offset,
math_matrix_4x4 *mymat)
{
gfx_display_ctx_draw_t draw;
struct video_coords coords;
@ -3551,7 +3551,6 @@ static int xmb_draw_item(
video_height,
xmb_shadows_enable,
xmb->icon_size,
&mymat_tmp,
texture,
x,
y,
@ -3561,7 +3560,8 @@ static int xmb_draw_item(
rotation,
scale_factor,
&color[0],
xmb->shadow_offset);
xmb->shadow_offset,
&mymat_tmp);
}
gfx_display_set_alpha(color, MIN(node->alpha, xmb->alpha));
@ -3575,7 +3575,6 @@ static int xmb_draw_item(
video_height,
xmb_shadows_enable,
xmb->icon_size,
mymat,
texture_switch,
node->x + xmb->margins_screen_left
+ xmb->icon_spacing_horizontal
@ -3586,7 +3585,8 @@ static int xmb_draw_item(
0,
1,
&color[0],
xmb->shadow_offset);
xmb->shadow_offset,
mymat);
return 0;
}
@ -5183,7 +5183,6 @@ static void xmb_frame(void *data, video_frame_info_t *video_info)
video_height,
xmb_shadows_enable,
xmb->icon_size,
&mymat,
xmb->textures.list[
powerstate.charging? XMB_TEXTURE_BATTERY_CHARGING :
(powerstate.percent > 80)? XMB_TEXTURE_BATTERY_FULL :
@ -5200,7 +5199,8 @@ static void xmb_frame(void *data, video_frame_info_t *video_info)
0,
1,
&item_color[0],
xmb->shadow_offset);
xmb->shadow_offset,
&mymat);
if (dispctx && dispctx->blend_end)
dispctx->blend_end(userdata);
}
@ -5239,7 +5239,6 @@ static void xmb_frame(void *data, video_frame_info_t *video_info)
video_height,
xmb_shadows_enable,
xmb->icon_size,
&mymat,
xmb->textures.list[XMB_TEXTURE_CLOCK],
video_width - xmb->icon_size - x_pos,
xmb->icon_size,
@ -5249,7 +5248,8 @@ static void xmb_frame(void *data, video_frame_info_t *video_info)
0,
1,
&item_color[0],
xmb->shadow_offset);
xmb->shadow_offset,
&mymat);
if (dispctx && dispctx->blend_end)
dispctx->blend_end(userdata);
}
@ -5288,7 +5288,6 @@ static void xmb_frame(void *data, video_frame_info_t *video_info)
video_height,
xmb_shadows_enable,
xmb->icon_size,
&mymat,
xmb->textures.list[XMB_TEXTURE_ARROW],
xmb->x + xmb->margins_screen_left +
xmb->icon_spacing_horizontal -
@ -5302,7 +5301,8 @@ static void xmb_frame(void *data, video_frame_info_t *video_info)
0,
1,
&item_color[0],
xmb->shadow_offset);
xmb->shadow_offset,
&mymat);
if (dispctx && dispctx->blend_end)
dispctx->blend_end(userdata);
}
@ -5375,7 +5375,6 @@ static void xmb_frame(void *data, video_frame_info_t *video_info)
video_height,
xmb_shadows_enable,
xmb->icon_size,
&mymat,
texture,
x,
y,
@ -5385,7 +5384,8 @@ static void xmb_frame(void *data, video_frame_info_t *video_info)
rotation,
scale_factor,
&item_color[0],
xmb->shadow_offset);
xmb->shadow_offset,
&mymat);
}
}