Switch to the Fetch API

This commit is contained in:
Patrick Walton 2017-08-12 10:08:35 -07:00
parent ee9c1a7998
commit d0dd883ddf
1 changed files with 35 additions and 42 deletions

View File

@ -91,14 +91,16 @@ class AppController {
pointSize: FONT_SIZE, pointSize: FONT_SIZE,
}; };
const xhr = new XMLHttpRequest; window.fetch(PARTITION_FONT_ENDPOINT_URL, {
xhr.addEventListener('load', () => { method: 'POST',
this.meshes = new PathfinderMeshes(xhr.responseText); headers: { 'Content-Type': 'application/json' },
this.meshesReceived(); body: JSON.stringify(request),
}, false); }).then((response) => {
xhr.open('POST', PARTITION_FONT_ENDPOINT_URL, true); response.text().then((encodedMeshes) => {
xhr.setRequestHeader('Content-Type', 'application/json'); this.meshes = new PathfinderMeshes(encodedMeshes);
xhr.send(JSON.stringify(request)); this.meshesReceived();
});
});
} }
meshesReceived() { meshesReceived() {
@ -134,43 +136,34 @@ class PathfinderView {
} }
loadShaders(): Promise<ShaderMap> { loadShaders(): Promise<ShaderMap> {
return new Promise((resolve, reject) => { let shaders: ShaderMap = {};
let shaders: ShaderMap = {}; const shaderKeys = Object.keys(SHADER_URLS);
const shaderKeys = Object.keys(SHADER_URLS);
let shaderKeysLeft = shaderKeys.length;
let loaded = (type: ShaderType, shaderKey: string, source: string) => { let promises = [];
const shader = this.gl.createShader(type); for (const shaderKey of shaderKeys) {
if (shader == null) for (const typeName of ['vertex', 'fragment'] as Array<ShaderTypeName>) {
throw new Error("Failed to create shader!"); const type = {
this.gl.shaderSource(shader, source); vertex: this.gl.VERTEX_SHADER,
this.gl.compileShader(shader); fragment: this.gl.FRAGMENT_SHADER,
if (!(shaderKey in shaders)) }[typeName];
shaders[shaderKey] = {};
shaders[shaderKey][type] = shader;
shaderKeysLeft--; const url = SHADER_URLS[shaderKey][typeName];
if (shaderKeysLeft == 0) promises.push(window.fetch(url).then((response) => {
resolve(shaders); return response.text().then((source) => {
}; const shader = this.gl.createShader(type);
if (shader == null)
for (const shaderKey of shaderKeys) { throw new Error("Failed to create shader!");
for (const typeName of ['vertex', 'fragment'] as Array<ShaderTypeName>) { this.gl.shaderSource(shader, source);
const type = { this.gl.compileShader(shader);
vertex: this.gl.VERTEX_SHADER, if (!(shaderKey in shaders))
fragment: this.gl.FRAGMENT_SHADER, shaders[shaderKey] = {};
}[typeName]; shaders[shaderKey][type] = shader;
});
const xhr = new XMLHttpRequest; }));
xhr.addEventListener('load',
() => loaded(type, shaderKey, xhr.responseText),
false);
xhr.addEventListener('error', () => reject(), false);
xhr.open('GET', SHADER_URLS[shaderKey][typeName], true);
xhr.send();
}
} }
}); }
return Promise.all(promises).then(() => shaders);
} }
linkShaders(shaders: ShaderMap): Promise<ShaderProgramMap> { linkShaders(shaders: ShaderMap): Promise<ShaderProgramMap> {