Fix screenshot for some cores

This commit is contained in:
Ethan O'Brien 2024-02-01 13:59:49 -06:00
parent f3611a00d6
commit 76c3ea1c0e
2 changed files with 21 additions and 12 deletions

View file

@ -175,7 +175,16 @@ class EJS_GameManager {
}
screenshot() {
this.functions.screenshot();
return this.FS.readFile('screenshot.png');
return new Promise(resolve => async {
while (1) {
try {
FS.stat("/screenshot.png");
return resolve(this.FS.readFile("/screenshot.png"));
} catch(e) {}
await new Promise(res => setTimeout(res, 50));
}
})
}
quickSave(slot) {
if (!slot) slot = 1;

View file

@ -661,7 +661,6 @@ class EmulatorJS {
});
}
let legacy = (this.supportsWebgl2 ? "" : "-legacy");
if ("n64" !== this.getCore(true)) legacy = "";
let filename = this.getCore()+(this.config.threads ? "-thread" : "")+legacy+"-wasm.data";
this.storage.core.get(filename).then((result) => {
if (result && result.version === this.version && !this.debug) {
@ -1320,15 +1319,16 @@ class EmulatorJS {
let screenshotUrl;
const screenshot = addButton("Take Screenshot", false, () => {
if (screenshotUrl) URL.revokeObjectURL(screenshotUrl);
const screenshot = this.gameManager.screenshot();
const blob = new Blob([screenshot]);
screenshotUrl = URL.createObjectURL(blob);
const a = this.createElement("a");
a.href = screenshotUrl;
const date = new Date();
a.download = this.getBaseFileName()+"-"+date.getMonth()+"-"+date.getDate()+"-"+date.getFullYear()+".png";
a.click();
hideMenu();
this.gameManager.screenshot().then(screenshot => {
const blob = new Blob([screenshot]);
screenshotUrl = URL.createObjectURL(blob);
const a = this.createElement("a");
a.href = screenshotUrl;
const date = new Date();
a.download = this.getBaseFileName()+"-"+date.getMonth()+"-"+date.getDate()+"-"+date.getFullYear()+".png";
a.click();
hideMenu();
});
});
let screenMediaRecorder = null;
@ -1709,7 +1709,7 @@ class EmulatorJS {
const saveState = addButton("Save State", '<svg viewBox="0 0 448 512"><path fill="currentColor" d="M433.941 129.941l-83.882-83.882A48 48 0 0 0 316.118 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V163.882a48 48 0 0 0-14.059-33.941zM224 416c-35.346 0-64-28.654-64-64 0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64zm96-304.52V212c0 6.627-5.373 12-12 12H76c-6.627 0-12-5.373-12-12V108c0-6.627 5.373-12 12-12h228.52c3.183 0 6.235 1.264 8.485 3.515l3.48 3.48A11.996 11.996 0 0 1 320 111.48z"/></svg>', async () => {
const state = await this.gameManager.getState();
const called = this.callEvent("save", {
screenshot: this.gameManager.screenshot(),
screenshot: await this.gameManager.screenshot(),
state: state
});
if (called > 0) return;