mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-10 00:41:26 +12:00
98 lines
2.2 KiB
C++
98 lines
2.2 KiB
C++
#include "stdafx.h"
|
|
#include "overlay_shader_compile_notification.h"
|
|
#include "Emu/system_config.h"
|
|
|
|
namespace rsx
|
|
{
|
|
namespace overlays
|
|
{
|
|
shader_compile_notification::shader_compile_notification()
|
|
{
|
|
const u16 pos_x = g_cfg.video.shader_compilation_hint.pos_x;
|
|
const u16 pos_y = g_cfg.video.shader_compilation_hint.pos_y;
|
|
|
|
m_text.set_font("Arial", 16);
|
|
m_text.set_text(localized_string_id::RSX_OVERLAYS_COMPILING_SHADERS);
|
|
m_text.auto_resize();
|
|
m_text.set_pos(pos_x, pos_y);
|
|
|
|
m_text.back_color.a = 0.f;
|
|
|
|
for (int n = 0; n < 3; ++n)
|
|
{
|
|
dots[n].set_size(2, 2);
|
|
dots[n].back_color = color4f(1.f, 1.f, 1.f, 1.f);
|
|
dots[n].set_pos(m_text.w + pos_x + 5 + (6 * n), pos_y + 20);
|
|
}
|
|
|
|
creation_time = get_system_time();
|
|
expire_time = creation_time + 1000000;
|
|
|
|
// Disable forced refresh unless fps dips below 4
|
|
min_refresh_duration_us = 250000;
|
|
visible = true;
|
|
}
|
|
|
|
void shader_compile_notification::update_animation(u64 t)
|
|
{
|
|
// Update rate is twice per second
|
|
auto elapsed = t - creation_time;
|
|
elapsed /= 500000;
|
|
|
|
auto old_dot = current_dot;
|
|
current_dot = elapsed % 3;
|
|
|
|
if (old_dot != current_dot)
|
|
{
|
|
if (old_dot != 255)
|
|
{
|
|
dots[old_dot].set_size(2, 2);
|
|
dots[old_dot].translate(0, 1);
|
|
}
|
|
|
|
dots[current_dot].translate(0, -1);
|
|
dots[current_dot].set_size(3, 3);
|
|
}
|
|
}
|
|
|
|
// Extends visible time by half a second. Also updates the screen
|
|
void shader_compile_notification::touch()
|
|
{
|
|
if (urgency_ctr == 0 || urgency_ctr > 8)
|
|
{
|
|
refresh();
|
|
urgency_ctr = 0;
|
|
}
|
|
|
|
expire_time = get_system_time() + 500000;
|
|
urgency_ctr++;
|
|
}
|
|
|
|
void shader_compile_notification::update()
|
|
{
|
|
auto current_time = get_system_time();
|
|
if (current_time > expire_time)
|
|
close(false, false);
|
|
|
|
update_animation(current_time);
|
|
|
|
// Usually this method is called during a draw-to-screen operation. Reset urgency ctr
|
|
urgency_ctr = 1;
|
|
}
|
|
|
|
compiled_resource shader_compile_notification::get_compiled()
|
|
{
|
|
if (!visible)
|
|
{
|
|
return {};
|
|
}
|
|
|
|
auto compiled = m_text.get_compiled();
|
|
compiled.add(dots[0].get_compiled());
|
|
compiled.add(dots[1].get_compiled());
|
|
compiled.add(dots[2].get_compiled());
|
|
|
|
return compiled;
|
|
}
|
|
} // namespace overlays
|
|
} // namespace rsx
|