* move GL init to main thread
* fix potential bug causing the screen bitmap to be created twice
This commit is contained in:
parent
2d0d501d1f
commit
1f13d9ce80
|
@ -53,7 +53,7 @@ bool InitGLExtensions()
|
||||||
{
|
{
|
||||||
#define LOADPROC(type, name) \
|
#define LOADPROC(type, name) \
|
||||||
name = (PFN##type##PROC)Platform::GL_GetProcAddress(#name); \
|
name = (PFN##type##PROC)Platform::GL_GetProcAddress(#name); \
|
||||||
if (!name) return false;
|
if (!name) { printf("OpenGL: " #name " not found\n"); return false; }
|
||||||
|
|
||||||
LOADPROC(GLGENFRAMEBUFFERS, glGenFramebuffers);
|
LOADPROC(GLGENFRAMEBUFFERS, glGenFramebuffers);
|
||||||
LOADPROC(GLDELETEFRAMEBUFFERS, glDeleteFramebuffers);
|
LOADPROC(GLDELETEFRAMEBUFFERS, glDeleteFramebuffers);
|
||||||
|
|
|
@ -32,7 +32,7 @@ void *uiAlloc(size_t size, const char *type)
|
||||||
{
|
{
|
||||||
byteArray *out;
|
byteArray *out;
|
||||||
|
|
||||||
out = new byteArray(size, 0);
|
out = new byteArray(size, 0);//printf("alloc %s at %08X\n", type, rawBytes(out));
|
||||||
heap[rawBytes(out)] = out;
|
heap[rawBytes(out)] = out;
|
||||||
types[out] = type;
|
types[out] = type;
|
||||||
return rawBytes(out);
|
return rawBytes(out);
|
||||||
|
|
|
@ -120,7 +120,14 @@ void uiGLFreeContext(uiGLContext* ctx)
|
||||||
|
|
||||||
void uiGLMakeContextCurrent(uiGLContext* ctx)
|
void uiGLMakeContextCurrent(uiGLContext* ctx)
|
||||||
{
|
{
|
||||||
wglMakeCurrent(ctx->dc, ctx->rc);
|
if (ctx == NULL)
|
||||||
|
{
|
||||||
|
wglMakeCurrent(NULL, NULL);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (wglGetCurrentContext() == ctx->rc) return;
|
||||||
|
int res = wglMakeCurrent(ctx->dc, ctx->rc);
|
||||||
}
|
}
|
||||||
|
|
||||||
void *uiGLGetProcAddress(const char* proc)
|
void *uiGLGetProcAddress(const char* proc)
|
||||||
|
|
|
@ -60,6 +60,7 @@ char* EmuDirectory;
|
||||||
|
|
||||||
uiWindow* MainWindow;
|
uiWindow* MainWindow;
|
||||||
uiArea* MainDrawArea;
|
uiArea* MainDrawArea;
|
||||||
|
uiGLContext* GLContext;
|
||||||
|
|
||||||
int WindowWidth, WindowHeight;
|
int WindowWidth, WindowHeight;
|
||||||
|
|
||||||
|
@ -392,14 +393,7 @@ void FeedMicInput()
|
||||||
|
|
||||||
int EmuThreadFunc(void* burp)
|
int EmuThreadFunc(void* burp)
|
||||||
{
|
{
|
||||||
// TODO: fail gracefully, support older OpenGL, etc
|
uiGLMakeContextCurrent(GLContext);
|
||||||
uiGLContext* glctx = uiGLNewContext(uiControl(MainDrawArea), 4, 3); // haw haw haw
|
|
||||||
uiGLMakeContextCurrent(glctx);
|
|
||||||
|
|
||||||
void* testor = uiGLGetProcAddress("glUseProgram");
|
|
||||||
void* testor2 = uiGLGetProcAddress("glBindFramebuffer");
|
|
||||||
printf("OPENGL: %p %p\n", testor, testor2);
|
|
||||||
|
|
||||||
NDS::Init();
|
NDS::Init();
|
||||||
|
|
||||||
MainScreenPos[0] = 0;
|
MainScreenPos[0] = 0;
|
||||||
|
@ -407,7 +401,6 @@ int EmuThreadFunc(void* burp)
|
||||||
MainScreenPos[2] = 0;
|
MainScreenPos[2] = 0;
|
||||||
AutoScreenSizing = 0;
|
AutoScreenSizing = 0;
|
||||||
|
|
||||||
ScreenDrawInited = false;
|
|
||||||
Touching = false;
|
Touching = false;
|
||||||
KeyInputMask = 0xFFF;
|
KeyInputMask = 0xFFF;
|
||||||
HotkeyMask = 0;
|
HotkeyMask = 0;
|
||||||
|
@ -440,6 +433,8 @@ int EmuThreadFunc(void* burp)
|
||||||
{
|
{
|
||||||
EmuStatus = 1;
|
EmuStatus = 1;
|
||||||
|
|
||||||
|
uiGLMakeContextCurrent(GLContext);
|
||||||
|
|
||||||
SDL_JoystickUpdate();
|
SDL_JoystickUpdate();
|
||||||
|
|
||||||
if (Joystick)
|
if (Joystick)
|
||||||
|
@ -624,8 +619,6 @@ int EmuThreadFunc(void* burp)
|
||||||
NDS::DeInit();
|
NDS::DeInit();
|
||||||
Platform::LAN_DeInit();
|
Platform::LAN_DeInit();
|
||||||
|
|
||||||
uiGLFreeContext(glctx);
|
|
||||||
|
|
||||||
return 44203;
|
return 44203;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -634,8 +627,8 @@ void OnAreaDraw(uiAreaHandler* handler, uiArea* area, uiAreaDrawParams* params)
|
||||||
{
|
{
|
||||||
if (!ScreenDrawInited)
|
if (!ScreenDrawInited)
|
||||||
{
|
{
|
||||||
ScreenBitmap = uiDrawNewBitmap(params->Context, 256, 384);
|
|
||||||
ScreenDrawInited = true;
|
ScreenDrawInited = true;
|
||||||
|
ScreenBitmap = uiDrawNewBitmap(params->Context, 256, 384);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!ScreenBitmap) return;
|
if (!ScreenBitmap) return;
|
||||||
|
@ -1981,6 +1974,7 @@ int main(int argc, char** argv)
|
||||||
areahandler.KeyEvent = OnAreaKeyEvent;
|
areahandler.KeyEvent = OnAreaKeyEvent;
|
||||||
areahandler.Resize = OnAreaResize;
|
areahandler.Resize = OnAreaResize;
|
||||||
|
|
||||||
|
ScreenDrawInited = false;
|
||||||
MainDrawArea = uiNewArea(&areahandler);
|
MainDrawArea = uiNewArea(&areahandler);
|
||||||
uiWindowSetChild(MainWindow, uiControl(MainDrawArea));
|
uiWindowSetChild(MainWindow, uiControl(MainDrawArea));
|
||||||
uiControlSetMinSize(uiControl(MainDrawArea), 256, 384);
|
uiControlSetMinSize(uiControl(MainDrawArea), 256, 384);
|
||||||
|
@ -2011,6 +2005,15 @@ int main(int argc, char** argv)
|
||||||
|
|
||||||
OnSetScreenRotation(MenuItem_ScreenRot[ScreenRotation], MainWindow, (void*)&kScreenRot[ScreenRotation]);
|
OnSetScreenRotation(MenuItem_ScreenRot[ScreenRotation], MainWindow, (void*)&kScreenRot[ScreenRotation]);
|
||||||
|
|
||||||
|
// TODO: fail gracefully, support older OpenGL, etc
|
||||||
|
GLContext = uiGLNewContext(uiControl(MainDrawArea), 4, 3); // haw haw haw
|
||||||
|
uiGLMakeContextCurrent(GLContext);
|
||||||
|
|
||||||
|
void* testor = uiGLGetProcAddress("glUseProgram");
|
||||||
|
void* testor2 = uiGLGetProcAddress("glBindFramebuffer");
|
||||||
|
printf("OPENGL: %p %p\n", testor, testor2);
|
||||||
|
uiGLMakeContextCurrent(NULL);
|
||||||
|
|
||||||
SDL_AudioSpec whatIwant, whatIget;
|
SDL_AudioSpec whatIwant, whatIget;
|
||||||
memset(&whatIwant, 0, sizeof(SDL_AudioSpec));
|
memset(&whatIwant, 0, sizeof(SDL_AudioSpec));
|
||||||
whatIwant.freq = 47340;
|
whatIwant.freq = 47340;
|
||||||
|
@ -2092,6 +2095,8 @@ int main(int argc, char** argv)
|
||||||
|
|
||||||
if (MicWavBuffer) delete[] MicWavBuffer;
|
if (MicWavBuffer) delete[] MicWavBuffer;
|
||||||
|
|
||||||
|
uiGLFreeContext(GLContext);
|
||||||
|
|
||||||
Config::ScreenRotation = ScreenRotation;
|
Config::ScreenRotation = ScreenRotation;
|
||||||
Config::ScreenGap = ScreenGap;
|
Config::ScreenGap = ScreenGap;
|
||||||
Config::ScreenLayout = ScreenLayout;
|
Config::ScreenLayout = ScreenLayout;
|
||||||
|
|
Loading…
Reference in New Issue