libnx/nx/source/display/default_window.c
fincs 970d982e57
Add diagAbortWithResult, see details:
- This is a (weak/overridable) function meant to be called when the
  program encounters an unrecoverable error, but it's not fatal enough
  to bring down the entire system with it.
- The default implementation uses svcBreak, passing the result code
  in the user buffer.
- Replaced all usages of fatalThrow with diagAbortWithResult throughout
  the entire library.
2020-10-29 13:40:35 +01:00

55 lines
1.5 KiB
C

#include <string.h>
#include "types.h"
#include "result.h"
#include "services/vi.h"
#include "runtime/diag.h"
#include "display/binder.h"
#include "display/buffer_producer.h"
#include "display/native_window.h"
#include "nvidia/graphic_buffer.h"
static ViDisplay g_viDisplay;
static ViLayer g_viLayer;
static NWindow g_defaultWin;
NWindow* nwindowGetDefault(void)
{
return &g_defaultWin;
}
void __nx_win_init(void)
{
Result rc;
rc = viInitialize(ViServiceType_Default);
if (R_SUCCEEDED(rc)) {
rc = viOpenDefaultDisplay(&g_viDisplay);
if (R_SUCCEEDED(rc)) {
rc = viCreateLayer(&g_viDisplay, &g_viLayer);
if (R_SUCCEEDED(rc)) {
rc = viSetLayerScalingMode(&g_viLayer, ViScalingMode_FitToLayer);
if (R_SUCCEEDED(rc)) {
rc = nwindowCreateFromLayer(&g_defaultWin, &g_viLayer);
if (R_SUCCEEDED(rc))
nwindowSetDimensions(&g_defaultWin, 1280, 720);
}
if (R_FAILED(rc))
viCloseLayer(&g_viLayer);
}
if (R_FAILED(rc))
viCloseDisplay(&g_viDisplay);
}
if (R_FAILED(rc))
viExit();
}
if (R_FAILED(rc))
diagAbortWithResult(MAKERESULT(Module_Libnx, LibnxError_BadGfxInit));
}
void __nx_win_exit(void)
{
nwindowClose(&g_defaultWin);
viCloseLayer(&g_viLayer);
viCloseDisplay(&g_viDisplay);
viExit();
}