einsteinx2 / wiiflow-lite-einstein-mod

My customizations to WiiFlow Lite, at first focusing on polishing the UI and UX. Attempting to keep as much source compatibility as possible. Original repo here: https://sourceforge.net/projects/wiiflow-lite/
4 stars 1 forks source link

Investigate game cover loading times and see if they can be improved #19

Open einsteinx2 opened 6 years ago

einsteinx2 commented 6 years ago

It's very possible that this is simply a limitation of the Wii's disk reading speed or texture rendering speed, but right now with HQ textures turned on for covers (which look great when zoomed in after selecting a game) you see a lot of white place-holder covers when you scroll quickly through the collection which doesn't look good.

Another option if it's impossible to load faster would be to use LQ covers for the main menu for faster loading, then when you stop on a game, load the HQ texture and use it when you select the game and zoom in the cover which is when they're actually necessary.

kaisersozeh commented 6 years ago

If you can modulate the rendering quality across the whole coverflow - A further option might be very low quality rendering for fast moving coverflows - better than a white loading cover and potentially evocative of speed - improving the UX

This might allow for higher quality renderings within the cached image files - even legible text on the reverse...

einsteinx2 commented 6 years ago

This fix would impact all coverflow interfaces as they all use the same code. And that's a great idea (and in fact when I was interviewing at Apple, one of my interview questions was about designing an interface to scroll through a long song file and display a pretty waveform and how to make it perform well, and one of my first suggestions was to load it lower quality while scrolling fast and then load in high quality as it slowed down!).

I've looked into this a couple times, but need to dig into it further. So currently there are two quality settings, low and high. I think the ultimate answer will be to slightly reduce the quality of the low setting and use it automatically any time you're scrolling or possibly always use it first then load in the high quality covers automatically after. I'll have to play around with it. Then I just remove the setting altogether and let it work automatically.

einsteinx2 commented 6 years ago

So talking to fledge68, it looks like with HQ covers on, the code should only be using HQ textures for the center cover. So either that code isn't working or something else is causing it to be so much slower.

I wonder if while scrolling it's constantly still trying to load an HQ cover for each cover that passes by the center... That's the only thing that immediately comes to mind as to how it could be so much slower. If that does turn out to be the case, maybe it's as simple as disabling it during scrolling.

for(j = 0; j <= bufferSize && !cf->m_moved && update && ret != CL_NOMEM; ++j)
{
    i = loopNum((j & 1) ? firstItem - (j + 1) / 2 : firstItem + j / 2, cf->m_items.size());
    cur_pos_hq = (hq_req && i == firstItem);
    if((!hq_req || !cur_pos_hq) && cf->m_items[i].state != STATE_Loading)
        continue;
    if((ret = cf->_loadCoverTex(i, cf->m_box, cur_pos_hq, false)) == CL_ERROR)
    {
    if ((ret = cf->_loadCoverTex(i, !cf->m_box, cur_pos_hq, false)) == CL_ERROR)
    {
        if((ret = cf->_loadCoverTex(i, cf->m_box, cur_pos_hq, true)) == CL_ERROR)
            cf->m_items[i].state = STATE_NoCover;
        }
    }
}

cur_pos_hq = (hq_req && i == firstItem); //means HQ for only first item which is the center cover

// and this if makes it so when a new cover moves to the center it will be reloaded as HQ. if you ever get a messed up cover move it to the center and it will // clear up do to the reload if((!hq_req || !cur_pos_hq) && cf->m_items.state != STATE_Loading) continue;