Added viDestroyManagedLayer, only zero initialized field of ViLayer when closing

This commit is contained in:
averne 2019-07-24 20:13:38 +02:00
parent b59682652d
commit ef3eec43b4
2 changed files with 34 additions and 1 deletions

View File

@ -90,6 +90,7 @@ Result viSetLayerSize(ViLayer *layer, u64 width, u64 height);
Result viSetLayerZ(ViLayer *layer, u64 z); Result viSetLayerZ(ViLayer *layer, u64 z);
Result viSetLayerPosition(ViLayer *layer, float x, float y); Result viSetLayerPosition(ViLayer *layer, float x, float y);
Result viCloseLayer(ViLayer *layer); Result viCloseLayer(ViLayer *layer);
Result viDestroyManagedLayer(ViLayer *layer);
Result viSetLayerScalingMode(ViLayer *layer, ViScalingMode scaling_mode); Result viSetLayerScalingMode(ViLayer *layer, ViScalingMode scaling_mode);

View File

@ -615,6 +615,38 @@ Result viCreateManagedLayer(const ViDisplay *display, ViLayerFlags layer_flags,
return rc; return rc;
} }
Result viDestroyManagedLayer(ViLayer *layer) {
IpcCommand c;
ipcInitialize(&c);
struct {
u64 magic;
u64 cmd_id;
u64 layer_id;
} *raw;
raw = ipcPrepareHeader(&c, sizeof(*raw));
raw->magic = SFCI_MAGIC;
raw->cmd_id = 2011;
raw->layer_id = layer->layer_id;
Result rc = serviceIpcDispatch(&g_viIManagerDisplayService);
if (R_SUCCEEDED(rc)) {
IpcParsedCommand r;
ipcParse(&r);
struct {
u64 magic;
u64 result;
} *resp = r.Raw;
rc = resp->result;
}
return rc;
}
Result viSetContentVisibility(bool v) { Result viSetContentVisibility(bool v) {
IpcCommand c; IpcCommand c;
ipcInitialize(&c); ipcInitialize(&c);
@ -960,7 +992,7 @@ Result viCloseLayer(ViLayer *layer)
} *resp = r.Raw; } *resp = r.Raw;
rc = resp->result; rc = resp->result;
memset(layer, 0, sizeof(ViLayer)); layer->initialized = false;
} }
return rc; return rc;