mirror of
https://github.com/TwilitRealm/dusklight
synced 2026-05-23 22:45:05 -04:00
Frame Interp: UI Pacing Simplification
This commit is contained in:
@@ -19,14 +19,11 @@ void end_record();
|
||||
void interpolate(float step);
|
||||
float get_interpolation_step();
|
||||
|
||||
void notify_presentation_frame();
|
||||
void request_presentation_sync();
|
||||
bool presentation_sync_active();
|
||||
|
||||
void notify_sim_tick_complete();
|
||||
uint32_t begin_presentation_ui_pass();
|
||||
uint32_t get_presentation_ui_advance_ticks();
|
||||
void end_presentation_ui_pass();
|
||||
void set_ui_tick_pending(bool value);
|
||||
bool get_ui_tick_pending();
|
||||
|
||||
void open_child(const void* key, int32_t id);
|
||||
void close_child();
|
||||
|
||||
@@ -101,10 +101,6 @@ public:
|
||||
|
||||
void setDrawDoneMethod(EDrawDone drawDone) { mDrawDoneMethod = drawDone; }
|
||||
void setFader(JUTFader* fader) { mFader = fader; }
|
||||
#ifdef TARGET_PC
|
||||
// For frame interpolation
|
||||
void setFaderSimSteps(u32 steps);
|
||||
#endif
|
||||
void resetFader() { setFader(NULL); }
|
||||
JUTFader* getFader() const { return mFader; }
|
||||
void setClearColor(JUtility::TColor color) { mClearColor = color; }
|
||||
|
||||
@@ -205,14 +205,6 @@ void JFWDisplay::preGX() {
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef TARGET_PC
|
||||
static s32 s_faderSimSteps = -1;
|
||||
|
||||
void JFWDisplay::setFaderSimSteps(u32 steps) {
|
||||
s_faderSimSteps = static_cast<s32>(steps);
|
||||
}
|
||||
#endif
|
||||
|
||||
void JFWDisplay::endGX() {
|
||||
s32 bufferNum = JUTXfb::getManager()->getBufferNum();
|
||||
u16 width = JUTVideo::getManager()->getFbWidth();
|
||||
@@ -224,14 +216,7 @@ void JFWDisplay::endGX() {
|
||||
if (mFader != NULL) {
|
||||
ortho.setPort();
|
||||
#ifdef TARGET_PC
|
||||
u32 advance_count = 1;
|
||||
if (dusk::getSettings().game.enableFrameInterpolation && s_faderSimSteps >= 0) {
|
||||
advance_count = static_cast<u32>(s_faderSimSteps);
|
||||
s_faderSimSteps = -1;
|
||||
} else {
|
||||
s_faderSimSteps = -1;
|
||||
}
|
||||
for (u32 i = 0; i < advance_count; i++) {
|
||||
if (dusk::frame_interp::get_ui_tick_pending()) {
|
||||
mFader->advance();
|
||||
}
|
||||
if (mFader->getStatus() != 1) {
|
||||
|
||||
@@ -1054,7 +1054,7 @@ void daMidna_c::setBodyPartMatrix() {
|
||||
}
|
||||
mpModel->calcWeightEnvelopeMtx();
|
||||
#ifdef TARGET_PC
|
||||
// Frame interpolation: Record weight envelopes for Midna here, as they are otherwise missed causing distortion
|
||||
// FRAME INTERP NOTE: Record weight envelopes for Midna here, as they are otherwise missed causing distortion
|
||||
for (u16 i = 0; i < mpModel->getModelData()->getWEvlpMtxNum(); i++) {
|
||||
dusk::frame_interp::record_final_mtx_raw(reinterpret_cast<const Mtx*>(mpModel->getWeightAnmMtx(i)), mpModel->getWeightAnmMtx(i));
|
||||
}
|
||||
|
||||
@@ -392,16 +392,15 @@ void dMenu_Fmap2DBack_c::draw() {
|
||||
&mArrowPos2DY);
|
||||
|
||||
#ifdef TARGET_PC
|
||||
for (u32 i = 0; i < dusk::frame_interp::get_presentation_ui_advance_ticks(); ++i) {
|
||||
if (dusk::frame_interp::get_ui_tick_pending())
|
||||
#endif
|
||||
{
|
||||
field_0x11e0 -= g_fmapHIO.mCursorSpeed;
|
||||
|
||||
if (field_0x11e0 < 0.0f) {
|
||||
field_0x11e0 += 360.0f;
|
||||
}
|
||||
#ifdef TARGET_PC
|
||||
}
|
||||
#endif
|
||||
|
||||
mpPointParent->getPanePtr()->rotate(mpPointParent->getSizeX() / 2.0f,
|
||||
mpPointParent->getSizeY() / 2.0f, ROTATE_Z,
|
||||
|
||||
+5
-13
@@ -638,12 +638,11 @@ void dMeter2Draw_c::draw() {
|
||||
var_f29 = g_drawHIO.mLightDrop.mDropPikariAnimSpeed_Completed;
|
||||
int temp_r5_2 = g_drawHIO.mLightDrop.mPikariInterval * 15;
|
||||
#ifdef TARGET_PC
|
||||
// Set even if not advancing
|
||||
// FRAME INTERP NOTE: Set even if not advancing
|
||||
var_f28 = g_drawHIO.mLightDrop.mPikariScaleComplete;
|
||||
|
||||
const u32 ui_advance_ticks = dusk::frame_interp::get_presentation_ui_advance_ticks();
|
||||
for (u32 tick = 0; tick < ui_advance_ticks; ++tick) {
|
||||
if (dusk::frame_interp::get_ui_tick_pending())
|
||||
#endif
|
||||
{
|
||||
if (field_0x756 <= temp_r5_2) {
|
||||
int temp_r4 = (field_0x756 % g_drawHIO.mLightDrop.mPikariInterval);
|
||||
int temp_r3_5 = field_0x756 / g_drawHIO.mLightDrop.mPikariInterval;
|
||||
@@ -669,17 +668,12 @@ void dMeter2Draw_c::draw() {
|
||||
}
|
||||
|
||||
field_0x756 = -1;
|
||||
#ifdef TARGET_PC
|
||||
break;
|
||||
#endif
|
||||
} else {
|
||||
field_0x756++;
|
||||
}
|
||||
}
|
||||
}
|
||||
#ifdef TARGET_PC
|
||||
}
|
||||
#endif
|
||||
|
||||
for (int i = 0; i < 16; i++) {
|
||||
if (field_0x66c[i] > 0.0f) {
|
||||
@@ -1349,9 +1343,9 @@ void dMeter2Draw_c::drawPikari(f32 i_posX, f32 i_posY, f32* i_framep, f32 i_scal
|
||||
*i_framep = 0.0f;
|
||||
} else {
|
||||
#ifdef TARGET_PC
|
||||
const u32 ui_advance_ticks = dusk::frame_interp::get_presentation_ui_advance_ticks();
|
||||
for (u32 i = 0; i < ui_advance_ticks; ++i) {
|
||||
if (dusk::frame_interp::get_ui_tick_pending())
|
||||
#endif
|
||||
{
|
||||
*i_framep += param_8;
|
||||
if (*i_framep > var_f31) {
|
||||
if (param_9 == 1 || param_9 == 2 || param_9 == 3) {
|
||||
@@ -1366,9 +1360,7 @@ void dMeter2Draw_c::drawPikari(f32 i_posX, f32 i_posY, f32* i_framep, f32 i_scal
|
||||
} else if (*i_framep == 18.0f && param_9 == 2) {
|
||||
mDoAud_seStart(Z2SE_SY_ITEM_COMBINE_ICON, NULL, 0, 0);
|
||||
}
|
||||
#ifdef TARGET_PC
|
||||
}
|
||||
#endif
|
||||
|
||||
playPikariBckAnimation(*i_framep);
|
||||
playPikariBpkAnimation(*i_framep);
|
||||
|
||||
@@ -204,16 +204,14 @@ void dMsgScrnLight_c::draw(f32* i_anmFrame, f32 i_posX, f32 i_posY, f32 i_scaleX
|
||||
|
||||
if (mPlayAnim) {
|
||||
#ifdef TARGET_PC
|
||||
const u32 ui_advance_ticks = dusk::frame_interp::get_presentation_ui_advance_ticks();
|
||||
for (u32 i = 0; i < ui_advance_ticks; ++i) {
|
||||
if (dusk::frame_interp::get_ui_tick_pending())
|
||||
#endif
|
||||
{
|
||||
*i_anmFrame += 1.0f;
|
||||
if (*i_anmFrame >= mpBck->getFrameMax()) {
|
||||
*i_anmFrame = 0.0f;
|
||||
}
|
||||
#ifdef TARGET_PC
|
||||
}
|
||||
#endif
|
||||
|
||||
mBckFrame = *i_anmFrame;
|
||||
mBpkFrame = *i_anmFrame;
|
||||
@@ -229,17 +227,15 @@ void dMsgScrnLight_c::draw(f32* i_anmFrame, f32 i_posX, f32 i_posY, f32 i_scaleX
|
||||
|
||||
if (mPlayAnim) {
|
||||
#ifdef TARGET_PC
|
||||
const u32 ui_advance_ticks = dusk::frame_interp::get_presentation_ui_advance_ticks();
|
||||
for (u32 i = 0; i < ui_advance_ticks; ++i) {
|
||||
if (dusk::frame_interp::get_ui_tick_pending())
|
||||
#endif
|
||||
{
|
||||
*i_anmFrame += i_anmRate;
|
||||
|
||||
if (*i_anmFrame >= mpBck->getFrameMax()) {
|
||||
*i_anmFrame = 0.0f;
|
||||
}
|
||||
#ifdef TARGET_PC
|
||||
}
|
||||
#endif
|
||||
|
||||
mBckFrame = *i_anmFrame;
|
||||
mBpkFrame = *i_anmFrame;
|
||||
|
||||
@@ -272,9 +272,9 @@ void dSelect_cursor_c::update() {
|
||||
if (field_0x30) {
|
||||
if (chkPlayAnime(0)) {
|
||||
#ifdef TARGET_PC
|
||||
const u32 ui_advance_ticks = dusk::frame_interp::get_presentation_ui_advance_ticks();
|
||||
for (u32 tick = 0; tick < ui_advance_ticks; ++tick) {
|
||||
if (dusk::frame_interp::get_ui_tick_pending())
|
||||
#endif
|
||||
{
|
||||
if (mNameIdx == 1) {
|
||||
field_0x44 += mpCursorHIO->field_0x8 * fVar1;
|
||||
} else {
|
||||
@@ -284,9 +284,7 @@ void dSelect_cursor_c::update() {
|
||||
if (field_0x44 >= field_0x30->getFrameMax()) {
|
||||
field_0x44 -= field_0x30->getFrameMax();
|
||||
}
|
||||
#ifdef TARGET_PC
|
||||
}
|
||||
#endif
|
||||
|
||||
field_0x30->setFrame(field_0x44);
|
||||
setBpkAnimation(field_0x30);
|
||||
@@ -303,9 +301,9 @@ void dSelect_cursor_c::update() {
|
||||
if (field_0x34[i]) {
|
||||
if ((i == 0 && chkPlayAnime(2)) || (i == 1 && chkPlayAnime(3))) {
|
||||
#ifdef TARGET_PC
|
||||
const u32 ui_advance_ticks = dusk::frame_interp::get_presentation_ui_advance_ticks();
|
||||
for (u32 tick = 0; tick < ui_advance_ticks; ++tick) {
|
||||
if (dusk::frame_interp::get_ui_tick_pending())
|
||||
#endif
|
||||
{
|
||||
if (mNameIdx == 1) {
|
||||
field_0x48[i] += mpCursorHIO->field_0x8 * fVar1;
|
||||
} else {
|
||||
@@ -314,9 +312,7 @@ void dSelect_cursor_c::update() {
|
||||
if (field_0x48[i] >= field_0x34[i]->getFrameMax()) {
|
||||
field_0x48[i] -= field_0x34[i]->getFrameMax();
|
||||
}
|
||||
#ifdef TARGET_PC
|
||||
}
|
||||
#endif
|
||||
|
||||
field_0x34[i]->setFrame(field_0x48[i]);
|
||||
}
|
||||
@@ -326,9 +322,9 @@ void dSelect_cursor_c::update() {
|
||||
|
||||
if (field_0x2C && chkPlayAnime(1)) {
|
||||
#ifdef TARGET_PC
|
||||
const u32 ui_advance_ticks = dusk::frame_interp::get_presentation_ui_advance_ticks();
|
||||
for (u32 tick = 0; tick < ui_advance_ticks; ++tick) {
|
||||
if (dusk::frame_interp::get_ui_tick_pending())
|
||||
#endif
|
||||
{
|
||||
if (mNameIdx == 1) {
|
||||
field_0x40 += mpCursorHIO->field_0x8 * fVar1;
|
||||
} else {
|
||||
@@ -337,9 +333,7 @@ void dSelect_cursor_c::update() {
|
||||
if (field_0x40 >= field_0x2C->getFrameMax()) {
|
||||
field_0x40 -= field_0x2C->getFrameMax();
|
||||
}
|
||||
#ifdef TARGET_PC
|
||||
}
|
||||
#endif
|
||||
|
||||
field_0x2C->setFrame(field_0x40);
|
||||
setBckAnimation(field_0x2C);
|
||||
@@ -348,13 +342,11 @@ void dSelect_cursor_c::update() {
|
||||
|
||||
if (chkPlayAnime(1) && mNameIdx == 0) {
|
||||
#ifdef TARGET_PC
|
||||
const u32 ui_advance_ticks = dusk::frame_interp::get_presentation_ui_advance_ticks();
|
||||
for (u32 tick = 0; tick < ui_advance_ticks; ++tick) {
|
||||
if (dusk::frame_interp::get_ui_tick_pending())
|
||||
#endif
|
||||
{
|
||||
setCursorAnimation();
|
||||
#ifdef TARGET_PC
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
mpScreen->animation();
|
||||
|
||||
@@ -9,9 +9,9 @@ dSi_HIO_c::dSi_HIO_c() {}
|
||||
void dSelect_icon_c::animation() {
|
||||
if (field_0x10->getAlpha() != 0) {
|
||||
#ifdef TARGET_PC
|
||||
const u32 ui_advance_ticks = dusk::frame_interp::get_presentation_ui_advance_ticks();
|
||||
for (u32 i = 0; i < ui_advance_ticks; ++i) {
|
||||
if (dusk::frame_interp::get_ui_tick_pending())
|
||||
#endif
|
||||
{
|
||||
field_0x20 += field_0x2c;
|
||||
if (field_0x20 >= field_0x1c->getFrameMax()) {
|
||||
field_0x20 = 0.0f;
|
||||
@@ -22,9 +22,9 @@ void dSelect_icon_c::animation() {
|
||||
if (field_0x28 >= field_0x24->getFrameMax()) {
|
||||
field_0x28 = 0.0f;
|
||||
}
|
||||
#ifdef TARGET_PC
|
||||
}
|
||||
// Set even if not advancing
|
||||
#ifdef TARGET_PC
|
||||
// FRAME INTERP NOTE: Set even if not advancing
|
||||
field_0x1c->setFrame(field_0x20);
|
||||
#endif
|
||||
|
||||
|
||||
+62
-67
@@ -1341,75 +1341,70 @@ void dDlst_TimerScrnDraw_c::draw() {
|
||||
((f32)g_drawHIO.mMiniGame.mGetInTextWaitFrames + 60.0f);
|
||||
|
||||
#if TARGET_PC
|
||||
const u32 pending_ui_ticks = dusk::frame_interp::get_presentation_ui_advance_ticks();
|
||||
#else
|
||||
const u32 pending_ui_ticks = 1u;
|
||||
if (dusk::frame_interp::get_ui_tick_pending())
|
||||
#endif
|
||||
|
||||
for (int i = 0; i < 51; i++) {
|
||||
for (u32 tick = 0; tick < pending_ui_ticks; tick++) {
|
||||
if (!(m_getin_info[i].bck_frame > 0.0f && m_getin_info[i].bck_frame < temp)) {
|
||||
break;
|
||||
}
|
||||
|
||||
if (m_getin_info[i].bck_frame < 60.0f) {
|
||||
m_getin_info[i].bck_frame += g_drawHIO.mMiniGame.mGetInTextAnimSpeed;
|
||||
if (m_getin_info[i].bck_frame > 60.0f) {
|
||||
m_getin_info[i].bck_frame = 60.0f;
|
||||
}
|
||||
} else if (m_getin_info[i].bck_frame < g_drawHIO.mMiniGame.mGetInTextWaitFrames + 60.0f) {
|
||||
m_getin_info[i].bck_frame++;
|
||||
} else if (m_getin_info[i].bck_frame < temp) {
|
||||
m_getin_info[i].bck_frame++;
|
||||
}
|
||||
}
|
||||
|
||||
if (m_getin_info[i].bck_frame > 0.0f && m_getin_info[i].bck_frame < temp) {
|
||||
f32 var_f29 = 1.0f;
|
||||
if (m_getin_info[i].bck_frame >= g_drawHIO.mMiniGame.mGetInTextWaitFrames + 60.0f &&
|
||||
m_getin_info[i].bck_frame < temp) {
|
||||
var_f29 = acc(g_drawHIO.mMiniGame.mGetInTextAlphaFrames,
|
||||
temp - m_getin_info[i].bck_frame, 0);
|
||||
}
|
||||
|
||||
if (m_getin_info[i].bck_frame < 60.0f) {
|
||||
playBckAnimation(m_getin_info[i].bck_frame);
|
||||
} else {
|
||||
playBckAnimation(60.0f);
|
||||
}
|
||||
|
||||
mpGetInParent->setAlphaRate(var_f29);
|
||||
|
||||
if (g_drawHIO.mMiniGame.mGetInTextLocation == 1) {
|
||||
mpGetInRoot->translate(m_getin_info[i].pos_x + g_drawHIO.mMiniGame.mGetInTextPosX,
|
||||
m_getin_info[i].pos_y + g_drawHIO.mMiniGame.mGetInTextPosY);
|
||||
} else {
|
||||
f32 temp_f2 = m_getin_info[i].bck_frame - 40.0f;
|
||||
f32 var_f3 = ((temp_f2 * 0.5f) * temp_f2) * 0.15f;
|
||||
if (i == 0) {
|
||||
var_f3 = 0.0f;
|
||||
}
|
||||
|
||||
mpGetInRoot->paneTrans(
|
||||
m_getin_info[i].pos_x + g_drawHIO.mMiniGame.mGetInTextPosX,
|
||||
(m_getin_info[i].pos_y + g_drawHIO.mMiniGame.mGetInTextPosY) - var_f3);
|
||||
}
|
||||
|
||||
mpGetInRoot->scale(g_drawHIO.mMiniGame.mGetInTextSizeX,
|
||||
g_drawHIO.mMiniGame.mGetInTextSizeY);
|
||||
mpGetInScreen->draw(0.0f, 0.0f, graf_ctx);
|
||||
|
||||
if (m_getin_info[i].pikari_frame > 0.0f) {
|
||||
drawPikari(i);
|
||||
} else if (m_getin_info[i].pikari_frame == -1.0f) {
|
||||
if (m_getin_info[i].field_0xc == 0) {
|
||||
if (m_getin_info[i].bck_frame > g_drawHIO.mMiniGame.mGetInPikariAppearFrames) {
|
||||
m_getin_info[i].pikari_frame =
|
||||
18.0f - g_drawHIO.mMiniGame.mGetInPikariAnimSpeed;
|
||||
{
|
||||
for (int i = 0; i < 51; i++) {
|
||||
if (m_getin_info[i].bck_frame > 0.0f && m_getin_info[i].bck_frame < temp) {
|
||||
if (m_getin_info[i].bck_frame < 60.0f) {
|
||||
m_getin_info[i].bck_frame += g_drawHIO.mMiniGame.mGetInTextAnimSpeed;
|
||||
if (m_getin_info[i].bck_frame > 60.0f) {
|
||||
m_getin_info[i].bck_frame = 60.0f;
|
||||
}
|
||||
} else if (m_getin_info[i].bck_frame < g_drawHIO.mMiniGame.mGetInTextWaitFrames + 60.0f) {
|
||||
m_getin_info[i].bck_frame++;
|
||||
} else if (m_getin_info[i].bck_frame < temp) {
|
||||
m_getin_info[i].bck_frame++;
|
||||
}
|
||||
}
|
||||
|
||||
if (m_getin_info[i].bck_frame > 0.0f && m_getin_info[i].bck_frame < temp) {
|
||||
f32 var_f29 = 1.0f;
|
||||
if (m_getin_info[i].bck_frame >= g_drawHIO.mMiniGame.mGetInTextWaitFrames + 60.0f &&
|
||||
m_getin_info[i].bck_frame < temp) {
|
||||
var_f29 = acc(g_drawHIO.mMiniGame.mGetInTextAlphaFrames,
|
||||
temp - m_getin_info[i].bck_frame, 0);
|
||||
}
|
||||
|
||||
if (m_getin_info[i].bck_frame < 60.0f) {
|
||||
playBckAnimation(m_getin_info[i].bck_frame);
|
||||
} else {
|
||||
playBckAnimation(60.0f);
|
||||
}
|
||||
|
||||
mpGetInParent->setAlphaRate(var_f29);
|
||||
|
||||
if (g_drawHIO.mMiniGame.mGetInTextLocation == 1) {
|
||||
mpGetInRoot->translate(m_getin_info[i].pos_x + g_drawHIO.mMiniGame.mGetInTextPosX,
|
||||
m_getin_info[i].pos_y + g_drawHIO.mMiniGame.mGetInTextPosY);
|
||||
} else {
|
||||
f32 temp_f2 = m_getin_info[i].bck_frame - 40.0f;
|
||||
f32 var_f3 = ((temp_f2 * 0.5f) * temp_f2) * 0.15f;
|
||||
if (i == 0) {
|
||||
var_f3 = 0.0f;
|
||||
}
|
||||
|
||||
mpGetInRoot->paneTrans(
|
||||
m_getin_info[i].pos_x + g_drawHIO.mMiniGame.mGetInTextPosX,
|
||||
(m_getin_info[i].pos_y + g_drawHIO.mMiniGame.mGetInTextPosY) - var_f3);
|
||||
}
|
||||
|
||||
mpGetInRoot->scale(g_drawHIO.mMiniGame.mGetInTextSizeX,
|
||||
g_drawHIO.mMiniGame.mGetInTextSizeY);
|
||||
mpGetInScreen->draw(0.0f, 0.0f, graf_ctx);
|
||||
|
||||
if (m_getin_info[i].pikari_frame > 0.0f) {
|
||||
drawPikari(i);
|
||||
} else if (m_getin_info[i].pikari_frame == -1.0f) {
|
||||
if (m_getin_info[i].field_0xc == 0) {
|
||||
if (m_getin_info[i].bck_frame > g_drawHIO.mMiniGame.mGetInPikariAppearFrames) {
|
||||
m_getin_info[i].pikari_frame =
|
||||
18.0f - g_drawHIO.mMiniGame.mGetInPikariAnimSpeed;
|
||||
}
|
||||
} else if (m_getin_info[i].bck_frame > g_drawHIO.mMiniGame.mStartPikariAppearFrames) {
|
||||
m_getin_info[i].pikari_frame =
|
||||
18.0f - g_drawHIO.mMiniGame.mStartPikariAnimSpeed;
|
||||
}
|
||||
} else if (m_getin_info[i].bck_frame > g_drawHIO.mMiniGame.mStartPikariAppearFrames) {
|
||||
m_getin_info[i].pikari_frame =
|
||||
18.0f - g_drawHIO.mMiniGame.mStartPikariAnimSpeed;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -64,11 +64,9 @@ bool g_enabled = false;
|
||||
bool g_recording = false;
|
||||
bool g_interpolating = false;
|
||||
bool g_sync_presentation = false;
|
||||
uint32_t g_presentation_counter = 0;
|
||||
|
||||
float g_step = 0.0f;
|
||||
uint32_t g_pending_presentation_ui_ticks = 0;
|
||||
uint32_t g_current_presentation_ui_ticks = 0;
|
||||
bool g_ui_tick_pending = false;
|
||||
|
||||
Recording g_current_recording;
|
||||
Recording g_previous_recording;
|
||||
@@ -371,11 +369,6 @@ void interpolate(float step) {
|
||||
interpolate_branch(old_root, g_current_recording.root, g_step);
|
||||
}
|
||||
|
||||
void notify_presentation_frame() {
|
||||
ensure_initialized();
|
||||
++g_presentation_counter;
|
||||
}
|
||||
|
||||
void request_presentation_sync() {
|
||||
ensure_initialized();
|
||||
if (!g_enabled) {
|
||||
@@ -396,33 +389,14 @@ float get_interpolation_step() {
|
||||
return presentation_sync_active() ? 1.0f : g_step;
|
||||
}
|
||||
|
||||
void notify_sim_tick_complete() {
|
||||
void set_ui_tick_pending(bool value) {
|
||||
if (g_ui_tick_pending == value) { return; }
|
||||
g_ui_tick_pending = value;
|
||||
}
|
||||
|
||||
bool get_ui_tick_pending() {
|
||||
ensure_initialized();
|
||||
g_pending_presentation_ui_ticks++;
|
||||
}
|
||||
|
||||
uint32_t begin_presentation_ui_pass() {
|
||||
ensure_initialized();
|
||||
g_current_presentation_ui_ticks = g_pending_presentation_ui_ticks;
|
||||
g_pending_presentation_ui_ticks = 0;
|
||||
return g_current_presentation_ui_ticks;
|
||||
}
|
||||
|
||||
uint32_t get_presentation_ui_advance_ticks() {
|
||||
if (!s_initialized) {
|
||||
return 0;
|
||||
}
|
||||
if (!g_enabled) {
|
||||
return 1;
|
||||
}
|
||||
return g_current_presentation_ui_ticks;
|
||||
}
|
||||
|
||||
void end_presentation_ui_pass() {
|
||||
if (!s_initialized) {
|
||||
return;
|
||||
}
|
||||
g_current_presentation_ui_ticks = 0;
|
||||
return g_enabled ? g_ui_tick_pending : true;
|
||||
}
|
||||
|
||||
void open_child(const void* key, int32_t id) {
|
||||
|
||||
+25
-89
@@ -471,72 +471,32 @@ void darwFilter(GXColor matColor) {
|
||||
GXEnd();
|
||||
}
|
||||
|
||||
#ifdef TARGET_PC
|
||||
static void mDoGph_AdvanceFadeState() {
|
||||
if (mDoGph_gInf_c::isFade() != 0) {
|
||||
f32 fade_rate = mDoGph_gInf_c::getFadeRate() + mDoGph_gInf_c::getFadeSpeed();
|
||||
|
||||
if (fade_rate < 0.0f) {
|
||||
fade_rate = 0.0f;
|
||||
mDoGph_gInf_c::offFade();
|
||||
} else if (fade_rate > 1.0f) {
|
||||
fade_rate = 1.0f;
|
||||
}
|
||||
|
||||
mDoGph_gInf_c::setFadeRate(fade_rate);
|
||||
mDoGph_gInf_c::getFadeColor().a = 255.0f * fade_rate;
|
||||
} else {
|
||||
GXColor& fade_color = mDoGph_gInf_c::getFadeColor();
|
||||
if (dComIfG_getBrightness() != 255) {
|
||||
fade_color.r = 0;
|
||||
fade_color.g = 0;
|
||||
fade_color.b = 0;
|
||||
fade_color.a = 255 - dComIfG_getBrightness();
|
||||
} else {
|
||||
fade_color.a = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void mDoGph_AdvanceFadeState(u32 tick_count) {
|
||||
for (u32 i = 0; i < tick_count; ++i) {
|
||||
mDoGph_AdvanceFadeState();
|
||||
}
|
||||
}
|
||||
|
||||
static void mDoGph_DrawStoredFade() {
|
||||
GXColor& fade_color = mDoGph_gInf_c::getFadeColor();
|
||||
if (fade_color.a != 0) {
|
||||
darwFilter(fade_color);
|
||||
}
|
||||
}
|
||||
|
||||
void mDoGph_gInf_c::calcFade() {
|
||||
mDoGph_AdvanceFadeState();
|
||||
mDoGph_DrawStoredFade();
|
||||
}
|
||||
#else
|
||||
void mDoGph_gInf_c::calcFade() {
|
||||
if (mDoGph_gInf_c::mFade != 0) {
|
||||
mFadeRate += mFadeSpeed;
|
||||
#if TARGET_PC
|
||||
if (dusk::frame_interp::get_ui_tick_pending())
|
||||
#endif
|
||||
{
|
||||
if (mFade != 0) {
|
||||
mFadeRate += mFadeSpeed;
|
||||
|
||||
if (mFadeRate < 0.0f) {
|
||||
mFadeRate = 0.0f;
|
||||
mDoGph_gInf_c::mFade = 0;
|
||||
} else {
|
||||
if (mFadeRate > 1.0f) {
|
||||
mFadeRate = 1.0f;
|
||||
if (mFadeRate < 0.0f) {
|
||||
mFadeRate = 0.0f;
|
||||
mFade = 0;
|
||||
} else {
|
||||
if (mFadeRate > 1.0f) {
|
||||
mFadeRate = 1.0f;
|
||||
}
|
||||
}
|
||||
}
|
||||
mFadeColor.a = 255.0f * mFadeRate;
|
||||
} else {
|
||||
if (dComIfG_getBrightness() != 255) {
|
||||
mFadeColor.r = 0;
|
||||
mFadeColor.g = 0;
|
||||
mFadeColor.b = 0;
|
||||
mFadeColor.a = 255 - dComIfG_getBrightness();
|
||||
mFadeColor.a = 255.0f * mFadeRate;
|
||||
} else {
|
||||
mFadeColor.a = 0;
|
||||
if (dComIfG_getBrightness() != 255) {
|
||||
mFadeColor.r = 0;
|
||||
mFadeColor.g = 0;
|
||||
mFadeColor.b = 0;
|
||||
mFadeColor.a = 255 - dComIfG_getBrightness();
|
||||
} else {
|
||||
mFadeColor.a = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -544,7 +504,6 @@ void mDoGph_gInf_c::calcFade() {
|
||||
darwFilter(mFadeColor);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#if PLATFORM_WII || PLATFORM_SHIELD
|
||||
u32 mDoGph_gInf_c::csr_c::m_blurID;
|
||||
@@ -954,9 +913,6 @@ int mDoGph_AfterOfDraw() {
|
||||
|
||||
JUTVideo::getManager()->setRenderMode(mDoMch_render_c::getRenderModeObj());
|
||||
mDoGph_gInf_c::endFrame();
|
||||
#ifdef TARGET_PC
|
||||
dusk::frame_interp::notify_sim_tick_complete();
|
||||
#endif
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -2114,8 +2070,6 @@ int mDoGph_Painter() {
|
||||
|
||||
#if TARGET_PC
|
||||
dusk::g_imguiConsole.PreDraw();
|
||||
|
||||
const u32 pending_ui_ticks = dusk::frame_interp::begin_presentation_ui_pass();
|
||||
#endif
|
||||
|
||||
#if DEBUG
|
||||
@@ -2123,7 +2077,7 @@ int mDoGph_Painter() {
|
||||
#endif
|
||||
|
||||
#ifdef TARGET_PC
|
||||
for (u32 i = 0; i < pending_ui_ticks; ++i)
|
||||
if (dusk::frame_interp::get_ui_tick_pending())
|
||||
#endif
|
||||
{
|
||||
dComIfGp_particle_calcMenu();
|
||||
@@ -2214,7 +2168,7 @@ int mDoGph_Painter() {
|
||||
view_port->height);
|
||||
|
||||
#ifdef TARGET_PC
|
||||
// Frame interpolation: Call setViewMtx earlier so that it's interpolated in time for draw_info to use it
|
||||
// FRAME INTERP NOTE: Call setViewMtx earlier so that it's interpolated in time for draw_info to use it
|
||||
j3dSys.setViewMtx(camera_p->view.viewMtx);
|
||||
JPADrawInfo draw_info(j3dSys.getViewMtx(), camera_p->view.fovy, camera_p->view.aspect);
|
||||
#else
|
||||
@@ -2615,12 +2569,7 @@ int mDoGph_Painter() {
|
||||
if (strcmp(dComIfGp_getStartStageName(), "F_SP127") != 0 &&
|
||||
(mDoGph_gInf_c::isFade() & 0x80) == 0)
|
||||
{
|
||||
#ifdef TARGET_PC
|
||||
mDoGph_AdvanceFadeState(pending_ui_ticks);
|
||||
mDoGph_DrawStoredFade();
|
||||
#else
|
||||
mDoGph_gInf_c::calcFade();
|
||||
#endif
|
||||
}
|
||||
|
||||
#if DEBUG
|
||||
@@ -2686,7 +2635,7 @@ int mDoGph_Painter() {
|
||||
|
||||
GXSetClipMode(GX_CLIP_ENABLE);
|
||||
#if TARGET_PC
|
||||
for (u32 i = 0; i < pending_ui_ticks; ++i)
|
||||
if (dusk::frame_interp::get_ui_tick_pending())
|
||||
#endif
|
||||
{
|
||||
dDlst_list_c::calcWipe();
|
||||
@@ -2740,12 +2689,7 @@ int mDoGph_Painter() {
|
||||
|
||||
if (strcmp(dComIfGp_getStartStageName(), "F_SP127") == 0 || (mDoGph_gInf_c::isFade() & 0x80) != 0)
|
||||
{
|
||||
#ifdef TARGET_PC
|
||||
mDoGph_AdvanceFadeState(pending_ui_ticks);
|
||||
mDoGph_DrawStoredFade();
|
||||
#else
|
||||
mDoGph_gInf_c::calcFade();
|
||||
#endif
|
||||
}
|
||||
|
||||
GX_DEBUG_GROUP(dComIfGp_particle_draw2DmenuFore, &draw_info3);
|
||||
@@ -2778,18 +2722,10 @@ int mDoGph_Painter() {
|
||||
|
||||
#if TARGET_PC
|
||||
dusk::g_imguiConsole.PostDraw();
|
||||
|
||||
if (dusk::getSettings().game.enableFrameInterpolation) {
|
||||
JFWDisplay::getManager()->setFaderSimSteps(pending_ui_ticks);
|
||||
}
|
||||
#endif
|
||||
|
||||
mDoGph_gInf_c::endRender();
|
||||
|
||||
#ifdef TARGET_PC
|
||||
dusk::frame_interp::end_presentation_ui_pass();
|
||||
#endif
|
||||
|
||||
#if WIDESCREEN_SUPPORT
|
||||
mDoGph_gInf_c::offWideZoom();
|
||||
#endif
|
||||
|
||||
@@ -248,8 +248,8 @@ void main01(void) {
|
||||
}
|
||||
|
||||
if (dusk::getSettings().game.enableFrameInterpolation && !dusk::getTransientSettings().skipFrameRateLimit) {
|
||||
dusk::frame_interp::notify_presentation_frame();
|
||||
if (accumulator >= kSimStepSeconds) {
|
||||
dusk::frame_interp::set_ui_tick_pending(true);
|
||||
mDoCPd_c::read();
|
||||
dusk::gyro::read(kSimStepSeconds);
|
||||
fapGm_Execute();
|
||||
@@ -261,7 +261,9 @@ void main01(void) {
|
||||
dusk::frame_interp::PresentationCameraScope presentation_camera;
|
||||
cAPIGph_Painter();
|
||||
}
|
||||
dusk::frame_interp::set_ui_tick_pending(false);
|
||||
} else {
|
||||
dusk::frame_interp::set_ui_tick_pending(true);
|
||||
accumulator = 0.0f;
|
||||
|
||||
// Game Inputs
|
||||
|
||||
Reference in New Issue
Block a user