diff --git a/src/libui_sdl/libui/windows/draw.cpp b/src/libui_sdl/libui/windows/draw.cpp index c28af0c2..11ee048e 100644 --- a/src/libui_sdl/libui/windows/draw.cpp +++ b/src/libui_sdl/libui/windows/draw.cpp @@ -63,7 +63,16 @@ ID2D1HwndRenderTarget *makeHWNDRenderTarget(HWND hwnd) &hprops, &rt); if (hr != S_OK) - logHRESULT(L"error creating HWND render target", hr); + { + props.type = D2D1_RENDER_TARGET_TYPE_DEFAULT; + hr = d2dfactory->CreateHwndRenderTarget( + &props, + &hprops, + &rt); + if (hr != S_OK) + logHRESULT(L"error creating HWND render target", hr); + } + return rt; } @@ -523,9 +532,7 @@ uiDrawBitmap* uiDrawNewBitmap(uiDrawContext* c, int width, int height) D2D1_BITMAP_PROPERTIES bp2 = D2D1::BitmapProperties(); bp2.dpiX = 0; bp2.dpiY = 0; - bp2.pixelFormat = D2D1::PixelFormat(DXGI_FORMAT_R8G8B8A8_UNORM, D2D1_ALPHA_MODE_IGNORE); - //bp2.pixelFormat = D2D1::PixelFormat(DXGI_FORMAT_B8G8R8A8_UNORM, D2D1_ALPHA_MODE_IGNORE); - // TODO: fallback: convert to BGRA if needed (RGBA only works in hardware mode) + bp2.pixelFormat = D2D1::PixelFormat(DXGI_FORMAT_B8G8R8A8_UNORM, D2D1_ALPHA_MODE_IGNORE); c->rt->BeginDraw(); diff --git a/src/libui_sdl/main.cpp b/src/libui_sdl/main.cpp index ea745ffb..b9520456 100644 --- a/src/libui_sdl/main.cpp +++ b/src/libui_sdl/main.cpp @@ -38,6 +38,7 @@ uiArea* MainDrawArea; SDL_Thread* EmuThread; int EmuRunning; +bool ScreenDrawInited = false; SDL_mutex* ScreenMutex; uiDrawBitmap* ScreenBitmap = NULL; @@ -53,6 +54,7 @@ int EmuThreadFunc(void* burp) { NDS::Init(); + ScreenDrawInited = false; Touching = false; // DS: @@ -160,8 +162,13 @@ int EmuThreadFunc(void* burp) void OnAreaDraw(uiAreaHandler* handler, uiArea* area, uiAreaDrawParams* params) { - if (!ScreenBitmap) + if (!ScreenDrawInited) + { ScreenBitmap = uiDrawNewBitmap(params->Context, 256, 384); + ScreenDrawInited = true; + } + + if (!ScreenBitmap) return; uiRect dorp = {0, 0, 256, 384}; @@ -280,7 +287,7 @@ int main(int argc, char** argv) return 1; } - ScreenMutex = SDL_CreateMutex(); + //ScreenMutex = SDL_CreateMutex(); uiInitOptions ui_opt; memset(&ui_opt, 0, sizeof(uiInitOptions)); @@ -327,8 +334,8 @@ int main(int argc, char** argv) EmuRunning = 0; SDL_WaitThread(EmuThread, NULL); - SDL_DestroyMutex(ScreenMutex); - uiDrawFreeBitmap(ScreenBitmap); + //SDL_DestroyMutex(ScreenMutex); + if (ScreenBitmap) uiDrawFreeBitmap(ScreenBitmap); uiUninit(); SDL_Quit();