@pixagram/renderart 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../pkg/renderart_wasm.js","../src/crt-gpu.ts","../src/hex-gpu.ts","../src/wasm-loader.ts","../src/renderart.ts"],"names":["ptr","VERTEX_SHADER","FRAGMENT_SHADER","wasm"],"mappings":"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","file":"index.mjs","sourcesContent":["let wasm;\n\nfunction _assertClass(instance, klass) {\n if (!(instance instanceof klass)) {\n throw new Error(`expected instance of ${klass.name}`);\n }\n}\n\nfunction getArrayU32FromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n return getUint32ArrayMemory0().subarray(ptr / 4, ptr / 4 + len);\n}\n\nlet cachedDataViewMemory0 = null;\nfunction getDataViewMemory0() {\n if (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer.detached === true || (cachedDataViewMemory0.buffer.detached === undefined && cachedDataViewMemory0.buffer !== wasm.memory.buffer)) {\n cachedDataViewMemory0 = new DataView(wasm.memory.buffer);\n }\n return cachedDataViewMemory0;\n}\n\nfunction getStringFromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n return decodeText(ptr, len);\n}\n\nlet cachedUint32ArrayMemory0 = null;\nfunction getUint32ArrayMemory0() {\n if (cachedUint32ArrayMemory0 === null || cachedUint32ArrayMemory0.byteLength === 0) {\n cachedUint32ArrayMemory0 = new Uint32Array(wasm.memory.buffer);\n }\n return cachedUint32ArrayMemory0;\n}\n\nlet cachedUint8ArrayMemory0 = null;\nfunction getUint8ArrayMemory0() {\n if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) {\n cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer);\n }\n return cachedUint8ArrayMemory0;\n}\n\nfunction passArray8ToWasm0(arg, malloc) {\n const ptr = malloc(arg.length * 1, 1) >>> 0;\n getUint8ArrayMemory0().set(arg, ptr / 1);\n WASM_VECTOR_LEN = arg.length;\n return ptr;\n}\n\nfunction passStringToWasm0(arg, malloc, realloc) {\n if (realloc === undefined) {\n const buf = cachedTextEncoder.encode(arg);\n const ptr = malloc(buf.length, 1) >>> 0;\n getUint8ArrayMemory0().subarray(ptr, ptr + buf.length).set(buf);\n WASM_VECTOR_LEN = buf.length;\n return ptr;\n }\n\n let len = arg.length;\n let ptr = malloc(len, 1) >>> 0;\n\n const mem = getUint8ArrayMemory0();\n\n let offset = 0;\n\n for (; offset < len; offset++) {\n const code = arg.charCodeAt(offset);\n if (code > 0x7F) break;\n mem[ptr + offset] = code;\n }\n if (offset !== len) {\n if (offset !== 0) {\n arg = arg.slice(offset);\n }\n ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0;\n const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len);\n const ret = cachedTextEncoder.encodeInto(arg, view);\n\n offset += ret.written;\n ptr = realloc(ptr, len, offset, 1) >>> 0;\n }\n\n WASM_VECTOR_LEN = offset;\n return ptr;\n}\n\nfunction takeFromExternrefTable0(idx) {\n const value = wasm.__wbindgen_externrefs.get(idx);\n wasm.__externref_table_dealloc(idx);\n return value;\n}\n\nlet cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });\ncachedTextDecoder.decode();\nconst MAX_SAFARI_DECODE_BYTES = 2146435072;\nlet numBytesDecoded = 0;\nfunction decodeText(ptr, len) {\n numBytesDecoded += len;\n if (numBytesDecoded >= MAX_SAFARI_DECODE_BYTES) {\n cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });\n cachedTextDecoder.decode();\n numBytesDecoded = len;\n }\n return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len));\n}\n\nconst cachedTextEncoder = new TextEncoder();\n\nif (!('encodeInto' in cachedTextEncoder)) {\n cachedTextEncoder.encodeInto = function (arg, view) {\n const buf = cachedTextEncoder.encode(arg);\n view.set(buf);\n return {\n read: arg.length,\n written: buf.length\n };\n }\n}\n\nlet WASM_VECTOR_LEN = 0;\n\nconst CrtConfigFinalization = (typeof FinalizationRegistry === 'undefined')\n ? { register: () => {}, unregister: () => {} }\n : new FinalizationRegistry(ptr => wasm.__wbg_crtconfig_free(ptr >>> 0, 1));\n\nconst HexConfigFinalization = (typeof FinalizationRegistry === 'undefined')\n ? { register: () => {}, unregister: () => {} }\n : new FinalizationRegistry(ptr => wasm.__wbg_hexconfig_free(ptr >>> 0, 1));\n\nconst UpscaleResultFinalization = (typeof FinalizationRegistry === 'undefined')\n ? { register: () => {}, unregister: () => {} }\n : new FinalizationRegistry(ptr => wasm.__wbg_upscaleresult_free(ptr >>> 0, 1));\n\nconst XbrzConfigFinalization = (typeof FinalizationRegistry === 'undefined')\n ? { register: () => {}, unregister: () => {} }\n : new FinalizationRegistry(ptr => wasm.__wbg_xbrzconfig_free(ptr >>> 0, 1));\n\n/**\n * CRT configuration options\n */\nexport class CrtConfig {\n static __wrap(ptr) {\n ptr = ptr >>> 0;\n const obj = Object.create(CrtConfig.prototype);\n obj.__wbg_ptr = ptr;\n CrtConfigFinalization.register(obj, obj.__wbg_ptr, obj);\n return obj;\n }\n __destroy_into_raw() {\n const ptr = this.__wbg_ptr;\n this.__wbg_ptr = 0;\n CrtConfigFinalization.unregister(this);\n return ptr;\n }\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_crtconfig_free(ptr, 0);\n }\n /**\n * Horizontal warp intensity (0.0 - 0.1)\n * @returns {number}\n */\n get warp_x() {\n const ret = wasm.__wbg_get_crtconfig_warp_x(this.__wbg_ptr);\n return ret;\n }\n /**\n * Horizontal warp intensity (0.0 - 0.1)\n * @param {number} arg0\n */\n set warp_x(arg0) {\n wasm.__wbg_set_crtconfig_warp_x(this.__wbg_ptr, arg0);\n }\n /**\n * Vertical warp intensity (0.0 - 0.1)\n * @returns {number}\n */\n get warp_y() {\n const ret = wasm.__wbg_get_crtconfig_warp_y(this.__wbg_ptr);\n return ret;\n }\n /**\n * Vertical warp intensity (0.0 - 0.1)\n * @param {number} arg0\n */\n set warp_y(arg0) {\n wasm.__wbg_set_crtconfig_warp_y(this.__wbg_ptr, arg0);\n }\n /**\n * Scanline hardness (-10.0 to 0.0, more negative = sharper)\n * @returns {number}\n */\n get scan_hardness() {\n const ret = wasm.__wbg_get_crtconfig_scan_hardness(this.__wbg_ptr);\n return ret;\n }\n /**\n * Scanline hardness (-10.0 to 0.0, more negative = sharper)\n * @param {number} arg0\n */\n set scan_hardness(arg0) {\n wasm.__wbg_set_crtconfig_scan_hardness(this.__wbg_ptr, arg0);\n }\n /**\n * Scanline opacity (0.0 - 1.0)\n * @returns {number}\n */\n get scan_opacity() {\n const ret = wasm.__wbg_get_crtconfig_scan_opacity(this.__wbg_ptr);\n return ret;\n }\n /**\n * Scanline opacity (0.0 - 1.0)\n * @param {number} arg0\n */\n set scan_opacity(arg0) {\n wasm.__wbg_set_crtconfig_scan_opacity(this.__wbg_ptr, arg0);\n }\n /**\n * Shadow mask opacity (0.0 - 1.0)\n * @returns {number}\n */\n get mask_opacity() {\n const ret = wasm.__wbg_get_crtconfig_mask_opacity(this.__wbg_ptr);\n return ret;\n }\n /**\n * Shadow mask opacity (0.0 - 1.0)\n * @param {number} arg0\n */\n set mask_opacity(arg0) {\n wasm.__wbg_set_crtconfig_mask_opacity(this.__wbg_ptr, arg0);\n }\n /**\n * Enable barrel distortion\n * @returns {boolean}\n */\n get enable_warp() {\n const ret = wasm.__wbg_get_crtconfig_enable_warp(this.__wbg_ptr);\n return ret !== 0;\n }\n /**\n * Enable barrel distortion\n * @param {boolean} arg0\n */\n set enable_warp(arg0) {\n wasm.__wbg_set_crtconfig_enable_warp(this.__wbg_ptr, arg0);\n }\n /**\n * Enable scanlines\n * @returns {boolean}\n */\n get enable_scanlines() {\n const ret = wasm.__wbg_get_crtconfig_enable_scanlines(this.__wbg_ptr);\n return ret !== 0;\n }\n /**\n * Enable scanlines\n * @param {boolean} arg0\n */\n set enable_scanlines(arg0) {\n wasm.__wbg_set_crtconfig_enable_scanlines(this.__wbg_ptr, arg0);\n }\n /**\n * Enable shadow mask\n * @returns {boolean}\n */\n get enable_mask() {\n const ret = wasm.__wbg_get_crtconfig_enable_mask(this.__wbg_ptr);\n return ret !== 0;\n }\n /**\n * Enable shadow mask\n * @param {boolean} arg0\n */\n set enable_mask(arg0) {\n wasm.__wbg_set_crtconfig_enable_mask(this.__wbg_ptr, arg0);\n }\n constructor() {\n const ret = wasm.crtconfig_new();\n this.__wbg_ptr = ret >>> 0;\n CrtConfigFinalization.register(this, this.__wbg_ptr, this);\n return this;\n }\n /**\n * Create preset: Authentic CRT look\n * @returns {CrtConfig}\n */\n static preset_authentic() {\n const ret = wasm.crtconfig_preset_authentic();\n return CrtConfig.__wrap(ret);\n }\n /**\n * Create preset: Subtle modern look\n * @returns {CrtConfig}\n */\n static preset_subtle() {\n const ret = wasm.crtconfig_preset_subtle();\n return CrtConfig.__wrap(ret);\n }\n /**\n * Create preset: Flat screen (no curvature)\n * @returns {CrtConfig}\n */\n static preset_flat() {\n const ret = wasm.crtconfig_preset_flat();\n return CrtConfig.__wrap(ret);\n }\n}\nif (Symbol.dispose) CrtConfig.prototype[Symbol.dispose] = CrtConfig.prototype.free;\n\n/**\n * Configuration for hexagonal upscaling\n */\nexport class HexConfig {\n static __wrap(ptr) {\n ptr = ptr >>> 0;\n const obj = Object.create(HexConfig.prototype);\n obj.__wbg_ptr = ptr;\n HexConfigFinalization.register(obj, obj.__wbg_ptr, obj);\n return obj;\n }\n __destroy_into_raw() {\n const ptr = this.__wbg_ptr;\n this.__wbg_ptr = 0;\n HexConfigFinalization.unregister(this);\n return ptr;\n }\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_hexconfig_free(ptr, 0);\n }\n /**\n * Hexagon orientation\n * @returns {HexOrientation}\n */\n get orientation() {\n const ret = wasm.__wbg_get_hexconfig_orientation(this.__wbg_ptr);\n return ret;\n }\n /**\n * Hexagon orientation\n * @param {HexOrientation} arg0\n */\n set orientation(arg0) {\n wasm.__wbg_set_hexconfig_orientation(this.__wbg_ptr, arg0);\n }\n /**\n * Draw hexagon borders\n * @returns {boolean}\n */\n get draw_borders() {\n const ret = wasm.__wbg_get_hexconfig_draw_borders(this.__wbg_ptr);\n return ret !== 0;\n }\n /**\n * Draw hexagon borders\n * @param {boolean} arg0\n */\n set draw_borders(arg0) {\n wasm.__wbg_set_hexconfig_draw_borders(this.__wbg_ptr, arg0);\n }\n /**\n * Border color (RGBA packed as u32: 0xRRGGBBAA)\n * @returns {number}\n */\n get border_color() {\n const ret = wasm.__wbg_get_hexconfig_border_color(this.__wbg_ptr);\n return ret >>> 0;\n }\n /**\n * Border color (RGBA packed as u32: 0xRRGGBBAA)\n * @param {number} arg0\n */\n set border_color(arg0) {\n wasm.__wbg_set_hexconfig_border_color(this.__wbg_ptr, arg0);\n }\n /**\n * Border thickness in pixels\n * @returns {number}\n */\n get border_thickness() {\n const ret = wasm.__wbg_get_hexconfig_border_thickness(this.__wbg_ptr);\n return ret >>> 0;\n }\n /**\n * Border thickness in pixels\n * @param {number} arg0\n */\n set border_thickness(arg0) {\n wasm.__wbg_set_hexconfig_border_thickness(this.__wbg_ptr, arg0);\n }\n /**\n * Background color (RGBA packed as u32)\n * @returns {number}\n */\n get background_color() {\n const ret = wasm.__wbg_get_hexconfig_background_color(this.__wbg_ptr);\n return ret >>> 0;\n }\n /**\n * Background color (RGBA packed as u32)\n * @param {number} arg0\n */\n set background_color(arg0) {\n wasm.__wbg_set_hexconfig_background_color(this.__wbg_ptr, arg0);\n }\n constructor() {\n const ret = wasm.hexconfig_new();\n this.__wbg_ptr = ret >>> 0;\n HexConfigFinalization.register(this, this.__wbg_ptr, this);\n return this;\n }\n /**\n * Create preset with borders\n * @returns {HexConfig}\n */\n static preset_bordered() {\n const ret = wasm.hexconfig_preset_bordered();\n return HexConfig.__wrap(ret);\n }\n /**\n * Create preset for pointy-top hexagons\n * @returns {HexConfig}\n */\n static preset_pointy() {\n const ret = wasm.hexconfig_preset_pointy();\n return HexConfig.__wrap(ret);\n }\n}\nif (Symbol.dispose) HexConfig.prototype[Symbol.dispose] = HexConfig.prototype.free;\n\n/**\n * Hexagon orientation type\n * @enum {0 | 1}\n */\nexport const HexOrientation = Object.freeze({\n /**\n * Flat edge at top, vertices on left/right\n */\n FlatTop: 0, \"0\": \"FlatTop\",\n /**\n * Vertex at top, flat edges on left/right\n */\n PointyTop: 1, \"1\": \"PointyTop\",\n});\n\n/**\n * Result container for upscaled image data\n */\nexport class UpscaleResult {\n static __wrap(ptr) {\n ptr = ptr >>> 0;\n const obj = Object.create(UpscaleResult.prototype);\n obj.__wbg_ptr = ptr;\n UpscaleResultFinalization.register(obj, obj.__wbg_ptr, obj);\n return obj;\n }\n __destroy_into_raw() {\n const ptr = this.__wbg_ptr;\n this.__wbg_ptr = 0;\n UpscaleResultFinalization.unregister(this);\n return ptr;\n }\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_upscaleresult_free(ptr, 0);\n }\n /**\n * Pointer to the output buffer in WASM memory\n * @returns {number}\n */\n get ptr() {\n const ret = wasm.upscaleresult_ptr(this.__wbg_ptr);\n return ret >>> 0;\n }\n /**\n * Length of the output buffer in bytes\n * @returns {number}\n */\n get len() {\n const ret = wasm.upscaleresult_len(this.__wbg_ptr);\n return ret >>> 0;\n }\n /**\n * Output image width\n * @returns {number}\n */\n get width() {\n const ret = wasm.upscaleresult_width(this.__wbg_ptr);\n return ret >>> 0;\n }\n /**\n * Output image height\n * @returns {number}\n */\n get height() {\n const ret = wasm.upscaleresult_height(this.__wbg_ptr);\n return ret >>> 0;\n }\n}\nif (Symbol.dispose) UpscaleResult.prototype[Symbol.dispose] = UpscaleResult.prototype.free;\n\n/**\n * xBRZ configuration options\n */\nexport class XbrzConfig {\n static __wrap(ptr) {\n ptr = ptr >>> 0;\n const obj = Object.create(XbrzConfig.prototype);\n obj.__wbg_ptr = ptr;\n XbrzConfigFinalization.register(obj, obj.__wbg_ptr, obj);\n return obj;\n }\n __destroy_into_raw() {\n const ptr = this.__wbg_ptr;\n this.__wbg_ptr = 0;\n XbrzConfigFinalization.unregister(this);\n return ptr;\n }\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_xbrzconfig_free(ptr, 0);\n }\n /**\n * Luminance weight for edge detection (0.0 - 1.0)\n * @returns {number}\n */\n get luminance_weight() {\n const ret = wasm.__wbg_get_crtconfig_warp_x(this.__wbg_ptr);\n return ret;\n }\n /**\n * Luminance weight for edge detection (0.0 - 1.0)\n * @param {number} arg0\n */\n set luminance_weight(arg0) {\n wasm.__wbg_set_crtconfig_warp_x(this.__wbg_ptr, arg0);\n }\n /**\n * Equal color tolerance (0 - 50)\n * @returns {number}\n */\n get equal_color_tolerance() {\n const ret = wasm.__wbg_get_hexconfig_border_thickness(this.__wbg_ptr);\n return ret >>> 0;\n }\n /**\n * Equal color tolerance (0 - 50)\n * @param {number} arg0\n */\n set equal_color_tolerance(arg0) {\n wasm.__wbg_set_hexconfig_border_thickness(this.__wbg_ptr, arg0);\n }\n /**\n * Dominant direction threshold (3.5 - 6.0)\n * @returns {number}\n */\n get dominant_direction_threshold() {\n const ret = wasm.__wbg_get_crtconfig_scan_hardness(this.__wbg_ptr);\n return ret;\n }\n /**\n * Dominant direction threshold (3.5 - 6.0)\n * @param {number} arg0\n */\n set dominant_direction_threshold(arg0) {\n wasm.__wbg_set_crtconfig_scan_hardness(this.__wbg_ptr, arg0);\n }\n /**\n * Steep direction threshold (2.0 - 3.0)\n * @returns {number}\n */\n get steep_direction_threshold() {\n const ret = wasm.__wbg_get_crtconfig_scan_opacity(this.__wbg_ptr);\n return ret;\n }\n /**\n * Steep direction threshold (2.0 - 3.0)\n * @param {number} arg0\n */\n set steep_direction_threshold(arg0) {\n wasm.__wbg_set_crtconfig_scan_opacity(this.__wbg_ptr, arg0);\n }\n constructor() {\n const ret = wasm.xbrzconfig_new();\n this.__wbg_ptr = ret >>> 0;\n XbrzConfigFinalization.register(this, this.__wbg_ptr, this);\n return this;\n }\n /**\n * Preset for sharp edges\n * @returns {XbrzConfig}\n */\n static preset_sharp() {\n const ret = wasm.xbrzconfig_preset_sharp();\n return XbrzConfig.__wrap(ret);\n }\n /**\n * Preset for smooth output\n * @returns {XbrzConfig}\n */\n static preset_smooth() {\n const ret = wasm.xbrzconfig_preset_smooth();\n return XbrzConfig.__wrap(ret);\n }\n}\nif (Symbol.dispose) XbrzConfig.prototype[Symbol.dispose] = XbrzConfig.prototype.free;\n\n/**\n * Apply CRT effect with default configuration\n * @param {Uint8Array} input\n * @param {number} src_w\n * @param {number} src_h\n * @param {number} scale\n * @returns {UpscaleResult}\n */\nexport function crt_upscale(input, src_w, src_h, scale) {\n const ptr0 = passArray8ToWasm0(input, wasm.__wbindgen_malloc);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.crt_upscale(ptr0, len0, src_w, src_h, scale);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return UpscaleResult.__wrap(ret[0]);\n}\n\n/**\n * Apply CRT effect with custom configuration\n * @param {Uint8Array} input\n * @param {number} src_w\n * @param {number} src_h\n * @param {number} scale\n * @param {CrtConfig} config\n * @returns {UpscaleResult}\n */\nexport function crt_upscale_config(input, src_w, src_h, scale, config) {\n const ptr0 = passArray8ToWasm0(input, wasm.__wbindgen_malloc);\n const len0 = WASM_VECTOR_LEN;\n _assertClass(config, CrtConfig);\n const ret = wasm.crt_upscale_config(ptr0, len0, src_w, src_h, scale, config.__wbg_ptr);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return UpscaleResult.__wrap(ret[0]);\n}\n\n/**\n * Get WASM memory for zero-copy data transfer\n * @returns {any}\n */\nexport function get_memory() {\n const ret = wasm.get_memory();\n return ret;\n}\n\n/**\n * Get output dimensions for hexagonal upscaling\n * @param {number} src_w\n * @param {number} src_h\n * @param {number} scale\n * @param {HexOrientation} orientation\n * @returns {Uint32Array}\n */\nexport function hex_get_dimensions(src_w, src_h, scale, orientation) {\n const ret = wasm.hex_get_dimensions(src_w, src_h, scale, orientation);\n var v1 = getArrayU32FromWasm0(ret[0], ret[1]).slice();\n wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);\n return v1;\n}\n\n/**\n * Apply hexagonal upscaling with default configuration\n * @param {Uint8Array} input\n * @param {number} src_w\n * @param {number} src_h\n * @param {number} scale\n * @returns {UpscaleResult}\n */\nexport function hex_upscale(input, src_w, src_h, scale) {\n const ptr0 = passArray8ToWasm0(input, wasm.__wbindgen_malloc);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.hex_upscale(ptr0, len0, src_w, src_h, scale);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return UpscaleResult.__wrap(ret[0]);\n}\n\n/**\n * Apply hexagonal upscaling with custom configuration\n * @param {Uint8Array} input\n * @param {number} src_w\n * @param {number} src_h\n * @param {number} scale\n * @param {HexConfig} config\n * @returns {UpscaleResult}\n */\nexport function hex_upscale_config(input, src_w, src_h, scale, config) {\n const ptr0 = passArray8ToWasm0(input, wasm.__wbindgen_malloc);\n const len0 = WASM_VECTOR_LEN;\n _assertClass(config, HexConfig);\n const ret = wasm.hex_upscale_config(ptr0, len0, src_w, src_h, scale, config.__wbg_ptr);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return UpscaleResult.__wrap(ret[0]);\n}\n\nexport function init() {\n wasm.init();\n}\n\n/**\n * Apply xBRZ upscaling with default configuration\n * @param {Uint8Array} input\n * @param {number} src_w\n * @param {number} src_h\n * @param {number} scale\n * @returns {UpscaleResult}\n */\nexport function xbrz_upscale(input, src_w, src_h, scale) {\n const ptr0 = passArray8ToWasm0(input, wasm.__wbindgen_malloc);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.xbrz_upscale(ptr0, len0, src_w, src_h, scale);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return UpscaleResult.__wrap(ret[0]);\n}\n\n/**\n * Apply xBRZ upscaling with custom configuration\n * @param {Uint8Array} input\n * @param {number} src_w\n * @param {number} src_h\n * @param {number} scale\n * @param {XbrzConfig} config\n * @returns {UpscaleResult}\n */\nexport function xbrz_upscale_config(input, src_w, src_h, scale, config) {\n const ptr0 = passArray8ToWasm0(input, wasm.__wbindgen_malloc);\n const len0 = WASM_VECTOR_LEN;\n _assertClass(config, XbrzConfig);\n const ret = wasm.xbrz_upscale_config(ptr0, len0, src_w, src_h, scale, config.__wbg_ptr);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return UpscaleResult.__wrap(ret[0]);\n}\n\nconst EXPECTED_RESPONSE_TYPES = new Set(['basic', 'cors', 'default']);\n\nasync function __wbg_load(module, imports) {\n if (typeof Response === 'function' && module instanceof Response) {\n if (typeof WebAssembly.instantiateStreaming === 'function') {\n try {\n return await WebAssembly.instantiateStreaming(module, imports);\n } catch (e) {\n const validResponse = module.ok && EXPECTED_RESPONSE_TYPES.has(module.type);\n\n if (validResponse && module.headers.get('Content-Type') !== 'application/wasm') {\n console.warn(\"`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\\n\", e);\n\n } else {\n throw e;\n }\n }\n }\n\n const bytes = await module.arrayBuffer();\n return await WebAssembly.instantiate(bytes, imports);\n } else {\n const instance = await WebAssembly.instantiate(module, imports);\n\n if (instance instanceof WebAssembly.Instance) {\n return { instance, module };\n } else {\n return instance;\n }\n }\n}\n\nfunction __wbg_get_imports() {\n const imports = {};\n imports.wbg = {};\n imports.wbg.__wbg___wbindgen_memory_a342e963fbcabd68 = function() {\n const ret = wasm.memory;\n return ret;\n };\n imports.wbg.__wbg___wbindgen_throw_dd24417ed36fc46e = function(arg0, arg1) {\n throw new Error(getStringFromWasm0(arg0, arg1));\n };\n imports.wbg.__wbg_error_7534b8e9a36f1ab4 = function(arg0, arg1) {\n let deferred0_0;\n let deferred0_1;\n try {\n deferred0_0 = arg0;\n deferred0_1 = arg1;\n console.error(getStringFromWasm0(arg0, arg1));\n } finally {\n wasm.__wbindgen_free(deferred0_0, deferred0_1, 1);\n }\n };\n imports.wbg.__wbg_new_8a6f238a6ece86ea = function() {\n const ret = new Error();\n return ret;\n };\n imports.wbg.__wbg_stack_0ed75d68575b0f3c = function(arg0, arg1) {\n const ret = arg1.stack;\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);\n };\n imports.wbg.__wbindgen_cast_2241b6af4c4b2941 = function(arg0, arg1) {\n // Cast intrinsic for `Ref(String) -> Externref`.\n const ret = getStringFromWasm0(arg0, arg1);\n return ret;\n };\n imports.wbg.__wbindgen_init_externref_table = function() {\n const table = wasm.__wbindgen_externrefs;\n const offset = table.grow(4);\n table.set(0, undefined);\n table.set(offset + 0, undefined);\n table.set(offset + 1, null);\n table.set(offset + 2, true);\n table.set(offset + 3, false);\n };\n\n return imports;\n}\n\nfunction __wbg_finalize_init(instance, module) {\n wasm = instance.exports;\n __wbg_init.__wbindgen_wasm_module = module;\n cachedDataViewMemory0 = null;\n cachedUint32ArrayMemory0 = null;\n cachedUint8ArrayMemory0 = null;\n\n\n wasm.__wbindgen_start();\n return wasm;\n}\n\nfunction initSync(module) {\n if (wasm !== undefined) return wasm;\n\n\n if (typeof module !== 'undefined') {\n if (Object.getPrototypeOf(module) === Object.prototype) {\n ({module} = module)\n } else {\n console.warn('using deprecated parameters for `initSync()`; pass a single object instead')\n }\n }\n\n const imports = __wbg_get_imports();\n if (!(module instanceof WebAssembly.Module)) {\n module = new WebAssembly.Module(module);\n }\n const instance = new WebAssembly.Instance(module, imports);\n return __wbg_finalize_init(instance, module);\n}\n\nasync function __wbg_init(module_or_path) {\n if (wasm !== undefined) return wasm;\n\n\n if (typeof module_or_path !== 'undefined') {\n if (Object.getPrototypeOf(module_or_path) === Object.prototype) {\n ({module_or_path} = module_or_path)\n } else {\n console.warn('using deprecated parameters for the initialization function; pass a single object instead')\n }\n }\n\n if (typeof module_or_path === 'undefined') {\n module_or_path = new URL('renderart_wasm_bg.wasm', import.meta.url);\n }\n const imports = __wbg_get_imports();\n\n if (typeof module_or_path === 'string' || (typeof Request === 'function' && module_or_path instanceof Request) || (typeof URL === 'function' && module_or_path instanceof URL)) {\n module_or_path = fetch(module_or_path);\n }\n\n const { instance, module } = await __wbg_load(await module_or_path, imports);\n\n return __wbg_finalize_init(instance, module);\n}\n\nexport { initSync };\nexport default __wbg_init;\n","/**\n * CRT GPU Renderer using WebGL2\n * \n * High-performance CRT effect rendering using fragment shaders.\n */\n\nimport type { CrtOptions, ImageInput, ImageOutput, Renderer } from './types';\n\n// Vertex shader\nconst VERTEX_SHADER = `#version 300 es\nlayout(location = 0) in vec2 position;\nout vec2 vUv;\n\nvoid main() {\n vUv = position * 0.5 + 0.5;\n gl_Position = vec4(position, 0.0, 1.0);\n}`;\n\n// Fragment shader with configurable CRT effects\nconst FRAGMENT_SHADER = `#version 300 es\nprecision highp float;\n\nuniform sampler2D uTex;\nuniform vec2 uRes;\nuniform vec2 uWarp;\nuniform float uScanHardness;\nuniform float uScanOpacity;\nuniform float uMaskOpacity;\nuniform int uEnableWarp;\nuniform int uEnableScanlines;\nuniform int uEnableMask;\n\nin vec2 vUv;\nout vec4 outColor;\n\n// Gamma 2.0 approximation\nvec3 toLinear(vec3 c) { return c * c; }\nvec3 toSrgb(vec3 c) { return sqrt(c); }\n\nvec2 warp(vec2 uv) {\n if (uEnableWarp == 0) return uv;\n vec2 dc = abs(0.5 - uv);\n vec2 dc2 = dc * dc;\n uv.x -= 0.5; uv.x *= 1.0 + (dc2.y * (0.3 * uWarp.x)); uv.x += 0.5;\n uv.y -= 0.5; uv.y *= 1.0 + (dc2.x * (0.4 * uWarp.y)); uv.y += 0.5;\n return uv;\n}\n\nfloat scanline(float y, float sourceHeight) {\n if (uEnableScanlines == 0) return 1.0;\n float v = fract(y * sourceHeight);\n float d = abs(v - 0.5);\n float line = exp(d * d * uScanHardness);\n return mix(1.0, line, uScanOpacity);\n}\n\nvec3 mask(vec2 pos) {\n if (uEnableMask == 0) return vec3(1.0);\n float x = fract(pos.x / 6.0);\n vec3 m = vec3(1.0);\n float step1 = 0.333;\n float step2 = 0.666;\n \n m.r = step(0.0, x) - step(step1, x);\n m.g = step(step1, x) - step(step2, x);\n m.b = step(step2, x) - step(1.0, x);\n \n return mix(vec3(1.0), m, uMaskOpacity);\n}\n\nvoid main() {\n // 1. Geometry\n vec2 uv = warp(vUv);\n \n // 2. Bounds Check\n if (uv.x < 0.0 || uv.x > 1.0 || uv.y < 0.0 || uv.y > 1.0) {\n outColor = vec4(0.0); \n return;\n }\n\n // 3. Texture Sample\n vec4 texSample = texture(uTex, uv);\n \n if (texSample.a == 0.0) {\n outColor = vec4(0.0);\n return;\n }\n\n vec3 linearColor = toLinear(texSample.rgb);\n \n // 4. CRT Effects\n ivec2 texSize = textureSize(uTex, 0);\n \n // Smart Bloom\n float luma = dot(linearColor, vec3(0.299, 0.587, 0.114));\n float bloom = luma * 0.7;\n\n // Calculate patterns\n float scan = scanline(uv.y, float(texSize.y));\n vec3 m = mask(gl_FragCoord.xy);\n \n // Apply effects\n vec3 effects = m * scan;\n vec3 finalRGB = linearColor * mix(effects, vec3(1.0), bloom);\n\n // 5. Output\n outColor = vec4(toSrgb(finalRGB), texSample.a);\n}`;\n\n/** CRT GPU Renderer */\nexport class CrtGpuRenderer implements Renderer<CrtOptions> {\n private gl: WebGL2RenderingContext | null = null;\n private canvas: OffscreenCanvas | null = null;\n private program: WebGLProgram | null = null;\n private texture: WebGLTexture | null = null;\n private uniforms: Record<string, WebGLUniformLocation | null> = {};\n private initialized = false;\n private currentCanvasSize = { width: 0, height: 0 };\n private currentTexSize = { width: 0, height: 0 };\n\n /** Create a new CRT GPU renderer */\n static create(): CrtGpuRenderer {\n const renderer = new CrtGpuRenderer();\n renderer.init();\n return renderer;\n }\n\n private init(): void {\n if (typeof OffscreenCanvas === 'undefined') {\n throw new Error('OffscreenCanvas not supported');\n }\n\n this.canvas = new OffscreenCanvas(1, 1);\n this.gl = this.canvas.getContext('webgl2', {\n alpha: true,\n premultipliedAlpha: false,\n desynchronized: true,\n powerPreference: 'high-performance',\n antialias: false,\n });\n\n if (!this.gl) {\n throw new Error('WebGL2 not supported');\n }\n\n const gl = this.gl;\n\n // Create shaders\n const vs = this.createShader(gl.VERTEX_SHADER, VERTEX_SHADER);\n const fs = this.createShader(gl.FRAGMENT_SHADER, FRAGMENT_SHADER);\n\n // Create program\n this.program = gl.createProgram()!;\n gl.attachShader(this.program, vs);\n gl.attachShader(this.program, fs);\n gl.linkProgram(this.program);\n\n if (!gl.getProgramParameter(this.program, gl.LINK_STATUS)) {\n throw new Error('Shader program link failed: ' + gl.getProgramInfoLog(this.program));\n }\n\n gl.useProgram(this.program);\n\n // Get uniform locations\n this.uniforms = {\n uTex: gl.getUniformLocation(this.program, 'uTex'),\n uRes: gl.getUniformLocation(this.program, 'uRes'),\n uWarp: gl.getUniformLocation(this.program, 'uWarp'),\n uScanHardness: gl.getUniformLocation(this.program, 'uScanHardness'),\n uScanOpacity: gl.getUniformLocation(this.program, 'uScanOpacity'),\n uMaskOpacity: gl.getUniformLocation(this.program, 'uMaskOpacity'),\n uEnableWarp: gl.getUniformLocation(this.program, 'uEnableWarp'),\n uEnableScanlines: gl.getUniformLocation(this.program, 'uEnableScanlines'),\n uEnableMask: gl.getUniformLocation(this.program, 'uEnableMask'),\n };\n\n gl.uniform1i(this.uniforms.uTex, 0);\n\n // Setup geometry (fullscreen triangle)\n const buf = gl.createBuffer();\n gl.bindBuffer(gl.ARRAY_BUFFER, buf);\n gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([-1, -1, 3, -1, -1, 3]), gl.STATIC_DRAW);\n gl.enableVertexAttribArray(0);\n gl.vertexAttribPointer(0, 2, gl.FLOAT, false, 0, 0);\n\n // Create texture\n this.texture = gl.createTexture();\n gl.bindTexture(gl.TEXTURE_2D, this.texture);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n\n gl.clearColor(0.0, 0.0, 0.0, 0.0);\n\n this.initialized = true;\n }\n\n private createShader(type: number, source: string): WebGLShader {\n const gl = this.gl!;\n const shader = gl.createShader(type)!;\n gl.shaderSource(shader, source);\n gl.compileShader(shader);\n\n if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\n const info = gl.getShaderInfoLog(shader);\n gl.deleteShader(shader);\n throw new Error('Shader compile failed: ' + info);\n }\n\n return shader;\n }\n\n /** Check if renderer is ready */\n isReady(): boolean {\n return this.initialized;\n }\n\n /** Render CRT effect */\n render(input: ImageInput | ImageData, options: CrtOptions = {}): ImageOutput {\n if (!this.initialized || !this.gl || !this.canvas) {\n throw new Error('Renderer not initialized');\n }\n\n const gl = this.gl;\n const data = input instanceof ImageData ? input.data : input.data;\n const width = input.width;\n const height = input.height;\n\n const scale = Math.min(32, Math.max(2, options.scale ?? 3));\n const outWidth = width * scale;\n const outHeight = height * scale;\n\n // Resize canvas if needed\n if (this.currentCanvasSize.width !== outWidth || this.currentCanvasSize.height !== outHeight) {\n this.canvas.width = outWidth;\n this.canvas.height = outHeight;\n this.currentCanvasSize = { width: outWidth, height: outHeight };\n gl.viewport(0, 0, outWidth, outHeight);\n }\n\n // Update uniforms\n gl.uniform2f(this.uniforms.uRes, outWidth, outHeight);\n gl.uniform2f(this.uniforms.uWarp, options.warpX ?? 0.015, options.warpY ?? 0.02);\n gl.uniform1f(this.uniforms.uScanHardness, options.scanHardness ?? -4.0);\n gl.uniform1f(this.uniforms.uScanOpacity, options.scanOpacity ?? 0.5);\n gl.uniform1f(this.uniforms.uMaskOpacity, options.maskOpacity ?? 0.3);\n gl.uniform1i(this.uniforms.uEnableWarp, options.enableWarp !== false ? 1 : 0);\n gl.uniform1i(this.uniforms.uEnableScanlines, options.enableScanlines !== false ? 1 : 0);\n gl.uniform1i(this.uniforms.uEnableMask, options.enableMask !== false ? 1 : 0);\n\n // Update texture\n gl.bindTexture(gl.TEXTURE_2D, this.texture);\n if (this.currentTexSize.width !== width || this.currentTexSize.height !== height) {\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, width, height, 0, gl.RGBA, gl.UNSIGNED_BYTE, data);\n this.currentTexSize = { width, height };\n } else {\n gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, width, height, gl.RGBA, gl.UNSIGNED_BYTE, data);\n }\n\n // Render\n gl.clear(gl.COLOR_BUFFER_BIT);\n gl.drawArrays(gl.TRIANGLES, 0, 3);\n\n // Read pixels\n const pixels = new Uint8ClampedArray(outWidth * outHeight * 4);\n gl.readPixels(0, 0, outWidth, outHeight, gl.RGBA, gl.UNSIGNED_BYTE, pixels);\n\n return {\n data: pixels,\n width: outWidth,\n height: outHeight,\n };\n }\n\n /** Dispose resources */\n dispose(): void {\n if (this.gl) {\n if (this.texture) this.gl.deleteTexture(this.texture);\n if (this.program) this.gl.deleteProgram(this.program);\n this.gl = null;\n }\n this.canvas = null;\n this.initialized = false;\n }\n}\n\n/** CRT presets */\nexport const CRT_PRESETS: Record<string, Partial<CrtOptions>> = {\n default: {},\n authentic: {\n warpX: 0.02,\n warpY: 0.025,\n scanHardness: -6.0,\n scanOpacity: 0.6,\n maskOpacity: 0.4,\n },\n subtle: {\n warpX: 0.008,\n warpY: 0.01,\n scanHardness: -3.0,\n scanOpacity: 0.3,\n maskOpacity: 0.15,\n },\n flat: {\n warpX: 0,\n warpY: 0,\n enableWarp: false,\n scanHardness: -4.0,\n scanOpacity: 0.5,\n maskOpacity: 0.3,\n },\n};\n","/**\n * Hexagonal GPU Renderer using WebGL2\n * \n * High-performance hexagonal pixel grid transformation using fragment shaders.\n */\n\nimport type { HexOptions, HexOrientation, ImageInput, ImageOutput, Renderer } from './types';\n\n// Vertex shader\nconst VERTEX_SHADER = `#version 300 es\nlayout(location = 0) in vec2 position;\nout vec2 vUv;\n\nvoid main() {\n vUv = position * 0.5 + 0.5;\n gl_Position = vec4(position, 0.0, 1.0);\n}`;\n\n// Fragment shader for hexagonal rendering\nconst FRAGMENT_SHADER = `#version 300 es\nprecision highp float;\n\nuniform sampler2D uTex;\nuniform vec2 uOutputRes;\nuniform vec2 uInputRes;\nuniform float uScale;\nuniform int uOrientation; // 0 = flat-top, 1 = pointy-top\nuniform int uDrawBorders;\nuniform vec4 uBorderColor;\nuniform float uBorderThickness;\nuniform vec4 uBackgroundColor;\n\nin vec2 vUv;\nout vec4 outColor;\n\nconst float SQRT3 = 1.732050808;\nconst float INV_SQRT3 = 0.577350269;\n\n// Convert output pixel to hex coordinate (flat-top)\nvec2 pixelToHexFlat(vec2 pos, float scale) {\n float hSpacing = scale * 1.5;\n float vSpacing = scale * SQRT3;\n \n float col = pos.x / hSpacing;\n int colInt = int(floor(col));\n \n // Check if odd column (offset)\n bool isOffset = (colInt & 1) == 1;\n float yOffset = isOffset ? vSpacing * 0.5 : 0.0;\n \n float row = (pos.y - yOffset) / vSpacing;\n int rowInt = int(floor(row));\n \n // Refine with corner detection\n float cellX = pos.x - float(colInt) * hSpacing;\n float cellY = pos.y - float(rowInt) * vSpacing - yOffset;\n \n float quarterW = scale * 0.5;\n float halfH = vSpacing * 0.5;\n \n if (cellX < quarterW) {\n float distFromCenter = abs(cellY - halfH);\n float edgeX = distFromCenter * INV_SQRT3;\n \n if (cellX < quarterW - edgeX) {\n if (cellY < halfH) {\n rowInt -= 1;\n }\n colInt -= 1;\n }\n }\n \n return vec2(float(colInt), float(rowInt));\n}\n\n// Convert output pixel to hex coordinate (pointy-top)\nvec2 pixelToHexPointy(vec2 pos, float scale) {\n float hSpacing = scale * SQRT3;\n float vSpacing = scale * 1.5;\n \n float row = pos.y / vSpacing;\n int rowInt = int(floor(row));\n \n // Check if odd row (offset)\n bool isOffset = (rowInt & 1) == 1;\n float xOffset = isOffset ? hSpacing * 0.5 : 0.0;\n \n float col = (pos.x - xOffset) / hSpacing;\n int colInt = int(floor(col));\n \n // Refine with corner detection\n float cellX = pos.x - float(colInt) * hSpacing - xOffset;\n float cellY = pos.y - float(rowInt) * vSpacing;\n \n float halfW = hSpacing * 0.5;\n float quarterH = scale * 0.5;\n \n if (cellY < quarterH) {\n float distFromCenter = abs(cellX - halfW);\n float edgeY = distFromCenter * SQRT3;\n \n if (cellY < edgeY) {\n if (cellX < halfW && isOffset) {\n colInt -= 1;\n }\n rowInt -= 1;\n }\n }\n \n return vec2(float(colInt), float(rowInt));\n}\n\n// Check if pixel is on hex border\nbool isBorderPixel(vec2 pos, float scale, int orientation, float thickness) {\n for (float dy = -thickness; dy <= thickness; dy += 1.0) {\n for (float dx = -thickness; dx <= thickness; dx += 1.0) {\n if (dx == 0.0 && dy == 0.0) continue;\n \n vec2 h1 = orientation == 0 \n ? pixelToHexFlat(pos, scale) \n : pixelToHexPointy(pos, scale);\n vec2 h2 = orientation == 0 \n ? pixelToHexFlat(pos + vec2(dx, dy), scale) \n : pixelToHexPointy(pos + vec2(dx, dy), scale);\n \n if (h1 != h2) return true;\n }\n }\n return false;\n}\n\nvoid main() {\n vec2 pixelPos = vUv * uOutputRes;\n \n // Get hex coordinate\n vec2 hexCoord = uOrientation == 0 \n ? pixelToHexFlat(pixelPos, uScale) \n : pixelToHexPointy(pixelPos, uScale);\n \n // Check bounds\n if (hexCoord.x < 0.0 || hexCoord.y < 0.0 || \n hexCoord.x >= uInputRes.x || hexCoord.y >= uInputRes.y) {\n outColor = uBackgroundColor;\n return;\n }\n \n // Check for border\n if (uDrawBorders == 1 && uBorderThickness > 0.0) {\n if (isBorderPixel(pixelPos, uScale, uOrientation, uBorderThickness)) {\n outColor = uBorderColor;\n return;\n }\n }\n \n // Sample source pixel (add 0.5 for pixel center)\n vec2 texCoord = (hexCoord + 0.5) / uInputRes;\n outColor = texture(uTex, texCoord);\n}`;\n\n/** Parse color from CSS string or number */\nfunction parseColor(color: string | number | undefined, defaultColor: [number, number, number, number]): [number, number, number, number] {\n if (color === undefined) return defaultColor;\n \n if (typeof color === 'number') {\n return [\n ((color >> 24) & 0xFF) / 255,\n ((color >> 16) & 0xFF) / 255,\n ((color >> 8) & 0xFF) / 255,\n (color & 0xFF) / 255,\n ];\n }\n \n // Parse CSS color\n if (color === 'transparent') return [0, 0, 0, 0];\n \n // Parse hex color\n if (color.startsWith('#')) {\n const hex = color.slice(1);\n if (hex.length === 6) {\n return [\n parseInt(hex.slice(0, 2), 16) / 255,\n parseInt(hex.slice(2, 4), 16) / 255,\n parseInt(hex.slice(4, 6), 16) / 255,\n 1,\n ];\n }\n if (hex.length === 8) {\n return [\n parseInt(hex.slice(0, 2), 16) / 255,\n parseInt(hex.slice(2, 4), 16) / 255,\n parseInt(hex.slice(4, 6), 16) / 255,\n parseInt(hex.slice(6, 8), 16) / 255,\n ];\n }\n }\n \n return defaultColor;\n}\n\n/** Calculate output dimensions for hex rendering */\nexport function hexGetDimensions(\n srcWidth: number,\n srcHeight: number,\n scale: number,\n orientation: HexOrientation = 'flat-top'\n): { width: number; height: number } {\n const SQRT3 = 1.732050808;\n \n if (orientation === 'flat-top') {\n const hSpacing = scale * 1.5;\n const vSpacing = scale * SQRT3;\n const cellWidth = scale * 2;\n const cellHeight = scale * SQRT3;\n \n return {\n width: Math.ceil(srcWidth * hSpacing + cellWidth),\n height: Math.ceil(srcHeight * vSpacing + cellHeight),\n };\n } else {\n const hSpacing = scale * SQRT3;\n const vSpacing = scale * 1.5;\n const cellWidth = scale * SQRT3;\n const cellHeight = scale * 2;\n \n return {\n width: Math.ceil(srcWidth * hSpacing + cellWidth),\n height: Math.ceil(srcHeight * vSpacing + cellHeight),\n };\n }\n}\n\n/** HEX GPU Renderer */\nexport class HexGpuRenderer implements Renderer<HexOptions> {\n private gl: WebGL2RenderingContext | null = null;\n private canvas: OffscreenCanvas | null = null;\n private program: WebGLProgram | null = null;\n private texture: WebGLTexture | null = null;\n private uniforms: Record<string, WebGLUniformLocation | null> = {};\n private initialized = false;\n private currentCanvasSize = { width: 0, height: 0 };\n private currentTexSize = { width: 0, height: 0 };\n\n /** Create a new HEX GPU renderer */\n static create(): HexGpuRenderer {\n const renderer = new HexGpuRenderer();\n renderer.init();\n return renderer;\n }\n\n private init(): void {\n if (typeof OffscreenCanvas === 'undefined') {\n throw new Error('OffscreenCanvas not supported');\n }\n\n this.canvas = new OffscreenCanvas(1, 1);\n this.gl = this.canvas.getContext('webgl2', {\n alpha: true,\n premultipliedAlpha: false,\n desynchronized: true,\n powerPreference: 'high-performance',\n antialias: false,\n });\n\n if (!this.gl) {\n throw new Error('WebGL2 not supported');\n }\n\n const gl = this.gl;\n\n // Create shaders\n const vs = this.createShader(gl.VERTEX_SHADER, VERTEX_SHADER);\n const fs = this.createShader(gl.FRAGMENT_SHADER, FRAGMENT_SHADER);\n\n // Create program\n this.program = gl.createProgram()!;\n gl.attachShader(this.program, vs);\n gl.attachShader(this.program, fs);\n gl.linkProgram(this.program);\n\n if (!gl.getProgramParameter(this.program, gl.LINK_STATUS)) {\n throw new Error('Shader program link failed: ' + gl.getProgramInfoLog(this.program));\n }\n\n gl.useProgram(this.program);\n\n // Get uniform locations\n this.uniforms = {\n uTex: gl.getUniformLocation(this.program, 'uTex'),\n uOutputRes: gl.getUniformLocation(this.program, 'uOutputRes'),\n uInputRes: gl.getUniformLocation(this.program, 'uInputRes'),\n uScale: gl.getUniformLocation(this.program, 'uScale'),\n uOrientation: gl.getUniformLocation(this.program, 'uOrientation'),\n uDrawBorders: gl.getUniformLocation(this.program, 'uDrawBorders'),\n uBorderColor: gl.getUniformLocation(this.program, 'uBorderColor'),\n uBorderThickness: gl.getUniformLocation(this.program, 'uBorderThickness'),\n uBackgroundColor: gl.getUniformLocation(this.program, 'uBackgroundColor'),\n };\n\n gl.uniform1i(this.uniforms.uTex, 0);\n\n // Setup geometry\n const buf = gl.createBuffer();\n gl.bindBuffer(gl.ARRAY_BUFFER, buf);\n gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([-1, -1, 3, -1, -1, 3]), gl.STATIC_DRAW);\n gl.enableVertexAttribArray(0);\n gl.vertexAttribPointer(0, 2, gl.FLOAT, false, 0, 0);\n\n // Create texture\n this.texture = gl.createTexture();\n gl.bindTexture(gl.TEXTURE_2D, this.texture);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n\n gl.clearColor(0.0, 0.0, 0.0, 0.0);\n\n this.initialized = true;\n }\n\n private createShader(type: number, source: string): WebGLShader {\n const gl = this.gl!;\n const shader = gl.createShader(type)!;\n gl.shaderSource(shader, source);\n gl.compileShader(shader);\n\n if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\n const info = gl.getShaderInfoLog(shader);\n gl.deleteShader(shader);\n throw new Error('Shader compile failed: ' + info);\n }\n\n return shader;\n }\n\n /** Check if renderer is ready */\n isReady(): boolean {\n return this.initialized;\n }\n\n /** Render hexagonal effect */\n render(input: ImageInput | ImageData, options: HexOptions = {}): ImageOutput {\n if (!this.initialized || !this.gl || !this.canvas) {\n throw new Error('Renderer not initialized');\n }\n\n const gl = this.gl;\n const data = input instanceof ImageData ? input.data : input.data;\n const width = input.width;\n const height = input.height;\n\n const scale = Math.min(32, Math.max(2, options.scale ?? 16));\n const orientation: HexOrientation = options.orientation ?? 'flat-top';\n const { width: outWidth, height: outHeight } = hexGetDimensions(width, height, scale, orientation);\n\n // Resize canvas if needed\n if (this.currentCanvasSize.width !== outWidth || this.currentCanvasSize.height !== outHeight) {\n this.canvas.width = outWidth;\n this.canvas.height = outHeight;\n this.currentCanvasSize = { width: outWidth, height: outHeight };\n gl.viewport(0, 0, outWidth, outHeight);\n }\n\n // Update uniforms\n gl.uniform2f(this.uniforms.uOutputRes, outWidth, outHeight);\n gl.uniform2f(this.uniforms.uInputRes, width, height);\n gl.uniform1f(this.uniforms.uScale, scale);\n gl.uniform1i(this.uniforms.uOrientation, orientation === 'flat-top' ? 0 : 1);\n gl.uniform1i(this.uniforms.uDrawBorders, options.drawBorders ? 1 : 0);\n gl.uniform1f(this.uniforms.uBorderThickness, options.borderThickness ?? 1);\n\n const borderColor = parseColor(options.borderColor, [0.16, 0.16, 0.16, 1]);\n gl.uniform4f(this.uniforms.uBorderColor, ...borderColor);\n\n const bgColor = parseColor(options.backgroundColor, [0, 0, 0, 0]);\n gl.uniform4f(this.uniforms.uBackgroundColor, ...bgColor);\n\n // Update texture\n gl.bindTexture(gl.TEXTURE_2D, this.texture);\n if (this.currentTexSize.width !== width || this.currentTexSize.height !== height) {\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, width, height, 0, gl.RGBA, gl.UNSIGNED_BYTE, data);\n this.currentTexSize = { width, height };\n } else {\n gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, width, height, gl.RGBA, gl.UNSIGNED_BYTE, data);\n }\n\n // Render\n gl.clear(gl.COLOR_BUFFER_BIT);\n gl.drawArrays(gl.TRIANGLES, 0, 3);\n\n // Read pixels\n const pixels = new Uint8ClampedArray(outWidth * outHeight * 4);\n gl.readPixels(0, 0, outWidth, outHeight, gl.RGBA, gl.UNSIGNED_BYTE, pixels);\n\n return {\n data: pixels,\n width: outWidth,\n height: outHeight,\n };\n }\n\n /** Dispose resources */\n dispose(): void {\n if (this.gl) {\n if (this.texture) this.gl.deleteTexture(this.texture);\n if (this.program) this.gl.deleteProgram(this.program);\n this.gl = null;\n }\n this.canvas = null;\n this.initialized = false;\n }\n}\n\n/** HEX presets */\nexport const HEX_PRESETS: Record<string, Partial<HexOptions>> = {\n default: {},\n bordered: {\n drawBorders: true,\n borderColor: '#282828',\n borderThickness: 1,\n },\n pointy: {\n orientation: 'pointy-top',\n drawBorders: false,\n },\n};\n","/**\n * WASM Module Loader\n * \n * Handles loading and initialization of the Rust WASM module.\n */\n\nimport type { \n CrtOptions, \n HexOptions, \n XbrzOptions, \n ImageInput, \n ImageOutput,\n HexOrientation,\n} from './types';\n\n// WASM module state - use 'any' to avoid complex typing issues\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet wasmModule: any = null;\nlet wasmMemory: WebAssembly.Memory | null = null;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet loadPromise: Promise<any> | null = null;\n\n/** Load WASM module */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport async function loadWasm(): Promise<any> {\n if (wasmModule) return wasmModule;\n \n if (loadPromise) return loadPromise;\n \n loadPromise = (async () => {\n try {\n // Dynamic import of WASM module\n const wasm = await import('../pkg/renderart_wasm.js');\n await wasm.default();\n wasmModule = wasm;\n wasmMemory = wasmModule.get_memory();\n return wasmModule;\n } catch (e) {\n throw new Error(`Failed to load WASM module: ${e}`);\n }\n })();\n \n return loadPromise;\n}\n\n/** Check if WASM is loaded */\nexport function isWasmLoaded(): boolean {\n return wasmModule !== null;\n}\n\n/** Get output data from WASM memory */\nfunction getOutputData(result: { ptr: number; len: number }): Uint8ClampedArray {\n if (!wasmMemory) throw new Error('WASM memory not available');\n \n const buffer = new Uint8Array(wasmMemory.buffer, result.ptr, result.len);\n return new Uint8ClampedArray(buffer.slice());\n}\n\n/** Convert input to Uint8Array */\nfunction toUint8Array(input: ImageInput | ImageData): Uint8Array {\n const data = input instanceof ImageData ? input.data : input.data;\n return data instanceof Uint8Array ? data : new Uint8Array(data);\n}\n\n/** Parse color to WASM format (0xRRGGBBAA) */\nfunction parseColorToU32(color: string | number | undefined, defaultVal: number): number {\n if (color === undefined) return defaultVal;\n if (typeof color === 'number') return color;\n \n if (color === 'transparent') return 0x00000000;\n \n if (color.startsWith('#')) {\n const hex = color.slice(1);\n if (hex.length === 6) {\n return (parseInt(hex, 16) << 8) | 0xFF;\n }\n if (hex.length === 8) {\n return parseInt(hex, 16);\n }\n }\n \n return defaultVal;\n}\n\n// ============================================================================\n// CRT CPU Renderer\n// ============================================================================\n\n/** CRT CPU Renderer using WASM */\nexport class CrtCpuRenderer {\n private ready = false;\n \n /** Create and initialize renderer */\n static async create(): Promise<CrtCpuRenderer> {\n const renderer = new CrtCpuRenderer();\n await renderer.init();\n return renderer;\n }\n \n private async init(): Promise<void> {\n await loadWasm();\n this.ready = true;\n }\n \n /** Check if renderer is ready */\n isReady(): boolean {\n return this.ready;\n }\n \n /** Render CRT effect */\n render(input: ImageInput | ImageData, options: CrtOptions = {}): ImageOutput {\n if (!this.ready || !wasmModule) {\n throw new Error('Renderer not initialized');\n }\n \n const data = toUint8Array(input);\n const width = input.width;\n const height = input.height;\n const scale = Math.min(32, Math.max(2, options.scale ?? 3));\n \n // Create config\n const config = new wasmModule.CrtConfig();\n config.warp_x = options.warpX ?? 0.015;\n config.warp_y = options.warpY ?? 0.02;\n config.scan_hardness = options.scanHardness ?? -4.0;\n config.scan_opacity = options.scanOpacity ?? 0.5;\n config.mask_opacity = options.maskOpacity ?? 0.3;\n config.enable_warp = options.enableWarp !== false;\n config.enable_scanlines = options.enableScanlines !== false;\n config.enable_mask = options.enableMask !== false;\n \n const result = wasmModule.crt_upscale_config(data, width, height, scale, config);\n \n return {\n data: getOutputData(result),\n width: result.width,\n height: result.height,\n };\n }\n \n /** Dispose resources */\n dispose(): void {\n this.ready = false;\n }\n}\n\n// ============================================================================\n// HEX CPU Renderer\n// ============================================================================\n\n/** HEX CPU Renderer using WASM */\nexport class HexCpuRenderer {\n private ready = false;\n \n /** Create and initialize renderer */\n static async create(): Promise<HexCpuRenderer> {\n const renderer = new HexCpuRenderer();\n await renderer.init();\n return renderer;\n }\n \n private async init(): Promise<void> {\n await loadWasm();\n this.ready = true;\n }\n \n /** Check if renderer is ready */\n isReady(): boolean {\n return this.ready;\n }\n \n /** Render hexagonal effect */\n render(input: ImageInput | ImageData, options: HexOptions = {}): ImageOutput {\n if (!this.ready || !wasmModule) {\n throw new Error('Renderer not initialized');\n }\n \n const data = toUint8Array(input);\n const width = input.width;\n const height = input.height;\n const scale = Math.min(32, Math.max(2, options.scale ?? 16));\n \n // Create config\n const config = new wasmModule.HexConfig();\n config.orientation = options.orientation === 'pointy-top' ? 1 : 0;\n config.draw_borders = options.drawBorders ?? false;\n config.border_color = parseColorToU32(options.borderColor, 0x282828FF);\n config.border_thickness = options.borderThickness ?? 1;\n config.background_color = parseColorToU32(options.backgroundColor, 0x00000000);\n \n const result = wasmModule.hex_upscale_config(data, width, height, scale, config);\n \n return {\n data: getOutputData(result),\n width: result.width,\n height: result.height,\n };\n }\n \n /** Get output dimensions */\n getDimensions(srcWidth: number, srcHeight: number, scale: number, orientation: HexOrientation = 'flat-top'): { width: number; height: number } {\n if (!this.ready || !wasmModule) {\n throw new Error('Renderer not initialized');\n }\n \n const dims = wasmModule.hex_get_dimensions(srcWidth, srcHeight, scale, orientation === 'pointy-top' ? 1 : 0);\n return { width: dims[0], height: dims[1] };\n }\n \n /** Dispose resources */\n dispose(): void {\n this.ready = false;\n }\n}\n\n// ============================================================================\n// XBRZ CPU Renderer\n// ============================================================================\n\n/** XBRZ CPU Renderer using WASM */\nexport class XbrzCpuRenderer {\n private ready = false;\n \n /** Create and initialize renderer */\n static async create(): Promise<XbrzCpuRenderer> {\n const renderer = new XbrzCpuRenderer();\n await renderer.init();\n return renderer;\n }\n \n private async init(): Promise<void> {\n await loadWasm();\n this.ready = true;\n }\n \n /** Check if renderer is ready */\n isReady(): boolean {\n return this.ready;\n }\n \n /** Render xBRZ scaling */\n render(input: ImageInput | ImageData, options: XbrzOptions = {}): ImageOutput {\n if (!this.ready || !wasmModule) {\n throw new Error('Renderer not initialized');\n }\n \n const data = toUint8Array(input);\n const width = input.width;\n const height = input.height;\n const scale = Math.min(6, Math.max(2, options.scale ?? 2));\n \n // Create config\n const config = new wasmModule.XbrzConfig();\n config.luminance_weight = options.luminanceWeight ?? 1.0;\n config.equal_color_tolerance = options.equalColorTolerance ?? 30;\n config.dominant_direction_threshold = options.dominantDirectionThreshold ?? 4.4;\n config.steep_direction_threshold = options.steepDirectionThreshold ?? 2.2;\n \n const result = wasmModule.xbrz_upscale_config(data, width, height, scale, config);\n \n return {\n data: getOutputData(result),\n width: result.width,\n height: result.height,\n };\n }\n \n /** Dispose resources */\n dispose(): void {\n this.ready = false;\n }\n}\n\n/** XBRZ presets */\nexport const XBRZ_PRESETS: Record<string, Partial<XbrzOptions>> = {\n default: {},\n sharp: {\n luminanceWeight: 1.0,\n equalColorTolerance: 20,\n dominantDirectionThreshold: 4.4,\n steepDirectionThreshold: 2.2,\n },\n smooth: {\n luminanceWeight: 0.8,\n equalColorTolerance: 35,\n dominantDirectionThreshold: 5.0,\n steepDirectionThreshold: 2.5,\n },\n};\n","/**\n * RenderArt - Unified Pixel Art Rendering Engine\n * \n * Provides a unified API for all rendering engines (CRT, HEX, XBRZ)\n * with automatic backend selection (GPU/CPU).\n */\n\nimport type {\n Backend,\n CrtOptions,\n CrtPreset,\n HexOptions,\n HexPreset,\n XbrzOptions,\n XbrzPreset,\n ImageInput,\n ImageOutput,\n RendererCapabilities,\n RenderStats,\n} from './types';\n\nimport { CrtGpuRenderer, CRT_PRESETS } from './crt-gpu';\nimport { HexGpuRenderer, HEX_PRESETS, hexGetDimensions } from './hex-gpu';\nimport { \n CrtCpuRenderer, \n HexCpuRenderer, \n XbrzCpuRenderer,\n XBRZ_PRESETS,\n loadWasm,\n isWasmLoaded,\n} from './wasm-loader';\n\n/** Check if WebGL2 is available */\nfunction checkWebGL2(): boolean {\n if (typeof OffscreenCanvas === 'undefined') return false;\n try {\n const canvas = new OffscreenCanvas(1, 1);\n return !!canvas.getContext('webgl2');\n } catch {\n return false;\n }\n}\n\n/** Get WebGL2 max texture size */\nfunction getMaxTextureSize(): number {\n if (!checkWebGL2()) return 0;\n try {\n const canvas = new OffscreenCanvas(1, 1);\n const gl = canvas.getContext('webgl2');\n return gl?.getParameter(gl.MAX_TEXTURE_SIZE) ?? 0;\n } catch {\n return 0;\n }\n}\n\n// ============================================================================\n// CRT Engine\n// ============================================================================\n\n/** CRT rendering engine with GPU/CPU backend support */\nexport class CrtEngine {\n private gpuRenderer: CrtGpuRenderer | null = null;\n private cpuRenderer: CrtCpuRenderer | null = null;\n private gpuAvailable: boolean;\n private cpuAvailable: boolean;\n\n constructor(gpuAvailable: boolean, cpuAvailable: boolean) {\n this.gpuAvailable = gpuAvailable;\n this.cpuAvailable = cpuAvailable;\n }\n\n /** Initialize GPU renderer */\n private ensureGpu(): CrtGpuRenderer {\n if (!this.gpuRenderer && this.gpuAvailable) {\n this.gpuRenderer = CrtGpuRenderer.create();\n }\n if (!this.gpuRenderer) throw new Error('GPU renderer not available');\n return this.gpuRenderer;\n }\n\n /** Initialize CPU renderer */\n private async ensureCpu(): Promise<CrtCpuRenderer> {\n if (!this.cpuRenderer && this.cpuAvailable) {\n this.cpuRenderer = await CrtCpuRenderer.create();\n }\n if (!this.cpuRenderer) throw new Error('CPU renderer not available');\n return this.cpuRenderer;\n }\n\n /** Render with automatic backend selection */\n async render(input: ImageInput | ImageData, options?: CrtOptions): Promise<ImageOutput>;\n /** Render with preset */\n async render(input: ImageInput | ImageData, preset: CrtPreset, overrides?: Partial<CrtOptions>): Promise<ImageOutput>;\n async render(\n input: ImageInput | ImageData,\n optionsOrPreset?: CrtOptions | CrtPreset,\n overrides?: Partial<CrtOptions>\n ): Promise<ImageOutput> {\n // Resolve preset\n let options: CrtOptions = {};\n if (typeof optionsOrPreset === 'string') {\n options = { ...CRT_PRESETS[optionsOrPreset], ...overrides };\n } else if (optionsOrPreset) {\n options = optionsOrPreset;\n }\n\n const backend = options.backend ?? 'auto';\n\n // Select backend\n if (backend === 'gpu' || (backend === 'auto' && this.gpuAvailable)) {\n try {\n return this.ensureGpu().render(input, options);\n } catch (e) {\n if (backend === 'gpu') throw e;\n // Fallback to CPU\n }\n }\n\n // CPU fallback\n const cpu = await this.ensureCpu();\n return cpu.render(input, options);\n }\n\n /** Render synchronously (GPU only) */\n renderSync(input: ImageInput | ImageData, options?: CrtOptions): ImageOutput {\n return this.ensureGpu().render(input, options ?? {});\n }\n\n /** Dispose resources */\n dispose(): void {\n this.gpuRenderer?.dispose();\n this.cpuRenderer?.dispose();\n this.gpuRenderer = null;\n this.cpuRenderer = null;\n }\n}\n\n// ============================================================================\n// HEX Engine\n// ============================================================================\n\n/** HEX rendering engine with GPU/CPU backend support */\nexport class HexEngine {\n private gpuRenderer: HexGpuRenderer | null = null;\n private cpuRenderer: HexCpuRenderer | null = null;\n private gpuAvailable: boolean;\n private cpuAvailable: boolean;\n\n constructor(gpuAvailable: boolean, cpuAvailable: boolean) {\n this.gpuAvailable = gpuAvailable;\n this.cpuAvailable = cpuAvailable;\n }\n\n private ensureGpu(): HexGpuRenderer {\n if (!this.gpuRenderer && this.gpuAvailable) {\n this.gpuRenderer = HexGpuRenderer.create();\n }\n if (!this.gpuRenderer) throw new Error('GPU renderer not available');\n return this.gpuRenderer;\n }\n\n private async ensureCpu(): Promise<HexCpuRenderer> {\n if (!this.cpuRenderer && this.cpuAvailable) {\n this.cpuRenderer = await HexCpuRenderer.create();\n }\n if (!this.cpuRenderer) throw new Error('CPU renderer not available');\n return this.cpuRenderer;\n }\n\n /** Render with automatic backend selection */\n async render(input: ImageInput | ImageData, options?: HexOptions): Promise<ImageOutput>;\n /** Render with preset */\n async render(input: ImageInput | ImageData, preset: HexPreset, overrides?: Partial<HexOptions>): Promise<ImageOutput>;\n async render(\n input: ImageInput | ImageData,\n optionsOrPreset?: HexOptions | HexPreset,\n overrides?: Partial<HexOptions>\n ): Promise<ImageOutput> {\n let options: HexOptions = {};\n if (typeof optionsOrPreset === 'string') {\n options = { ...HEX_PRESETS[optionsOrPreset], ...overrides };\n } else if (optionsOrPreset) {\n options = optionsOrPreset;\n }\n\n const backend = options.backend ?? 'auto';\n\n if (backend === 'gpu' || (backend === 'auto' && this.gpuAvailable)) {\n try {\n return this.ensureGpu().render(input, options);\n } catch (e) {\n if (backend === 'gpu') throw e;\n }\n }\n\n const cpu = await this.ensureCpu();\n return cpu.render(input, options);\n }\n\n /** Render synchronously (GPU only) */\n renderSync(input: ImageInput | ImageData, options?: HexOptions): ImageOutput {\n return this.ensureGpu().render(input, options ?? {});\n }\n\n /** Get output dimensions */\n getDimensions(srcWidth: number, srcHeight: number, options?: HexOptions): { width: number; height: number } {\n const scale = options?.scale ?? 16;\n const orientation = options?.orientation ?? 'flat-top';\n return hexGetDimensions(srcWidth, srcHeight, scale, orientation);\n }\n\n dispose(): void {\n this.gpuRenderer?.dispose();\n this.cpuRenderer?.dispose();\n this.gpuRenderer = null;\n this.cpuRenderer = null;\n }\n}\n\n// ============================================================================\n// XBRZ Engine\n// ============================================================================\n\n/** XBRZ rendering engine (CPU only - algorithm too complex for efficient GPU) */\nexport class XbrzEngine {\n private cpuRenderer: XbrzCpuRenderer | null = null;\n private cpuAvailable: boolean;\n\n constructor(cpuAvailable: boolean) {\n this.cpuAvailable = cpuAvailable;\n }\n\n private async ensureCpu(): Promise<XbrzCpuRenderer> {\n if (!this.cpuRenderer && this.cpuAvailable) {\n this.cpuRenderer = await XbrzCpuRenderer.create();\n }\n if (!this.cpuRenderer) throw new Error('CPU renderer not available');\n return this.cpuRenderer;\n }\n\n /** Render xBRZ scaling */\n async render(input: ImageInput | ImageData, options?: XbrzOptions): Promise<ImageOutput>;\n /** Render with preset */\n async render(input: ImageInput | ImageData, preset: XbrzPreset, overrides?: Partial<XbrzOptions>): Promise<ImageOutput>;\n async render(\n input: ImageInput | ImageData,\n optionsOrPreset?: XbrzOptions | XbrzPreset,\n overrides?: Partial<XbrzOptions>\n ): Promise<ImageOutput> {\n let options: XbrzOptions = {};\n if (typeof optionsOrPreset === 'string') {\n options = { ...XBRZ_PRESETS[optionsOrPreset], ...overrides };\n } else if (optionsOrPreset) {\n options = optionsOrPreset;\n }\n\n const cpu = await this.ensureCpu();\n return cpu.render(input, options);\n }\n\n /** Get output dimensions */\n getDimensions(srcWidth: number, srcHeight: number, scale: number = 2): { width: number; height: number } {\n const s = Math.min(6, Math.max(2, scale));\n return { width: srcWidth * s, height: srcHeight * s };\n }\n\n dispose(): void {\n this.cpuRenderer?.dispose();\n this.cpuRenderer = null;\n }\n}\n\n// ============================================================================\n// Main RenderArt Class\n// ============================================================================\n\n/** RenderArt - Unified Pixel Art Rendering Engine */\nexport class RenderArt {\n /** CRT effect renderer */\n readonly crt: CrtEngine;\n /** Hexagonal pixel renderer */\n readonly hex: HexEngine;\n /** xBRZ scaling renderer */\n readonly xbrz: XbrzEngine;\n\n private _capabilities: RendererCapabilities;\n\n private constructor(gpuAvailable: boolean, cpuAvailable: boolean) {\n this.crt = new CrtEngine(gpuAvailable, cpuAvailable);\n this.hex = new HexEngine(gpuAvailable, cpuAvailable);\n this.xbrz = new XbrzEngine(cpuAvailable);\n\n const maxTextureSize = gpuAvailable ? getMaxTextureSize() : 0;\n\n this._capabilities = {\n gpu: gpuAvailable,\n cpu: cpuAvailable,\n maxTextureSize,\n recommendedBackend: gpuAvailable ? 'gpu' : cpuAvailable ? 'cpu' : 'auto',\n };\n }\n\n /** Create and initialize RenderArt instance */\n static async create(): Promise<RenderArt> {\n const gpuAvailable = checkWebGL2();\n let cpuAvailable = false;\n\n // Try to load WASM\n try {\n await loadWasm();\n cpuAvailable = isWasmLoaded();\n } catch {\n // WASM not available\n }\n\n if (!gpuAvailable && !cpuAvailable) {\n throw new Error('No rendering backend available. WebGL2 or WASM required.');\n }\n\n return new RenderArt(gpuAvailable, cpuAvailable);\n }\n\n /** Get renderer capabilities */\n get capabilities(): RendererCapabilities {\n return { ...this._capabilities };\n }\n\n /** Dispose all resources */\n dispose(): void {\n this.crt.dispose();\n this.hex.dispose();\n this.xbrz.dispose();\n }\n}\n\n// Export presets\nexport { CRT_PRESETS } from './crt-gpu';\nexport { HEX_PRESETS } from './hex-gpu';\nexport { XBRZ_PRESETS } from './wasm-loader';\n"]}
@@ -0,0 +1,289 @@
1
+ /* tslint:disable */
2
+ /* eslint-disable */
3
+
4
+ export class CrtConfig {
5
+ free(): void;
6
+ [Symbol.dispose](): void;
7
+ constructor();
8
+ /**
9
+ * Create preset: Authentic CRT look
10
+ */
11
+ static preset_authentic(): CrtConfig;
12
+ /**
13
+ * Create preset: Subtle modern look
14
+ */
15
+ static preset_subtle(): CrtConfig;
16
+ /**
17
+ * Create preset: Flat screen (no curvature)
18
+ */
19
+ static preset_flat(): CrtConfig;
20
+ /**
21
+ * Horizontal warp intensity (0.0 - 0.1)
22
+ */
23
+ warp_x: number;
24
+ /**
25
+ * Vertical warp intensity (0.0 - 0.1)
26
+ */
27
+ warp_y: number;
28
+ /**
29
+ * Scanline hardness (-10.0 to 0.0, more negative = sharper)
30
+ */
31
+ scan_hardness: number;
32
+ /**
33
+ * Scanline opacity (0.0 - 1.0)
34
+ */
35
+ scan_opacity: number;
36
+ /**
37
+ * Shadow mask opacity (0.0 - 1.0)
38
+ */
39
+ mask_opacity: number;
40
+ /**
41
+ * Enable barrel distortion
42
+ */
43
+ enable_warp: boolean;
44
+ /**
45
+ * Enable scanlines
46
+ */
47
+ enable_scanlines: boolean;
48
+ /**
49
+ * Enable shadow mask
50
+ */
51
+ enable_mask: boolean;
52
+ }
53
+
54
+ export class HexConfig {
55
+ free(): void;
56
+ [Symbol.dispose](): void;
57
+ constructor();
58
+ /**
59
+ * Create preset with borders
60
+ */
61
+ static preset_bordered(): HexConfig;
62
+ /**
63
+ * Create preset for pointy-top hexagons
64
+ */
65
+ static preset_pointy(): HexConfig;
66
+ /**
67
+ * Hexagon orientation
68
+ */
69
+ orientation: HexOrientation;
70
+ /**
71
+ * Draw hexagon borders
72
+ */
73
+ draw_borders: boolean;
74
+ /**
75
+ * Border color (RGBA packed as u32: 0xRRGGBBAA)
76
+ */
77
+ border_color: number;
78
+ /**
79
+ * Border thickness in pixels
80
+ */
81
+ border_thickness: number;
82
+ /**
83
+ * Background color (RGBA packed as u32)
84
+ */
85
+ background_color: number;
86
+ }
87
+
88
+ /**
89
+ * Hexagon orientation type
90
+ */
91
+ export enum HexOrientation {
92
+ /**
93
+ * Flat edge at top, vertices on left/right
94
+ */
95
+ FlatTop = 0,
96
+ /**
97
+ * Vertex at top, flat edges on left/right
98
+ */
99
+ PointyTop = 1,
100
+ }
101
+
102
+ export class UpscaleResult {
103
+ private constructor();
104
+ free(): void;
105
+ [Symbol.dispose](): void;
106
+ /**
107
+ * Pointer to the output buffer in WASM memory
108
+ */
109
+ readonly ptr: number;
110
+ /**
111
+ * Length of the output buffer in bytes
112
+ */
113
+ readonly len: number;
114
+ /**
115
+ * Output image width
116
+ */
117
+ readonly width: number;
118
+ /**
119
+ * Output image height
120
+ */
121
+ readonly height: number;
122
+ }
123
+
124
+ export class XbrzConfig {
125
+ free(): void;
126
+ [Symbol.dispose](): void;
127
+ constructor();
128
+ /**
129
+ * Preset for sharp edges
130
+ */
131
+ static preset_sharp(): XbrzConfig;
132
+ /**
133
+ * Preset for smooth output
134
+ */
135
+ static preset_smooth(): XbrzConfig;
136
+ /**
137
+ * Luminance weight for edge detection (0.0 - 1.0)
138
+ */
139
+ luminance_weight: number;
140
+ /**
141
+ * Equal color tolerance (0 - 50)
142
+ */
143
+ equal_color_tolerance: number;
144
+ /**
145
+ * Dominant direction threshold (3.5 - 6.0)
146
+ */
147
+ dominant_direction_threshold: number;
148
+ /**
149
+ * Steep direction threshold (2.0 - 3.0)
150
+ */
151
+ steep_direction_threshold: number;
152
+ }
153
+
154
+ /**
155
+ * Apply CRT effect with default configuration
156
+ */
157
+ export function crt_upscale(input: Uint8Array, src_w: number, src_h: number, scale: number): UpscaleResult;
158
+
159
+ /**
160
+ * Apply CRT effect with custom configuration
161
+ */
162
+ export function crt_upscale_config(input: Uint8Array, src_w: number, src_h: number, scale: number, config: CrtConfig): UpscaleResult;
163
+
164
+ /**
165
+ * Get WASM memory for zero-copy data transfer
166
+ */
167
+ export function get_memory(): any;
168
+
169
+ /**
170
+ * Get output dimensions for hexagonal upscaling
171
+ */
172
+ export function hex_get_dimensions(src_w: number, src_h: number, scale: number, orientation: HexOrientation): Uint32Array;
173
+
174
+ /**
175
+ * Apply hexagonal upscaling with default configuration
176
+ */
177
+ export function hex_upscale(input: Uint8Array, src_w: number, src_h: number, scale: number): UpscaleResult;
178
+
179
+ /**
180
+ * Apply hexagonal upscaling with custom configuration
181
+ */
182
+ export function hex_upscale_config(input: Uint8Array, src_w: number, src_h: number, scale: number, config: HexConfig): UpscaleResult;
183
+
184
+ export function init(): void;
185
+
186
+ /**
187
+ * Apply xBRZ upscaling with default configuration
188
+ */
189
+ export function xbrz_upscale(input: Uint8Array, src_w: number, src_h: number, scale: number): UpscaleResult;
190
+
191
+ /**
192
+ * Apply xBRZ upscaling with custom configuration
193
+ */
194
+ export function xbrz_upscale_config(input: Uint8Array, src_w: number, src_h: number, scale: number, config: XbrzConfig): UpscaleResult;
195
+
196
+ export type InitInput = RequestInfo | URL | Response | BufferSource | WebAssembly.Module;
197
+
198
+ export interface InitOutput {
199
+ readonly memory: WebAssembly.Memory;
200
+ readonly __wbg_crtconfig_free: (a: number, b: number) => void;
201
+ readonly __wbg_get_crtconfig_warp_x: (a: number) => number;
202
+ readonly __wbg_set_crtconfig_warp_x: (a: number, b: number) => void;
203
+ readonly __wbg_get_crtconfig_warp_y: (a: number) => number;
204
+ readonly __wbg_set_crtconfig_warp_y: (a: number, b: number) => void;
205
+ readonly __wbg_get_crtconfig_scan_hardness: (a: number) => number;
206
+ readonly __wbg_set_crtconfig_scan_hardness: (a: number, b: number) => void;
207
+ readonly __wbg_get_crtconfig_scan_opacity: (a: number) => number;
208
+ readonly __wbg_set_crtconfig_scan_opacity: (a: number, b: number) => void;
209
+ readonly __wbg_get_crtconfig_mask_opacity: (a: number) => number;
210
+ readonly __wbg_set_crtconfig_mask_opacity: (a: number, b: number) => void;
211
+ readonly __wbg_get_crtconfig_enable_warp: (a: number) => number;
212
+ readonly __wbg_set_crtconfig_enable_warp: (a: number, b: number) => void;
213
+ readonly __wbg_get_crtconfig_enable_scanlines: (a: number) => number;
214
+ readonly __wbg_set_crtconfig_enable_scanlines: (a: number, b: number) => void;
215
+ readonly __wbg_get_crtconfig_enable_mask: (a: number) => number;
216
+ readonly __wbg_set_crtconfig_enable_mask: (a: number, b: number) => void;
217
+ readonly crtconfig_new: () => number;
218
+ readonly crtconfig_preset_authentic: () => number;
219
+ readonly crtconfig_preset_subtle: () => number;
220
+ readonly crtconfig_preset_flat: () => number;
221
+ readonly crt_upscale: (a: number, b: number, c: number, d: number, e: number) => [number, number, number];
222
+ readonly crt_upscale_config: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number, number];
223
+ readonly __wbg_hexconfig_free: (a: number, b: number) => void;
224
+ readonly __wbg_get_hexconfig_orientation: (a: number) => number;
225
+ readonly __wbg_set_hexconfig_orientation: (a: number, b: number) => void;
226
+ readonly __wbg_get_hexconfig_draw_borders: (a: number) => number;
227
+ readonly __wbg_set_hexconfig_draw_borders: (a: number, b: number) => void;
228
+ readonly __wbg_get_hexconfig_border_color: (a: number) => number;
229
+ readonly __wbg_set_hexconfig_border_color: (a: number, b: number) => void;
230
+ readonly __wbg_get_hexconfig_border_thickness: (a: number) => number;
231
+ readonly __wbg_set_hexconfig_border_thickness: (a: number, b: number) => void;
232
+ readonly __wbg_get_hexconfig_background_color: (a: number) => number;
233
+ readonly __wbg_set_hexconfig_background_color: (a: number, b: number) => void;
234
+ readonly hexconfig_new: () => number;
235
+ readonly hexconfig_preset_bordered: () => number;
236
+ readonly hexconfig_preset_pointy: () => number;
237
+ readonly hex_upscale: (a: number, b: number, c: number, d: number, e: number) => [number, number, number];
238
+ readonly hex_upscale_config: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number, number];
239
+ readonly hex_get_dimensions: (a: number, b: number, c: number, d: number) => [number, number];
240
+ readonly xbrzconfig_new: () => number;
241
+ readonly xbrzconfig_preset_sharp: () => number;
242
+ readonly xbrzconfig_preset_smooth: () => number;
243
+ readonly xbrz_upscale: (a: number, b: number, c: number, d: number, e: number) => [number, number, number];
244
+ readonly xbrz_upscale_config: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number, number];
245
+ readonly get_memory: () => any;
246
+ readonly upscaleresult_ptr: (a: number) => number;
247
+ readonly upscaleresult_len: (a: number) => number;
248
+ readonly upscaleresult_width: (a: number) => number;
249
+ readonly upscaleresult_height: (a: number) => number;
250
+ readonly __wbg_get_xbrzconfig_luminance_weight: (a: number) => number;
251
+ readonly __wbg_get_xbrzconfig_equal_color_tolerance: (a: number) => number;
252
+ readonly __wbg_get_xbrzconfig_dominant_direction_threshold: (a: number) => number;
253
+ readonly __wbg_get_xbrzconfig_steep_direction_threshold: (a: number) => number;
254
+ readonly __wbg_set_xbrzconfig_luminance_weight: (a: number, b: number) => void;
255
+ readonly __wbg_set_xbrzconfig_equal_color_tolerance: (a: number, b: number) => void;
256
+ readonly __wbg_set_xbrzconfig_dominant_direction_threshold: (a: number, b: number) => void;
257
+ readonly __wbg_set_xbrzconfig_steep_direction_threshold: (a: number, b: number) => void;
258
+ readonly init: () => void;
259
+ readonly __wbg_upscaleresult_free: (a: number, b: number) => void;
260
+ readonly __wbg_xbrzconfig_free: (a: number, b: number) => void;
261
+ readonly __wbindgen_free: (a: number, b: number, c: number) => void;
262
+ readonly __wbindgen_malloc: (a: number, b: number) => number;
263
+ readonly __wbindgen_realloc: (a: number, b: number, c: number, d: number) => number;
264
+ readonly __wbindgen_externrefs: WebAssembly.Table;
265
+ readonly __externref_table_dealloc: (a: number) => void;
266
+ readonly __wbindgen_start: () => void;
267
+ }
268
+
269
+ export type SyncInitInput = BufferSource | WebAssembly.Module;
270
+
271
+ /**
272
+ * Instantiates the given `module`, which can either be bytes or
273
+ * a precompiled `WebAssembly.Module`.
274
+ *
275
+ * @param {{ module: SyncInitInput }} module - Passing `SyncInitInput` directly is deprecated.
276
+ *
277
+ * @returns {InitOutput}
278
+ */
279
+ export function initSync(module: { module: SyncInitInput } | SyncInitInput): InitOutput;
280
+
281
+ /**
282
+ * If `module_or_path` is {RequestInfo} or {URL}, makes a request and
283
+ * for everything else, calls `WebAssembly.instantiate` directly.
284
+ *
285
+ * @param {{ module_or_path: InitInput | Promise<InitInput> }} module_or_path - Passing `InitInput` directly is deprecated.
286
+ *
287
+ * @returns {Promise<InitOutput>}
288
+ */
289
+ export default function __wbg_init (module_or_path?: { module_or_path: InitInput | Promise<InitInput> } | InitInput | Promise<InitInput>): Promise<InitOutput>;