@next2d/renderer 2.0.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.
- package/LICENSE +21 -0
- package/README.md +11 -0
- package/package.json +31 -0
- package/src/Command/service/CommandInitializeContextService.d.ts +11 -0
- package/src/Command/service/CommandInitializeContextService.js +27 -0
- package/src/Command/service/CommandRemoveCacheService.d.ts +10 -0
- package/src/Command/service/CommandRemoveCacheService.js +24 -0
- package/src/Command/service/CommandResizeService.d.ts +12 -0
- package/src/Command/service/CommandResizeService.js +27 -0
- package/src/Command/usecase/CommandCaptureUseCase.d.ts +13 -0
- package/src/Command/usecase/CommandCaptureUseCase.js +53 -0
- package/src/Command/usecase/CommandRenderUseCase.d.ts +11 -0
- package/src/Command/usecase/CommandRenderUseCase.js +70 -0
- package/src/CommandController.d.ts +38 -0
- package/src/CommandController.js +102 -0
- package/src/DisplayObject/service/DisplayObjectGetBlendModeService.d.ts +11 -0
- package/src/DisplayObject/service/DisplayObjectGetBlendModeService.js +45 -0
- package/src/DisplayObjectContainer/usecase/DisplayObjectContainerClipRenderUseCase.d.ts +11 -0
- package/src/DisplayObjectContainer/usecase/DisplayObjectContainerClipRenderUseCase.js +29 -0
- package/src/DisplayObjectContainer/usecase/DisplayObjectContainerRenderUseCase.d.ts +12 -0
- package/src/DisplayObjectContainer/usecase/DisplayObjectContainerRenderUseCase.js +120 -0
- package/src/RendererUtil.d.ts +136 -0
- package/src/RendererUtil.js +214 -0
- package/src/Shape/service/ShapeCommandService.d.ts +11 -0
- package/src/Shape/service/ShapeCommandService.js +252 -0
- package/src/Shape/usecase/ShapeClipRenderUseCase.d.ts +11 -0
- package/src/Shape/usecase/ShapeClipRenderUseCase.js +33 -0
- package/src/Shape/usecase/ShapeRenderUseCase.d.ts +11 -0
- package/src/Shape/usecase/ShapeRenderUseCase.js +154 -0
- package/src/TextField/service/TextFieldGenerateFontStyleService.d.ts +11 -0
- package/src/TextField/service/TextFieldGenerateFontStyleService.js +19 -0
- package/src/TextField/service/TextFiledGetAlignOffsetService.d.ts +15 -0
- package/src/TextField/service/TextFiledGetAlignOffsetService.js +33 -0
- package/src/TextField/usecase/TextFieldDrawOffscreenCanvasUseCase.d.ts +15 -0
- package/src/TextField/usecase/TextFieldDrawOffscreenCanvasUseCase.js +272 -0
- package/src/TextField/usecase/TextFieldRenderUseCase.d.ts +11 -0
- package/src/TextField/usecase/TextFieldRenderUseCase.js +150 -0
- package/src/Video/usecase/VideoRenderUseCase.d.ts +12 -0
- package/src/Video/usecase/VideoRenderUseCase.js +88 -0
- package/src/index.d.ts +2 -0
- package/src/index.js +26 -0
- package/src/interface/IBlendMode.d.ts +1 -0
- package/src/interface/IBlendMode.js +1 -0
- package/src/interface/IMessage.d.ts +11 -0
- package/src/interface/IMessage.js +1 -0
- package/src/interface/INode.d.ts +7 -0
- package/src/interface/INode.js +1 -0
- package/src/interface/IRGBA.d.ts +6 -0
- package/src/interface/IRGBA.js +1 -0
- package/src/interface/ITextData.d.ts +8 -0
- package/src/interface/ITextData.js +1 -0
- package/src/interface/ITextFieldAutoSize.d.ts +1 -0
- package/src/interface/ITextFieldAutoSize.js +1 -0
- package/src/interface/ITextFormat.d.ts +14 -0
- package/src/interface/ITextFormat.js +1 -0
- package/src/interface/ITextFormatAlign.d.ts +1 -0
- package/src/interface/ITextFormatAlign.js +1 -0
- package/src/interface/ITextObject.d.ts +12 -0
- package/src/interface/ITextObject.js +1 -0
- package/src/interface/ITextObjectMode.d.ts +1 -0
- package/src/interface/ITextObjectMode.js +1 -0
- package/src/interface/ITextSetting.d.ts +25 -0
- package/src/interface/ITextSetting.js +1 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2021 Next2D
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
package/package.json
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@next2d/renderer",
|
|
3
|
+
"version": "2.0.0",
|
|
4
|
+
"description": "Next2D Renderer Package",
|
|
5
|
+
"author": "Toshiyuki Ienaga<ienaga@next2d.app> (https://github.com/ienaga/)",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"homepage": "https://next2d.app",
|
|
8
|
+
"bugs": "https://github.com/Next2D/Player/issues",
|
|
9
|
+
"main": "src/index.js",
|
|
10
|
+
"types": "src/index.d.ts",
|
|
11
|
+
"type": "module",
|
|
12
|
+
"exports": {
|
|
13
|
+
".": {
|
|
14
|
+
"import": "./src/index.js",
|
|
15
|
+
"require": "./src/index.js"
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
"keywords": [
|
|
19
|
+
"Next2D",
|
|
20
|
+
"Next2D Renderer"
|
|
21
|
+
],
|
|
22
|
+
"repository": {
|
|
23
|
+
"type": "git",
|
|
24
|
+
"url": "git+https://github.com/Next2D/Player.git"
|
|
25
|
+
},
|
|
26
|
+
"dependencies": {
|
|
27
|
+
"@next2d/webgl": "2.0.0",
|
|
28
|
+
"@next2d/cache": "2.0.0",
|
|
29
|
+
"@next2d/texture-packer": "2.0.0"
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description OffscreenCanvasからWebGL2のコンテキストを取得
|
|
3
|
+
* Get WebGL2 context from OffscreenCanvas
|
|
4
|
+
*
|
|
5
|
+
* @param {OffscreenCanvas} canvas
|
|
6
|
+
* @param {number} device_pixel_ratio
|
|
7
|
+
* @return {void}
|
|
8
|
+
* @method
|
|
9
|
+
* @public
|
|
10
|
+
*/
|
|
11
|
+
export declare const execute: (canvas: OffscreenCanvas, device_pixel_ratio: number) => void;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { Context } from "@next2d/webgl";
|
|
2
|
+
import { $setCanvas, $setContext, $samples } from "../../RendererUtil";
|
|
3
|
+
/**
|
|
4
|
+
* @description OffscreenCanvasからWebGL2のコンテキストを取得
|
|
5
|
+
* Get WebGL2 context from OffscreenCanvas
|
|
6
|
+
*
|
|
7
|
+
* @param {OffscreenCanvas} canvas
|
|
8
|
+
* @param {number} device_pixel_ratio
|
|
9
|
+
* @return {void}
|
|
10
|
+
* @method
|
|
11
|
+
* @public
|
|
12
|
+
*/
|
|
13
|
+
export const execute = (canvas, device_pixel_ratio) => {
|
|
14
|
+
// Set OffscreenCanvas
|
|
15
|
+
$setCanvas(canvas);
|
|
16
|
+
const gl = canvas.getContext("webgl2", {
|
|
17
|
+
"stencil": true,
|
|
18
|
+
"premultipliedAlpha": true,
|
|
19
|
+
"antialias": false,
|
|
20
|
+
"depth": false
|
|
21
|
+
});
|
|
22
|
+
if (!gl) {
|
|
23
|
+
throw new Error("webgl2 is not supported.");
|
|
24
|
+
}
|
|
25
|
+
// Set CanvasToWebGLContext
|
|
26
|
+
$setContext(new Context(gl, $samples, device_pixel_ratio));
|
|
27
|
+
};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { $cacheStore } from "@next2d/cache";
|
|
2
|
+
import { $context } from "../../RendererUtil";
|
|
3
|
+
/**
|
|
4
|
+
* @description キャッシュキーを削除
|
|
5
|
+
* Remove cache key
|
|
6
|
+
*
|
|
7
|
+
* @param {Float32Array} remove_cache_keys
|
|
8
|
+
* @return {void}
|
|
9
|
+
* @method
|
|
10
|
+
* @public
|
|
11
|
+
*/
|
|
12
|
+
export const execute = (remove_cache_keys) => {
|
|
13
|
+
for (let idx = 0; idx < remove_cache_keys.length; ++idx) {
|
|
14
|
+
const cacheKey = `${remove_cache_keys[idx]}`;
|
|
15
|
+
if (!$cacheStore.has(cacheKey)) {
|
|
16
|
+
continue;
|
|
17
|
+
}
|
|
18
|
+
const cache = $cacheStore.getById(cacheKey);
|
|
19
|
+
for (const node of cache.values()) {
|
|
20
|
+
$context.removeNode(node);
|
|
21
|
+
}
|
|
22
|
+
$cacheStore.removeById(cacheKey);
|
|
23
|
+
}
|
|
24
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description 画面リサイズ時にcanvasのリサイズ、内部情報の更新を行う
|
|
3
|
+
* Resize the canvas when resizing the screen and update internal information
|
|
4
|
+
*
|
|
5
|
+
* @param {number} renderer_width
|
|
6
|
+
* @param {number} renderer_height
|
|
7
|
+
* @param {boolean} cache_clear
|
|
8
|
+
* @return {void}
|
|
9
|
+
* @method
|
|
10
|
+
* @public
|
|
11
|
+
*/
|
|
12
|
+
export declare const execute: (renderer_width: number, renderer_height: number, cache_clear?: boolean) => void;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { $cacheStore } from "@next2d/cache";
|
|
2
|
+
import { $setRendererSize, $context, $getRendererWidth, $getRendererHeight } from "../../RendererUtil";
|
|
3
|
+
/**
|
|
4
|
+
* @description 画面リサイズ時にcanvasのリサイズ、内部情報の更新を行う
|
|
5
|
+
* Resize the canvas when resizing the screen and update internal information
|
|
6
|
+
*
|
|
7
|
+
* @param {number} renderer_width
|
|
8
|
+
* @param {number} renderer_height
|
|
9
|
+
* @param {boolean} cache_clear
|
|
10
|
+
* @return {void}
|
|
11
|
+
* @method
|
|
12
|
+
* @public
|
|
13
|
+
*/
|
|
14
|
+
export const execute = (renderer_width, renderer_height, cache_clear = true) => {
|
|
15
|
+
if ($getRendererWidth() === renderer_width
|
|
16
|
+
&& $getRendererHeight() === renderer_height) {
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
// resize
|
|
20
|
+
$setRendererSize(renderer_width, renderer_height);
|
|
21
|
+
// context reset and update
|
|
22
|
+
$context.resize(renderer_width, renderer_height, cache_clear);
|
|
23
|
+
// cache clear
|
|
24
|
+
if (cache_clear) {
|
|
25
|
+
$cacheStore.reset();
|
|
26
|
+
}
|
|
27
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description 描画コマンドから描画を実行してcanvasに描画して返却
|
|
3
|
+
* Execute drawing from drawing command and draw to canvas and return
|
|
4
|
+
*
|
|
5
|
+
* @param {Float32Array} render_queue
|
|
6
|
+
* @param {number} width
|
|
7
|
+
* @param {number} height
|
|
8
|
+
* @param {ImageBitmap[]} [image_bitmaps=null]
|
|
9
|
+
* @return {Promise<ImageBitmap>}
|
|
10
|
+
* @method
|
|
11
|
+
* @protected
|
|
12
|
+
*/
|
|
13
|
+
export declare const execute: (render_queue: Float32Array, width: number, height: number, image_bitmaps: ImageBitmap[] | null) => Promise<ImageBitmap>;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { execute as displayObjectContainerRenderUseCase } from "../../DisplayObjectContainer/usecase/DisplayObjectContainerRenderUseCase";
|
|
2
|
+
import { execute as shapeRenderUseCase } from "../../Shape/usecase/ShapeRenderUseCase";
|
|
3
|
+
import { execute as textFieldRenderUseCase } from "../../TextField/usecase/TextFieldRenderUseCase";
|
|
4
|
+
import { execute as videoRenderUseCase } from "../../Video/usecase/VideoRenderUseCase";
|
|
5
|
+
import { $context } from "../../RendererUtil";
|
|
6
|
+
/**
|
|
7
|
+
* @description 描画コマンドから描画を実行してcanvasに描画して返却
|
|
8
|
+
* Execute drawing from drawing command and draw to canvas and return
|
|
9
|
+
*
|
|
10
|
+
* @param {Float32Array} render_queue
|
|
11
|
+
* @param {number} width
|
|
12
|
+
* @param {number} height
|
|
13
|
+
* @param {ImageBitmap[]} [image_bitmaps=null]
|
|
14
|
+
* @return {Promise<ImageBitmap>}
|
|
15
|
+
* @method
|
|
16
|
+
* @protected
|
|
17
|
+
*/
|
|
18
|
+
export const execute = async (render_queue, width, height, image_bitmaps) => {
|
|
19
|
+
// reset transfer bounds
|
|
20
|
+
$context.clearTransferBounds();
|
|
21
|
+
let index = 1;
|
|
22
|
+
// reset
|
|
23
|
+
$context.reset();
|
|
24
|
+
$context.setTransform(1, 0, 0, 1, 0, 0);
|
|
25
|
+
$context.fillBackgroundColor();
|
|
26
|
+
while (render_queue.length > index) {
|
|
27
|
+
// hidden
|
|
28
|
+
if (!render_queue[index++]) {
|
|
29
|
+
continue;
|
|
30
|
+
}
|
|
31
|
+
// display object type
|
|
32
|
+
const type = render_queue[index++];
|
|
33
|
+
switch (type) {
|
|
34
|
+
case 0x00: // container
|
|
35
|
+
index = displayObjectContainerRenderUseCase(render_queue, index, image_bitmaps);
|
|
36
|
+
break;
|
|
37
|
+
case 0x01: // shape
|
|
38
|
+
index = shapeRenderUseCase(render_queue, index);
|
|
39
|
+
break;
|
|
40
|
+
case 0x02: // text
|
|
41
|
+
index = textFieldRenderUseCase(render_queue, index);
|
|
42
|
+
break;
|
|
43
|
+
case 0x03: // video
|
|
44
|
+
index = videoRenderUseCase(render_queue, index, image_bitmaps);
|
|
45
|
+
break;
|
|
46
|
+
default:
|
|
47
|
+
console.error("unknown type", type);
|
|
48
|
+
break;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
$context.drawArraysInstanced();
|
|
52
|
+
return await $context.createImageBitmap(width, height);
|
|
53
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description 描画コマンドから描画を実行
|
|
3
|
+
* Execute drawing from drawing command
|
|
4
|
+
*
|
|
5
|
+
* @param {Float32Array} render_queue
|
|
6
|
+
* @param {ImageBitmap[]} [image_bitmaps=null]
|
|
7
|
+
* @return {void}
|
|
8
|
+
* @method
|
|
9
|
+
* @protected
|
|
10
|
+
*/
|
|
11
|
+
export declare const execute: (render_queue: Float32Array, image_bitmaps: ImageBitmap[] | null) => void;
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { execute as displayObjectContainerRenderUseCase } from "../../DisplayObjectContainer/usecase/DisplayObjectContainerRenderUseCase";
|
|
2
|
+
import { execute as shapeRenderUseCase } from "../../Shape/usecase/ShapeRenderUseCase";
|
|
3
|
+
import { execute as textFieldRenderUseCase } from "../../TextField/usecase/TextFieldRenderUseCase";
|
|
4
|
+
import { execute as videoRenderUseCase } from "../../Video/usecase/VideoRenderUseCase";
|
|
5
|
+
import { $context, $isResize, $resizeComplete } from "../../RendererUtil";
|
|
6
|
+
/**
|
|
7
|
+
* @type {number}
|
|
8
|
+
* @private
|
|
9
|
+
*/
|
|
10
|
+
let $color = -1;
|
|
11
|
+
/**
|
|
12
|
+
* @description 描画コマンドから描画を実行
|
|
13
|
+
* Execute drawing from drawing command
|
|
14
|
+
*
|
|
15
|
+
* @param {Float32Array} render_queue
|
|
16
|
+
* @param {ImageBitmap[]} [image_bitmaps=null]
|
|
17
|
+
* @return {void}
|
|
18
|
+
* @method
|
|
19
|
+
* @protected
|
|
20
|
+
*/
|
|
21
|
+
export const execute = (render_queue, image_bitmaps) => {
|
|
22
|
+
// reset transfer bounds
|
|
23
|
+
$context.clearTransferBounds();
|
|
24
|
+
let index = 0;
|
|
25
|
+
// update background color
|
|
26
|
+
const color = render_queue[index++];
|
|
27
|
+
if ($color !== color) {
|
|
28
|
+
$color = color;
|
|
29
|
+
if ($color === -1) {
|
|
30
|
+
$context.updateBackgroundColor(0, 0, 0, 0);
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
$context.updateBackgroundColor($color >> 16 & 0xff / 255, $color >> 8 & 0xff / 255, $color & 0xff / 255, 1);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
// reset
|
|
37
|
+
$context.reset();
|
|
38
|
+
$context.setTransform(1, 0, 0, 1, 0, 0);
|
|
39
|
+
$context.fillBackgroundColor();
|
|
40
|
+
while (render_queue.length > index) {
|
|
41
|
+
// hidden
|
|
42
|
+
if (!render_queue[index++]) {
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
// display object type
|
|
46
|
+
const type = render_queue[index++];
|
|
47
|
+
switch (type) {
|
|
48
|
+
case 0x00: // container
|
|
49
|
+
index = displayObjectContainerRenderUseCase(render_queue, index, image_bitmaps);
|
|
50
|
+
break;
|
|
51
|
+
case 0x01: // shape
|
|
52
|
+
index = shapeRenderUseCase(render_queue, index);
|
|
53
|
+
break;
|
|
54
|
+
case 0x02: // text
|
|
55
|
+
index = textFieldRenderUseCase(render_queue, index);
|
|
56
|
+
break;
|
|
57
|
+
case 0x03: // video
|
|
58
|
+
index = videoRenderUseCase(render_queue, index, image_bitmaps);
|
|
59
|
+
break;
|
|
60
|
+
default:
|
|
61
|
+
console.error("unknown type", type);
|
|
62
|
+
break;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
$context.drawArraysInstanced();
|
|
66
|
+
if ($isResize()) {
|
|
67
|
+
$resizeComplete();
|
|
68
|
+
}
|
|
69
|
+
$context.transferMainCanvas();
|
|
70
|
+
};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { IMessage } from "./interface/IMessage";
|
|
2
|
+
/**
|
|
3
|
+
* @class
|
|
4
|
+
*/
|
|
5
|
+
export declare class CommandController {
|
|
6
|
+
/**
|
|
7
|
+
* @description workerの実行状態
|
|
8
|
+
* Execution status of worker
|
|
9
|
+
*
|
|
10
|
+
* @type {string}
|
|
11
|
+
* @default "deactivate"
|
|
12
|
+
* @public
|
|
13
|
+
*/
|
|
14
|
+
state: string;
|
|
15
|
+
/**
|
|
16
|
+
* @description 受け取ったメッセージ配列
|
|
17
|
+
* Received message array
|
|
18
|
+
*
|
|
19
|
+
* @type {array}
|
|
20
|
+
* @default []
|
|
21
|
+
* @public
|
|
22
|
+
*/
|
|
23
|
+
queue: IMessage[];
|
|
24
|
+
/**
|
|
25
|
+
* @constructor
|
|
26
|
+
* @public
|
|
27
|
+
*/
|
|
28
|
+
constructor();
|
|
29
|
+
/**
|
|
30
|
+
* @description 処理を実行
|
|
31
|
+
* Execute process
|
|
32
|
+
*
|
|
33
|
+
* @return {Promise<void>}
|
|
34
|
+
* @method
|
|
35
|
+
* @public
|
|
36
|
+
*/
|
|
37
|
+
execute(): Promise<void>;
|
|
38
|
+
}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { execute as commandInitializeContextService } from "./Command/service/CommandInitializeContextService";
|
|
2
|
+
import { execute as commandResizeService } from "./Command/service/CommandResizeService";
|
|
3
|
+
import { execute as commandRenderUseCase } from "./Command/usecase/CommandRenderUseCase";
|
|
4
|
+
import { execute as commandRemoveCacheService } from "./Command/service/CommandRemoveCacheService";
|
|
5
|
+
import { execute as commandCaptureUseCase } from "./Command/usecase/CommandCaptureUseCase";
|
|
6
|
+
import { $cacheStore } from "@next2d/cache";
|
|
7
|
+
/**
|
|
8
|
+
* @class
|
|
9
|
+
*/
|
|
10
|
+
export class CommandController {
|
|
11
|
+
/**
|
|
12
|
+
* @constructor
|
|
13
|
+
* @public
|
|
14
|
+
*/
|
|
15
|
+
constructor() {
|
|
16
|
+
/**
|
|
17
|
+
* @description workerの実行状態
|
|
18
|
+
* Execution status of worker
|
|
19
|
+
*
|
|
20
|
+
* @type {string}
|
|
21
|
+
* @default "deactivate"
|
|
22
|
+
* @public
|
|
23
|
+
*/
|
|
24
|
+
Object.defineProperty(this, "state", {
|
|
25
|
+
enumerable: true,
|
|
26
|
+
configurable: true,
|
|
27
|
+
writable: true,
|
|
28
|
+
value: void 0
|
|
29
|
+
});
|
|
30
|
+
/**
|
|
31
|
+
* @description 受け取ったメッセージ配列
|
|
32
|
+
* Received message array
|
|
33
|
+
*
|
|
34
|
+
* @type {array}
|
|
35
|
+
* @default []
|
|
36
|
+
* @public
|
|
37
|
+
*/
|
|
38
|
+
Object.defineProperty(this, "queue", {
|
|
39
|
+
enumerable: true,
|
|
40
|
+
configurable: true,
|
|
41
|
+
writable: true,
|
|
42
|
+
value: void 0
|
|
43
|
+
});
|
|
44
|
+
this.state = "deactivate";
|
|
45
|
+
this.queue = [];
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* @description 処理を実行
|
|
49
|
+
* Execute process
|
|
50
|
+
*
|
|
51
|
+
* @return {Promise<void>}
|
|
52
|
+
* @method
|
|
53
|
+
* @public
|
|
54
|
+
*/
|
|
55
|
+
async execute() {
|
|
56
|
+
this.state = "active";
|
|
57
|
+
while (this.queue.length) {
|
|
58
|
+
const object = this.queue.shift();
|
|
59
|
+
if (!object) {
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
switch (object.command) {
|
|
63
|
+
case "render":
|
|
64
|
+
commandRenderUseCase(object.buffer.subarray(0, object.length), object.imageBitmaps);
|
|
65
|
+
// 描画完了したらメインスレッドにbufferを返却する
|
|
66
|
+
globalThis.postMessage({
|
|
67
|
+
"message": "render",
|
|
68
|
+
"buffer": object.buffer
|
|
69
|
+
// @ts-ignore
|
|
70
|
+
}, [object.buffer.buffer]);
|
|
71
|
+
break;
|
|
72
|
+
case "resize":
|
|
73
|
+
commandResizeService(object.buffer[0], object.buffer[1], Boolean(object.buffer[2]));
|
|
74
|
+
break;
|
|
75
|
+
case "initialize":
|
|
76
|
+
commandInitializeContextService(object.canvas, object.devicePixelRatio);
|
|
77
|
+
break;
|
|
78
|
+
case "removeCache":
|
|
79
|
+
commandRemoveCacheService(object.buffer);
|
|
80
|
+
break;
|
|
81
|
+
case "cacheClear":
|
|
82
|
+
$cacheStore.reset();
|
|
83
|
+
break;
|
|
84
|
+
case "capture":
|
|
85
|
+
{
|
|
86
|
+
const imageBitmap = await commandCaptureUseCase(object.buffer.subarray(0, object.length), object.width, object.height, object.imageBitmaps);
|
|
87
|
+
// 描画完了したらメインスレッドにbufferを返却する
|
|
88
|
+
globalThis.postMessage({
|
|
89
|
+
"message": "capture",
|
|
90
|
+
"buffer": object.buffer,
|
|
91
|
+
"imageBitmap": imageBitmap
|
|
92
|
+
// @ts-ignore
|
|
93
|
+
}, [object.buffer.buffer, imageBitmap]);
|
|
94
|
+
}
|
|
95
|
+
break;
|
|
96
|
+
default:
|
|
97
|
+
break;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
this.state = "deactivate";
|
|
101
|
+
}
|
|
102
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { IBlendMode } from "../../interface/IBlendMode";
|
|
2
|
+
/**
|
|
3
|
+
* @description ブレンドモードを取得します。
|
|
4
|
+
* Get the blend mode.
|
|
5
|
+
*
|
|
6
|
+
* @param {number} blend_number
|
|
7
|
+
* @return {IBlendMode}
|
|
8
|
+
* @method
|
|
9
|
+
* @protected
|
|
10
|
+
*/
|
|
11
|
+
export declare const execute: (blend_number: number) => IBlendMode;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description ブレンドモードを取得します。
|
|
3
|
+
* Get the blend mode.
|
|
4
|
+
*
|
|
5
|
+
* @param {number} blend_number
|
|
6
|
+
* @return {IBlendMode}
|
|
7
|
+
* @method
|
|
8
|
+
* @protected
|
|
9
|
+
*/
|
|
10
|
+
export const execute = (blend_number) => {
|
|
11
|
+
switch (blend_number) {
|
|
12
|
+
case 0:
|
|
13
|
+
return "copy";
|
|
14
|
+
case 1:
|
|
15
|
+
return "add";
|
|
16
|
+
case 2:
|
|
17
|
+
return "alpha";
|
|
18
|
+
case 3:
|
|
19
|
+
return "darken";
|
|
20
|
+
case 4:
|
|
21
|
+
return "difference";
|
|
22
|
+
case 5:
|
|
23
|
+
return "erase";
|
|
24
|
+
case 6:
|
|
25
|
+
return "hardlight";
|
|
26
|
+
case 7:
|
|
27
|
+
return "invert";
|
|
28
|
+
case 8:
|
|
29
|
+
return "layer";
|
|
30
|
+
case 9:
|
|
31
|
+
return "lighten";
|
|
32
|
+
case 10:
|
|
33
|
+
return "multiply";
|
|
34
|
+
case 11:
|
|
35
|
+
return "normal";
|
|
36
|
+
case 12:
|
|
37
|
+
return "overlay";
|
|
38
|
+
case 13:
|
|
39
|
+
return "screen";
|
|
40
|
+
case 14:
|
|
41
|
+
return "subtract";
|
|
42
|
+
default:
|
|
43
|
+
return "normal"; // normal
|
|
44
|
+
}
|
|
45
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description DisplayObjectContainerのマスク描画を実行します。
|
|
3
|
+
* Execute the mask drawing of DisplayObjectContainer.
|
|
4
|
+
*
|
|
5
|
+
* @param {Float32Array} render_queue
|
|
6
|
+
* @param {number} index
|
|
7
|
+
* @return {number}
|
|
8
|
+
* @method
|
|
9
|
+
* @protected
|
|
10
|
+
*/
|
|
11
|
+
export declare const execute: (render_queue: Float32Array, index: number) => number;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { execute as shapeClipRenderUseCase } from "../../Shape/usecase/ShapeClipRenderUseCase";
|
|
2
|
+
/**
|
|
3
|
+
* @description DisplayObjectContainerのマスク描画を実行します。
|
|
4
|
+
* Execute the mask drawing of DisplayObjectContainer.
|
|
5
|
+
*
|
|
6
|
+
* @param {Float32Array} render_queue
|
|
7
|
+
* @param {number} index
|
|
8
|
+
* @return {number}
|
|
9
|
+
* @method
|
|
10
|
+
* @protected
|
|
11
|
+
*/
|
|
12
|
+
export const execute = (render_queue, index) => {
|
|
13
|
+
const length = render_queue[index++];
|
|
14
|
+
for (let idx = 0; idx < length; ++idx) {
|
|
15
|
+
const type = render_queue[index++];
|
|
16
|
+
switch (type) {
|
|
17
|
+
case 0x00: // container
|
|
18
|
+
index = execute(render_queue, index);
|
|
19
|
+
break;
|
|
20
|
+
case 0x01: // shape
|
|
21
|
+
index = shapeClipRenderUseCase(render_queue, index);
|
|
22
|
+
break;
|
|
23
|
+
// text, videoはマスク対象外
|
|
24
|
+
default:
|
|
25
|
+
break;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return index;
|
|
29
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description DisplayObjectContainerの描画を実行します。
|
|
3
|
+
* Execute the drawing of DisplayObjectContainer.
|
|
4
|
+
*
|
|
5
|
+
* @param {Float32Array} render_queue
|
|
6
|
+
* @param {number} index
|
|
7
|
+
* @param {ImageBitmap[]} [image_bitmaps=null]
|
|
8
|
+
* @return {number}
|
|
9
|
+
* @method
|
|
10
|
+
* @protected
|
|
11
|
+
*/
|
|
12
|
+
export declare const execute: (render_queue: Float32Array, index: number, image_bitmaps: ImageBitmap[] | null) => number;
|