mirror of
https://github.com/Fledge68/WiiFlow_Lite.git
synced 2025-02-17 12:36:20 +01:00
-set the wait message priority to the highest, that should remove
the problem of the lagging wait message (since the wait message doesnt take much wii power wiiflows speed should be the same) -set down wait message stack and also removed the reallocation of the stack again and again on every display of it -added security check that the wait message thread is finished before removing the thread (should prevent freezes) -removed a few more unneeded lines of code
This commit is contained in:
parent
056c47124d
commit
6963b0c637
@ -44,9 +44,6 @@
|
|||||||
#define RF_NEWS_CHANNEL 0x48414741
|
#define RF_NEWS_CHANNEL 0x48414741
|
||||||
#define RF_FORECAST_CHANNEL 0x48414641
|
#define RF_FORECAST_CHANNEL 0x48414641
|
||||||
|
|
||||||
extern "C" void ShowError(const wstringEx &error);
|
|
||||||
#define error(x) //ShowError(x)
|
|
||||||
|
|
||||||
Channels::Channels()
|
Channels::Channels()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
#include "video.hpp"
|
#include "video.hpp"
|
||||||
#include "pngu.h"
|
#include "pngu.h"
|
||||||
@ -259,7 +260,7 @@ void CVideo::cleanup(void)
|
|||||||
_clearScreen();
|
_clearScreen();
|
||||||
VIDEO_SetBlack(TRUE);
|
VIDEO_SetBlack(TRUE);
|
||||||
VIDEO_Flush();
|
VIDEO_Flush();
|
||||||
|
hideWaitMessage();
|
||||||
GX_DrawDone();
|
GX_DrawDone();
|
||||||
GX_AbortFrame();
|
GX_AbortFrame();
|
||||||
|
|
||||||
@ -267,13 +268,13 @@ void CVideo::cleanup(void)
|
|||||||
{
|
{
|
||||||
if(m_aaBuffer[i].get())
|
if(m_aaBuffer[i].get())
|
||||||
m_aaBuffer[i].release();
|
m_aaBuffer[i].release();
|
||||||
|
m_aaBufferSize[i] = 0;
|
||||||
m_aaBufferSize[i] = 0;
|
|
||||||
}
|
}
|
||||||
for(u8 i = 0; i < m_defaultWaitMessages.size(); i++)
|
for(u8 i = 0; i < m_defaultWaitMessages.size(); i++)
|
||||||
{
|
|
||||||
m_defaultWaitMessages[i].data.release();
|
m_defaultWaitMessages[i].data.release();
|
||||||
}
|
if(waitThreadStack.get())
|
||||||
|
waitThreadStack.release();
|
||||||
|
|
||||||
free(MEM_K1_TO_K0(m_frameBuf[0]));
|
free(MEM_K1_TO_K0(m_frameBuf[0]));
|
||||||
free(MEM_K1_TO_K0(m_frameBuf[1]));
|
free(MEM_K1_TO_K0(m_frameBuf[1]));
|
||||||
free(m_stencil);
|
free(m_stencil);
|
||||||
@ -498,15 +499,14 @@ void CVideo::_showWaitMessages(CVideo *m)
|
|||||||
s16 currentLightLevel = 0;
|
s16 currentLightLevel = 0;
|
||||||
|
|
||||||
vector<STexture>::iterator waitItr = m->m_waitMessages.begin();
|
vector<STexture>::iterator waitItr = m->m_waitMessages.begin();
|
||||||
gprintf("Going to show a wait message screen, delay: %d, # images: %d\n", waitFrames, m->m_waitMessages.size());
|
|
||||||
m->_clearScreen();
|
m->_clearScreen();
|
||||||
|
|
||||||
m->prepare();
|
m->prepare();
|
||||||
m->setup2DProjection();
|
m->setup2DProjection();
|
||||||
GX_SetNumChans(0);
|
|
||||||
wiiLightSetLevel(0);
|
wiiLightSetLevel(0);
|
||||||
wiiLightOn();
|
wiiLightOn();
|
||||||
|
|
||||||
|
gprintf("Wait Message Thread: Start\nDelay: %d, Images: %d\n", waitFrames, m->m_waitMessages.size());
|
||||||
while(m->m_showWaitMessage)
|
while(m->m_showWaitMessage)
|
||||||
{
|
{
|
||||||
currentLightLevel += (fadeStep * fadeDirection);
|
currentLightLevel += (fadeStep * fadeDirection);
|
||||||
@ -530,38 +530,27 @@ void CVideo::_showWaitMessages(CVideo *m)
|
|||||||
waitItr = m->m_waitMessages.begin();
|
waitItr = m->m_waitMessages.begin();
|
||||||
waitFrames = frames;
|
waitFrames = frames;
|
||||||
}
|
}
|
||||||
VIDEO_WaitVSync();
|
else
|
||||||
|
VIDEO_WaitVSync();
|
||||||
waitFrames--;
|
waitFrames--;
|
||||||
}
|
}
|
||||||
wiiLightOff();
|
wiiLightOff();
|
||||||
GX_SetNumChans(1);
|
gprintf("Wait Message Thread: End\n");
|
||||||
m->m_showingWaitMessages = false;
|
m->m_showingWaitMessages = false;
|
||||||
gprintf("Stop showing images\n");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CVideo::hideWaitMessage()
|
void CVideo::hideWaitMessage()
|
||||||
{
|
{
|
||||||
m_showWaitMessage = false;
|
m_showWaitMessage = false;
|
||||||
CheckWaitThread();
|
if(waitThread != LWP_THREAD_NULL)
|
||||||
wiiLightOff();
|
|
||||||
}
|
|
||||||
|
|
||||||
void CVideo::CheckWaitThread(bool force)
|
|
||||||
{
|
|
||||||
if ((!m_showingWaitMessages && waitThread != LWP_THREAD_NULL) || force)
|
|
||||||
{
|
{
|
||||||
m_showWaitMessage = false;
|
|
||||||
gprintf("Now hide wait message\n");
|
|
||||||
|
|
||||||
if(LWP_ThreadIsSuspended(waitThread))
|
if(LWP_ThreadIsSuspended(waitThread))
|
||||||
LWP_ResumeThread(waitThread);
|
LWP_ResumeThread(waitThread);
|
||||||
|
while(m_showingWaitMessages)
|
||||||
|
usleep(100);
|
||||||
LWP_JoinThread(waitThread, NULL);
|
LWP_JoinThread(waitThread, NULL);
|
||||||
|
|
||||||
if(waitThreadStack.get())
|
|
||||||
waitThreadStack.release();
|
|
||||||
waitThread = LWP_THREAD_NULL;
|
|
||||||
}
|
}
|
||||||
|
waitThread = LWP_THREAD_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CVideo::waitMessage(float delay)
|
void CVideo::waitMessage(float delay)
|
||||||
@ -602,9 +591,9 @@ void CVideo::waitMessage(const vector<STexture> &tex, float delay)
|
|||||||
else if(m_waitMessages.size() > 1)
|
else if(m_waitMessages.size() > 1)
|
||||||
{
|
{
|
||||||
m_showWaitMessage = true;
|
m_showWaitMessage = true;
|
||||||
u32 stack_size = (u32)32768;
|
if(!waitThreadStack.get())
|
||||||
waitThreadStack = smartMem2Alloc(stack_size);
|
waitThreadStack = smartMem2Alloc(8092);
|
||||||
LWP_CreateThread(&waitThread, (void *(*)(void *))CVideo::_showWaitMessages, (void *)this, waitThreadStack.get(), stack_size, LWP_PRIO_IDLE);
|
LWP_CreateThread(&waitThread, (void *(*)(void *))CVideo::_showWaitMessages, (void *)this, waitThreadStack.get(), 8092, LWP_PRIO_HIGHEST);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -64,7 +64,7 @@ public:
|
|||||||
bool wide(void) const { return m_wide; }
|
bool wide(void) const { return m_wide; }
|
||||||
bool vid_50hz(void) const { return m_50hz; }
|
bool vid_50hz(void) const { return m_50hz; }
|
||||||
u8 getAA(void) const { return m_aa; }
|
u8 getAA(void) const { return m_aa; }
|
||||||
bool showingWaitMessage() { return m_showingWaitMessages; }
|
bool showingWaitMessage() { return m_showingWaitMessages || m_showWaitMessage; }
|
||||||
void set2DViewport(u32 w, u32 h, int x, int y);
|
void set2DViewport(u32 w, u32 h, int x, int y);
|
||||||
void prepareStencil(void);
|
void prepareStencil(void);
|
||||||
void renderStencil(void);
|
void renderStencil(void);
|
||||||
@ -73,7 +73,6 @@ public:
|
|||||||
void waitMessage(float delay);
|
void waitMessage(float delay);
|
||||||
void waitMessage(const vector<STexture> &tex, float delay);
|
void waitMessage(const vector<STexture> &tex, float delay);
|
||||||
void waitMessage(const STexture &tex);
|
void waitMessage(const STexture &tex);
|
||||||
void CheckWaitThread(bool force = false);
|
|
||||||
s32 TakeScreenshot(const char *);
|
s32 TakeScreenshot(const char *);
|
||||||
void shiftViewPort(float x, float y);
|
void shiftViewPort(float x, float y);
|
||||||
private:
|
private:
|
||||||
|
@ -23,11 +23,8 @@ CMenu *mainMenu;
|
|||||||
|
|
||||||
extern "C"
|
extern "C"
|
||||||
{
|
{
|
||||||
extern void __exception_setreload(int t);
|
extern void __exception_setreload(int t);
|
||||||
extern int mainIOS;
|
extern int mainIOS;
|
||||||
|
|
||||||
void ShowError(const wstringEx &error) { mainMenu->error(error); }
|
|
||||||
void HideWaitMessage() { mainMenu->_hideWaitMessage(); }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
|
@ -510,7 +510,6 @@ void CMenu::cleanup(bool hb)
|
|||||||
|
|
||||||
if(!hb)
|
if(!hb)
|
||||||
DeviceHandler::DestroyInstance();
|
DeviceHandler::DestroyInstance();
|
||||||
m_vid.CheckWaitThread(true);
|
|
||||||
m_vid.cleanup();
|
m_vid.cleanup();
|
||||||
m_cf.shutdown();
|
m_cf.shutdown();
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user