From da3e93a942f7e01d3d26b48d403ba091667d1404 Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Wed, 31 Oct 2018 14:40:20 +0100 Subject: view: more refactoring --- src/view/MapLoader.ts | 31 ++----------------------------- src/view/util/image.ts | 29 +++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 29 deletions(-) create mode 100644 src/view/util/image.ts diff --git a/src/view/MapLoader.ts b/src/view/MapLoader.ts index a35eeec..c3504e3 100644 --- a/src/view/MapLoader.ts +++ b/src/view/MapLoader.ts @@ -1,4 +1,5 @@ -import { mapValues, mapValuesAsync, nextPowerOf2 } from '../util'; +import { loadImages, mkTexture } from 'util/image'; +import { mapValues, nextPowerOf2 } from '../util'; import { TileCoords } from './tile'; @@ -11,38 +12,10 @@ export interface TileMap { tiles: Map; } -function loadImage(url: string): Promise { - return new Promise((resolve, reject) => { - const img = new Image(); - img.addEventListener('load', () => { resolve(img); }); - img.addEventListener('error', () => { reject(Error('failed to load ' + url)); }); - img.src = url; - }); -} - -function loadImages(urls: Map): Promise> { - return mapValuesAsync(loadImage, urls); -} - function loadTiles(tiles: Map): Promise> { return loadImages(mapValues((t) => `resources/sprite/tile/${t}.png`, tiles)); } -function mkTexture(gl: WebGLRenderingContext, src: HTMLCanvasElement|HTMLImageElement): WebGLTexture { - const texture = gl.createTexture(); - if (!texture) - throw new Error('unable to create texture'); - - gl.bindTexture(gl.TEXTURE_2D, texture); - gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, src); - gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); - gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); - gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST); - gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST); - - return texture; -} - function mkTileMap( gl: WebGLRenderingContext, tiles: Map, diff --git a/src/view/util/image.ts b/src/view/util/image.ts new file mode 100644 index 0000000..50debde --- /dev/null +++ b/src/view/util/image.ts @@ -0,0 +1,29 @@ +import { mapValuesAsync } from '../../util'; + +export function loadImage(url: string): Promise { + return new Promise((resolve, reject) => { + const img = new Image(); + img.addEventListener('load', () => { resolve(img); }); + img.addEventListener('error', () => { reject(new Error('failed to load ' + url)); }); + img.src = url; + }); +} + +export function loadImages(urls: Map): Promise> { + return mapValuesAsync(loadImage, urls); +} + +export function mkTexture(gl: WebGLRenderingContext, src: HTMLCanvasElement|HTMLImageElement): WebGLTexture { + const texture = gl.createTexture(); + if (!texture) + throw new Error('unable to create texture'); + + gl.bindTexture(gl.TEXTURE_2D, texture); + gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, src); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST); + + return texture; +} -- cgit v1.2.3