Align frame advance and movies to full field boundaries
This commit is contained in:
parent
a9745400ec
commit
9c5c3c055e
|
@ -839,9 +839,12 @@ void Callback_VideoCopiedToXFB(bool video_update)
|
||||||
{
|
{
|
||||||
if (video_update)
|
if (video_update)
|
||||||
s_drawn_frame++;
|
s_drawn_frame++;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Called at field boundaries in `VideoInterface::Update()`
|
||||||
|
void FrameUpdate()
|
||||||
|
{
|
||||||
Movie::FrameUpdate();
|
Movie::FrameUpdate();
|
||||||
|
|
||||||
if (s_frame_step)
|
if (s_frame_step)
|
||||||
{
|
{
|
||||||
s_frame_step = false;
|
s_frame_step = false;
|
||||||
|
|
|
@ -26,6 +26,7 @@ bool GetIsThrottlerTempDisabled();
|
||||||
void SetIsThrottlerTempDisabled(bool disable);
|
void SetIsThrottlerTempDisabled(bool disable);
|
||||||
|
|
||||||
void Callback_VideoCopiedToXFB(bool video_update);
|
void Callback_VideoCopiedToXFB(bool video_update);
|
||||||
|
void FrameUpdate();
|
||||||
|
|
||||||
enum class State
|
enum class State
|
||||||
{
|
{
|
||||||
|
|
|
@ -733,6 +733,12 @@ static void EndField()
|
||||||
// Run when: When a frame is scanned (progressive/interlace)
|
// Run when: When a frame is scanned (progressive/interlace)
|
||||||
void Update(u64 ticks)
|
void Update(u64 ticks)
|
||||||
{
|
{
|
||||||
|
// If this half-line is at a field boundary, potentially deal with frame-stepping
|
||||||
|
// and/or update movie state before dealing with anything else
|
||||||
|
|
||||||
|
if (s_half_line_count == 0 || s_half_line_count == GetHalfLinesPerEvenField())
|
||||||
|
Core::FrameUpdate();
|
||||||
|
|
||||||
// If an SI poll is scheduled to happen on this half-line, do it!
|
// If an SI poll is scheduled to happen on this half-line, do it!
|
||||||
|
|
||||||
if (s_half_line_of_next_si_poll == s_half_line_count)
|
if (s_half_line_of_next_si_poll == s_half_line_count)
|
||||||
|
|
Loading…
Reference in New Issue