xVASynth-TTS / lib /Three.texture.js
Pendrokar's picture
xVASynth v3 code for English
19c8b95
raw
history blame
8.11 kB
! function(t, e) {
"object" == typeof exports && "undefined" != typeof module ? module.exports = e(require("three")) : "function" == typeof define && define.amd ? define(["three"], e) : ((t = "undefined" != typeof globalThis ? globalThis : t || self).THREE = t.THREE || {}, t.THREE.TextTexture = e(t.THREE))
}(this, (function(t) {
"use strict";
let e = class extends t.Texture {
constructor() {
super(document.createElement("canvas"));
let e = null,
i = () => e || (e = this.createDrawable()),
n = () => i().width,
o = () => i().height,
r = !0,
l = 1,
a = () => t.MathUtils.ceilPowerOfTwo(n() * l),
s = () => t.MathUtils.ceilPowerOfTwo(o() * l),
h = t => {
if (l !== t) {
let e = a(),
i = s();
l = t;
let n = a(),
o = s();
n === e && o === i || (r = !0)
}
},
c = (() => {
let e = new t.Vector3,
i = new t.Vector2,
r = new t.Vector3,
l = new t.Vector3,
a = new t.Vector2;
return (s, h, c) => {
if (a.set(n(), o()), a.x && a.y) {
s.getWorldPosition(r), c.getWorldPosition(e);
let n = r.distanceTo(e);
if (c.isPerspectiveCamera && (n *= 2 * Math.tan(t.MathUtils.degToRad(c.fov) / 2)), (c.isPerspectiveCamera || c.isOrthographicCamera) && (n /= c.zoom), n) {
var f, d;
s.getWorldScale(l);
let t = null !== (f = null === (d = h.capabilities) || void 0 === d ? void 0 : d.maxTextureSize) && void 0 !== f ? f : 1 / 0;
return h.getDrawingBufferSize(i), Math.min(Math.max(l.x / n * (i.x / a.x), l.y / n * (i.y / a.y)), t / a.x, t / a.y)
}
}
return 0
}
})();
Object.defineProperties(this, {
width: {
get: n
},
height: {
get: o
},
pixelRatio: {
get: () => l,
set: h
},
needsRedraw: {
set(t) {
t && (r = !0, e = null)
}
}
}), Object.assign(this, {
redraw() {
if (r) {
let t = this.image,
e = t.getContext("2d");
e.clearRect(0, 0, t.width, t.height), t.width = a(), t.height = s(), t.width && t.height ? (e.save(), e.scale(t.width / n(), t.height / o()), ((...t) => {
i().draw(...t)
})(e), e.restore()) : t.width = t.height = 1, r = !1, this.needsUpdate = !0
}
},
setOptimalPixelRatio(...t) {
h(c(...t))
}
})
}
};
e.prototype.isDynamicTexture = !0;
let i = class extends e {
constructor({
alignment: t = "center",
backgroundColor: e = "rgba(0,0,0,0)",
color: i = "#fff",
fontFamily: n = "sans-serif",
fontSize: o = 16,
fontStyle: r = "normal",
fontVariant: l = "normal",
fontWeight: a = "normal",
lineGap: s = 1 / 4,
padding: h = .5,
strokeColor: c = "#fff",
strokeWidth: f = 0,
text: d = ""
} = {}) {
super(), Object.entries({
alignment: t,
backgroundColor: e,
color: i,
fontFamily: n,
fontSize: o,
fontStyle: r,
fontVariant: l,
fontWeight: a,
lineGap: s,
padding: h,
strokeColor: c,
strokeWidth: f,
text: d
}).forEach((([t, e]) => {
Object.defineProperty(this, t, {
get: () => e,
set(t) {
e !== t && (e = t, this.needsRedraw = !0)
}
})
}))
}
get lines() {
let {
text: t
} = this;
return t ? t.split("\n") : []
}
get font() {
return function(t, e, i, n, o) {
let r = document.createElement("span");
return r.style.font = "1px serif", r.style.fontFamily = t, r.style.fontSize = "".concat(e, "px"), r.style.fontStyle = i, r.style.fontVariant = n, r.style.fontWeight = o, r.style.font
}(this.fontFamily, this.fontSize, this.fontStyle, this.fontVariant, this.fontWeight)
}
checkFontFace() {
try {
let {
font: t
} = this;
return document.fonts.check(t)
} catch (e) {}
return !0
}
async loadFontFace() {
try {
let {
font: t
} = this;
await document.fonts.load(t)
} catch (e) {}
}
createDrawable() {
let {
alignment: t,
backgroundColor: e,
color: i,
font: n,
fontSize: o,
lineGap: r,
lines: l,
padding: a,
strokeColor: s,
strokeWidth: h
} = this;
a *= o, r *= o, h *= o;
let c = l.length,
f = o + r,
d = c ? (() => {
let t = document.createElement("canvas").getContext("2d");
return t.font = n, Math.max(...l.map((e => t.measureText(e).width)))
})() : 0,
g = a + h / 2,
u = d + 2 * g;
return {
width: u,
height: (c ? o + f * (c - 1) : 0) + 2 * g,
draw(r) {
let a;
r.fillStyle = e, r.fillRect(0, 0, r.canvas.width, r.canvas.height);
let c = g + o / 2;
Object.assign(r, {
fillStyle: i,
font: n,
lineWidth: h,
miterLimit: 1,
strokeStyle: s,
textAlign: (() => {
switch (t) {
case "left":
return a = g, "left";
case "right":
return a = u - g, "right"
}
return a = u / 2, "center"
})(),
textBaseline: "middle"
}), l.forEach((t => {
// r.lineWidth=60
// r.shadowColor="white"
// r.shadowBlur=2
// r.fillStyle = "white"
// r.fillText(t, a, c);
r.lineWidth=5
r.shadowColor="black"
r.shadowBlur=0
r.fillStyle = "black"
r.fillText(t, a, c);
h && r.strokeText(t, a, c), c += f
}))
}
}
}
};
return i.prototype.isTextTexture = !0, i
}));