1 | 'use strict';
|
2 |
|
3 | Object.defineProperty(exports, '__esModule', { value: true });
|
4 |
|
5 | var constants = require('@pixi/constants');
|
6 | var utils = require('@pixi/utils');
|
7 | var defaultProgram$1 = require('./defaultProgram.js');
|
8 | var defaultProgram = require('./defaultProgram2.js');
|
9 | require('./utils/index.js');
|
10 | var setPrecision = require('./utils/setPrecision.js');
|
11 | var getMaxFragmentPrecision = require('./utils/getMaxFragmentPrecision.js');
|
12 |
|
13 | let UID = 0;
|
14 | const nameCache = {};
|
15 | const _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 | };
|
57 | let Program = _Program;
|
58 | Program.defaultVertexPrecision = constants.PRECISION.HIGH;
|
59 | Program.defaultFragmentPrecision = utils.isMobile.apple.device ? constants.PRECISION.HIGH : constants.PRECISION.MEDIUM;
|
60 |
|
61 | exports.Program = Program;
|
62 |
|