UNPKG

2.28 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, '__esModule', { value: true });
4
5var constants = require('@pixi/constants');
6var utils = require('@pixi/utils');
7var defaultProgram$1 = require('./defaultProgram.js');
8var defaultProgram = require('./defaultProgram2.js');
9require('./utils/index.js');
10var setPrecision = require('./utils/setPrecision.js');
11var getMaxFragmentPrecision = require('./utils/getMaxFragmentPrecision.js');
12
13let UID = 0;
14const nameCache = {};
15const _Program = class {
16 constructor(vertexSrc, fragmentSrc, name = "pixi-shader", extra = {}) {
17 this.extra = {};
18 this.id = UID++;
19 this.vertexSrc = vertexSrc || _Program.defaultVertexSrc;
20 this.fragmentSrc = fragmentSrc || _Program.defaultFragmentSrc;
21 this.vertexSrc = this.vertexSrc.trim();
22 this.fragmentSrc = this.fragmentSrc.trim();
23 this.extra = extra;
24 if (this.vertexSrc.substring(0, 8) !== "#version") {
25 name = name.replace(/\s+/g, "-");
26 if (nameCache[name]) {
27 nameCache[name]++;
28 name += `-${nameCache[name]}`;
29 } else {
30 nameCache[name] = 1;
31 }
32 this.vertexSrc = `#define SHADER_NAME ${name}
33${this.vertexSrc}`;
34 this.fragmentSrc = `#define SHADER_NAME ${name}
35${this.fragmentSrc}`;
36 this.vertexSrc = setPrecision.setPrecision(this.vertexSrc, _Program.defaultVertexPrecision, constants.PRECISION.HIGH);
37 this.fragmentSrc = setPrecision.setPrecision(this.fragmentSrc, _Program.defaultFragmentPrecision, getMaxFragmentPrecision.getMaxFragmentPrecision());
38 }
39 this.glPrograms = {};
40 this.syncUniforms = null;
41 }
42 static get defaultVertexSrc() {
43 return defaultProgram["default"];
44 }
45 static get defaultFragmentSrc() {
46 return defaultProgram$1["default"];
47 }
48 static from(vertexSrc, fragmentSrc, name) {
49 const key = vertexSrc + fragmentSrc;
50 let program = utils.ProgramCache[key];
51 if (!program) {
52 utils.ProgramCache[key] = program = new _Program(vertexSrc, fragmentSrc, name);
53 }
54 return program;
55 }
56};
57let Program = _Program;
58Program.defaultVertexPrecision = constants.PRECISION.HIGH;
59Program.defaultFragmentPrecision = utils.isMobile.apple.device ? constants.PRECISION.HIGH : constants.PRECISION.MEDIUM;
60
61exports.Program = Program;
62//# sourceMappingURL=Program.js.map