1 | "use strict";
|
2 |
|
3 | var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
4 | Object.defineProperty(exports, "__esModule", {
|
5 | value: true
|
6 | });
|
7 | exports.WebGLEngine = void 0;
|
8 | var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
9 | var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
10 | var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
11 | var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
12 | var _gWebgpuCore = require("@antv/g-webgpu-core");
|
13 | var _regl = _interopRequireDefault(require("regl"));
|
14 | var _ReglAttribute = _interopRequireDefault(require("./ReglAttribute"));
|
15 | var _ReglBuffer = _interopRequireDefault(require("./ReglBuffer"));
|
16 | var _ReglComputeModel = _interopRequireDefault(require("./ReglComputeModel"));
|
17 | var _ReglElements = _interopRequireDefault(require("./ReglElements"));
|
18 | var _ReglFramebuffer = _interopRequireDefault(require("./ReglFramebuffer"));
|
19 | var _ReglModel = _interopRequireDefault(require("./ReglModel"));
|
20 | var _ReglTexture2D = _interopRequireDefault(require("./ReglTexture2D"));
|
21 |
|
22 |
|
23 |
|
24 |
|
25 |
|
26 |
|
27 |
|
28 | var WebGLEngine = function () {
|
29 | function WebGLEngine() {
|
30 | var _this = this;
|
31 | (0, _classCallCheck2.default)(this, WebGLEngine);
|
32 | this.supportWebGPU = false;
|
33 | this.useWGSL = false;
|
34 | this.$canvas = void 0;
|
35 | this.gl = void 0;
|
36 | this.inited = void 0;
|
37 | this.createModel = function () {
|
38 | var _ref = (0, _asyncToGenerator2.default)( _regenerator.default.mark(function _callee2(options) {
|
39 | return _regenerator.default.wrap(function _callee2$(_context2) {
|
40 | while (1) {
|
41 | switch (_context2.prev = _context2.next) {
|
42 | case 0:
|
43 | if (!options.uniforms) {
|
44 | _context2.next = 3;
|
45 | break;
|
46 | }
|
47 | _context2.next = 3;
|
48 | return Promise.all(Object.keys(options.uniforms).map( function () {
|
49 | var _ref2 = (0, _asyncToGenerator2.default)( _regenerator.default.mark(function _callee(name) {
|
50 | var texture;
|
51 | return _regenerator.default.wrap(function _callee$(_context) {
|
52 | while (1) {
|
53 | switch (_context.prev = _context.next) {
|
54 | case 0:
|
55 | if (!(options.uniforms[name] &&
|
56 |
|
57 | options.uniforms[name].load !== undefined)) {
|
58 | _context.next = 5;
|
59 | break;
|
60 | }
|
61 | _context.next = 3;
|
62 | return options.uniforms[name].load();
|
63 | case 3:
|
64 | texture = _context.sent;
|
65 |
|
66 | options.uniforms[name] = texture;
|
67 | case 5:
|
68 | case "end":
|
69 | return _context.stop();
|
70 | }
|
71 | }
|
72 | }, _callee);
|
73 | }));
|
74 | return function (_x2) {
|
75 | return _ref2.apply(this, arguments);
|
76 | };
|
77 | }()));
|
78 | case 3:
|
79 | return _context2.abrupt("return", new _ReglModel.default(_this.gl, options));
|
80 | case 4:
|
81 | case "end":
|
82 | return _context2.stop();
|
83 | }
|
84 | }
|
85 | }, _callee2);
|
86 | }));
|
87 | return function (_x) {
|
88 | return _ref.apply(this, arguments);
|
89 | };
|
90 | }();
|
91 | this.createAttribute = function (options) {
|
92 | return new _ReglAttribute.default(_this.gl, options);
|
93 | };
|
94 | this.createBuffer = function (options) {
|
95 | return new _ReglBuffer.default(_this.gl, options);
|
96 | };
|
97 | this.createElements = function (options) {
|
98 | return new _ReglElements.default(_this.gl, options);
|
99 | };
|
100 | this.createTexture2D = function (options) {
|
101 | return new _ReglTexture2D.default(_this.gl, options);
|
102 | };
|
103 | this.createFramebuffer = function (options) {
|
104 | return new _ReglFramebuffer.default(_this.gl, options);
|
105 | };
|
106 | this.useFramebuffer = function (framebuffer, drawCommands) {
|
107 | _this.gl({
|
108 | framebuffer: framebuffer ? framebuffer.get() : null
|
109 | })(drawCommands);
|
110 | };
|
111 | this.createComputeModel = function () {
|
112 | var _ref3 = (0, _asyncToGenerator2.default)( _regenerator.default.mark(function _callee3(context) {
|
113 | return _regenerator.default.wrap(function _callee3$(_context3) {
|
114 | while (1) {
|
115 | switch (_context3.prev = _context3.next) {
|
116 | case 0:
|
117 | return _context3.abrupt("return", new _ReglComputeModel.default(_this.gl, context));
|
118 | case 1:
|
119 | case "end":
|
120 | return _context3.stop();
|
121 | }
|
122 | }
|
123 | }, _callee3);
|
124 | }));
|
125 | return function (_x3) {
|
126 | return _ref3.apply(this, arguments);
|
127 | };
|
128 | }();
|
129 | this.clear = function (options) {
|
130 |
|
131 | var color = options.color,
|
132 | depth = options.depth,
|
133 | stencil = options.stencil,
|
134 | _options$framebuffer = options.framebuffer,
|
135 | framebuffer = _options$framebuffer === void 0 ? null : _options$framebuffer;
|
136 | var reglClearOptions = {
|
137 | color: color,
|
138 | depth: depth,
|
139 | stencil: stencil
|
140 | };
|
141 | reglClearOptions.framebuffer = framebuffer === null ? framebuffer : framebuffer.get();
|
142 | _this.gl.clear(reglClearOptions);
|
143 | };
|
144 | this.setScissor = function (scissor) {
|
145 | if (_this.gl && _this.gl._gl) {
|
146 |
|
147 | if (scissor.enable && scissor.box) {
|
148 |
|
149 | _this.gl._gl.enable(_gWebgpuCore.gl.SCISSOR_TEST);
|
150 | _this.gl._gl.scissor(scissor.box.x, scissor.box.y, scissor.box.width, scissor.box.height);
|
151 | } else {
|
152 | _this.gl._gl.disable(_gWebgpuCore.gl.SCISSOR_TEST);
|
153 | }
|
154 | _this.gl._refresh();
|
155 | }
|
156 | };
|
157 | this.viewport = function (_ref4) {
|
158 | var x = _ref4.x,
|
159 | y = _ref4.y,
|
160 | width = _ref4.width,
|
161 | height = _ref4.height;
|
162 | if (_this.gl && _this.gl._gl) {
|
163 |
|
164 |
|
165 | _this.gl._gl.viewport(x, y, width, height);
|
166 | _this.gl._refresh();
|
167 | }
|
168 | };
|
169 | this.readPixels = function (options) {
|
170 | var framebuffer = options.framebuffer,
|
171 | x = options.x,
|
172 | y = options.y,
|
173 | width = options.width,
|
174 | height = options.height;
|
175 | var readPixelsOptions = {
|
176 | x: x,
|
177 | y: y,
|
178 | width: width,
|
179 | height: height
|
180 | };
|
181 | if (framebuffer) {
|
182 | readPixelsOptions.framebuffer = framebuffer.get();
|
183 | }
|
184 | return _this.gl.read(readPixelsOptions);
|
185 | };
|
186 | this.getCanvas = function () {
|
187 | return _this.$canvas;
|
188 | };
|
189 | this.getGLContext = function () {
|
190 | return _this.gl._gl;
|
191 | };
|
192 | this.destroy = function () {
|
193 | if (_this.gl) {
|
194 |
|
195 | _this.gl.destroy();
|
196 | _this.inited = false;
|
197 | }
|
198 | };
|
199 | }
|
200 | (0, _createClass2.default)(WebGLEngine, [{
|
201 | key: "init",
|
202 | value: function () {
|
203 | var _init = (0, _asyncToGenerator2.default)( _regenerator.default.mark(function _callee4(cfg) {
|
204 | return _regenerator.default.wrap(function _callee4$(_context4) {
|
205 | while (1) {
|
206 | switch (_context4.prev = _context4.next) {
|
207 | case 0:
|
208 | if (!this.inited) {
|
209 | _context4.next = 2;
|
210 | break;
|
211 | }
|
212 | return _context4.abrupt("return");
|
213 | case 2:
|
214 | this.$canvas = cfg.canvas;
|
215 |
|
216 | _context4.next = 5;
|
217 | return new Promise(function (resolve, reject) {
|
218 | (0, _regl.default)({
|
219 | canvas: cfg.canvas,
|
220 | attributes: {
|
221 | alpha: true,
|
222 |
|
223 |
|
224 | antialias: cfg.antialias,
|
225 | premultipliedAlpha: true
|
226 |
|
227 | },
|
228 |
|
229 | pixelRatio: 1,
|
230 |
|
231 | extensions: ['OES_element_index_uint', 'OES_texture_float', 'OES_standard_derivatives',
|
232 |
|
233 | 'angle_instanced_arrays'
|
234 | ],
|
235 |
|
236 | optionalExtensions: ['EXT_texture_filter_anisotropic', 'EXT_blend_minmax', 'WEBGL_depth_texture'],
|
237 | profile: true,
|
238 | onDone: function onDone(err, r) {
|
239 | if (err || !r) {
|
240 | reject(err);
|
241 | }
|
242 |
|
243 | resolve(r);
|
244 | }
|
245 | });
|
246 | });
|
247 | case 5:
|
248 | this.gl = _context4.sent;
|
249 | this.inited = true;
|
250 | case 7:
|
251 | case "end":
|
252 | return _context4.stop();
|
253 | }
|
254 | }
|
255 | }, _callee4, this);
|
256 | }));
|
257 | function init(_x4) {
|
258 | return _init.apply(this, arguments);
|
259 | }
|
260 | return init;
|
261 | }()
|
262 | }, {
|
263 | key: "isFloatSupported",
|
264 | value: function isFloatSupported() {
|
265 |
|
266 |
|
267 | return this.gl.limits.readFloat;
|
268 | }
|
269 | }, {
|
270 | key: "beginFrame",
|
271 | value: function beginFrame() {
|
272 |
|
273 | }
|
274 | }, {
|
275 | key: "endFrame",
|
276 | value: function endFrame() {
|
277 |
|
278 | }
|
279 | }]);
|
280 | return WebGLEngine;
|
281 | }();
|
282 | exports.WebGLEngine = WebGLEngine;
|
283 |
|
\ | No newline at end of file |