@next2d/webgl 3.0.5 → 3.1.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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@next2d/webgl",
|
|
3
|
-
"version": "3.0
|
|
3
|
+
"version": "3.1.0",
|
|
4
4
|
"description": "Next2D Webgl Package",
|
|
5
5
|
"author": "Toshiyuki Ienaga<ienaga@next2d.app> (https://github.com/ienaga/)",
|
|
6
6
|
"license": "MIT",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"url": "git+https://github.com/Next2D/Player.git"
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@next2d/texture-packer": "3.0
|
|
28
|
-
"@next2d/render-queue": "3.0
|
|
27
|
+
"@next2d/texture-packer": "3.1.0",
|
|
28
|
+
"@next2d/render-queue": "3.1.0"
|
|
29
29
|
}
|
|
30
30
|
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Node } from "@next2d/texture-packer";
|
|
2
|
+
/**
|
|
3
|
+
* @description コンテナのアトラスノードへの描画を終了し、
|
|
4
|
+
* temp FBOの内容をアトラスのノード領域にコピーします。
|
|
5
|
+
* End container atlas node rendering,
|
|
6
|
+
* copy temp FBO contents to atlas node region.
|
|
7
|
+
*
|
|
8
|
+
* @param {Node} node
|
|
9
|
+
* @return {void}
|
|
10
|
+
* @method
|
|
11
|
+
* @protected
|
|
12
|
+
*/
|
|
13
|
+
export declare const execute: (node: Node) => void;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { $containerLayerStack } from "./ContextContainerBeginLayerUseCase";
|
|
2
|
+
import { execute as frameBufferManagerReleaseAttachmentObjectUseCase } from "../../FrameBufferManager/usecase/FrameBufferManagerReleaseAttachmentObjectUseCase";
|
|
3
|
+
import { execute as variantsBlendMatrixTextureShaderService } from "../../Shader/Variants/Blend/service/VariantsBlendMatrixTextureShaderService";
|
|
4
|
+
import { execute as shaderManagerSetMatrixTextureWithColorTransformUniformService } from "../../Shader/ShaderManager/service/ShaderManagerSetMatrixTextureWithColorTransformUniformService";
|
|
5
|
+
import { execute as textureManagerBind0UseCase } from "../../TextureManager/usecase/TextureManagerBind0UseCase";
|
|
6
|
+
import { execute as shaderManagerDrawTextureUseCase } from "../../Shader/ShaderManager/usecase/ShaderManagerDrawTextureUseCase";
|
|
7
|
+
import { execute as textureManagerReleaseTextureObjectUseCase } from "../../TextureManager/usecase/TextureManagerReleaseTextureObjectUseCase";
|
|
8
|
+
import { execute as blendOperationUseCase } from "../../Blend/usecase/BlendOperationUseCase";
|
|
9
|
+
import { $context } from "../../WebGLUtil";
|
|
10
|
+
import { $getAtlasAttachmentObject } from "../../AtlasManager";
|
|
11
|
+
/**
|
|
12
|
+
* @description コンテナ用のカラー変換(恒等変換)
|
|
13
|
+
* Identity color transform for container copy
|
|
14
|
+
*
|
|
15
|
+
* @type {Float32Array}
|
|
16
|
+
* @private
|
|
17
|
+
*/
|
|
18
|
+
const $identityColorTransform = new Float32Array([1, 1, 1, 1, 0, 0, 0, 0]);
|
|
19
|
+
/**
|
|
20
|
+
* @description コンテナのアトラスノードへの描画を終了し、
|
|
21
|
+
* temp FBOの内容をアトラスのノード領域にコピーします。
|
|
22
|
+
* End container atlas node rendering,
|
|
23
|
+
* copy temp FBO contents to atlas node region.
|
|
24
|
+
*
|
|
25
|
+
* @param {Node} node
|
|
26
|
+
* @return {void}
|
|
27
|
+
* @method
|
|
28
|
+
* @protected
|
|
29
|
+
*/
|
|
30
|
+
export const execute = (node) => {
|
|
31
|
+
// temp FBOへの描画をフラッシュ
|
|
32
|
+
$context.drawArraysInstanced();
|
|
33
|
+
const tempAttachment = $context.$mainAttachmentObject;
|
|
34
|
+
const textureObject = tempAttachment.texture;
|
|
35
|
+
// mainを復元($containerLayerStackから)
|
|
36
|
+
$context.$mainAttachmentObject = $containerLayerStack.pop();
|
|
37
|
+
// temp FBOを解放(テクスチャは保持してアトラスコピーに使用)
|
|
38
|
+
frameBufferManagerReleaseAttachmentObjectUseCase(tempAttachment, false);
|
|
39
|
+
if (textureObject) {
|
|
40
|
+
// アトラスにバインド
|
|
41
|
+
const atlas = $getAtlasAttachmentObject();
|
|
42
|
+
$context.bind(atlas);
|
|
43
|
+
// ノード領域を設定(scissor + clear + transfer bounds登録)
|
|
44
|
+
$context.beginNodeRendering(node);
|
|
45
|
+
// ブレンドモード設定(premultiplied alpha用: ONE, ONE_MINUS_SRC_ALPHA)
|
|
46
|
+
blendOperationUseCase("normal");
|
|
47
|
+
// テクスチャをノード位置に描画(Y軸反転: WebGLはbottom-left原点)
|
|
48
|
+
const offsetY = atlas.height - node.y - node.h;
|
|
49
|
+
$context.setTransform(1, 0, 0, 1, node.x, offsetY);
|
|
50
|
+
const shaderManager = variantsBlendMatrixTextureShaderService(false);
|
|
51
|
+
shaderManagerSetMatrixTextureWithColorTransformUniformService(shaderManager, $identityColorTransform, node.w, node.h);
|
|
52
|
+
textureManagerBind0UseCase(textureObject);
|
|
53
|
+
shaderManagerDrawTextureUseCase(shaderManager);
|
|
54
|
+
// ノード描画終了
|
|
55
|
+
$context.endNodeRendering();
|
|
56
|
+
// テクスチャを解放
|
|
57
|
+
textureManagerReleaseTextureObjectUseCase(textureObject);
|
|
58
|
+
}
|
|
59
|
+
// mainをバインド
|
|
60
|
+
$context.bind($context.$mainAttachmentObject);
|
|
61
|
+
};
|
package/src/Context.d.ts
CHANGED
|
@@ -22,6 +22,7 @@ export declare class Context {
|
|
|
22
22
|
joints: number;
|
|
23
23
|
miterLimit: number;
|
|
24
24
|
newDrawState: boolean;
|
|
25
|
+
private readonly _pendingAtlasNodes;
|
|
25
26
|
constructor(gl: WebGL2RenderingContext, samples: number, device_pixel_ratio?: number);
|
|
26
27
|
clearTransferBounds(): void;
|
|
27
28
|
updateBackgroundColor(red: number, green: number, blue: number, alpha: number): void;
|
|
@@ -71,6 +72,8 @@ export declare class Context {
|
|
|
71
72
|
applyFilter(node: Node, unique_key: string, updated: boolean, width: number, height: number, is_bitmap: boolean, matrix: Float32Array, color_transform: Float32Array, blend_mode: IBlendMode, bounds: Float32Array, params: Float32Array): void;
|
|
72
73
|
containerBeginLayer(width: number, height: number): void;
|
|
73
74
|
containerEndLayer(blend_mode: IBlendMode, matrix: Float32Array, color_transform: Float32Array | null, use_filter: boolean, filter_bounds: Float32Array | null, filter_params: Float32Array | null, unique_key: string, filter_key: string): void;
|
|
75
|
+
containerBeginAtlasNode(width: number, height: number): Node;
|
|
76
|
+
containerEndAtlasNode(): void;
|
|
74
77
|
containerDrawCachedFilter(blend_mode: IBlendMode, matrix: Float32Array, color_transform: Float32Array, filter_bounds: Float32Array, unique_key: string, filter_key: string): void;
|
|
75
78
|
createImageBitmap(width: number, height: number): Promise<ImageBitmap>;
|
|
76
79
|
}
|
package/src/Context.js
CHANGED
|
@@ -43,6 +43,7 @@ import { execute as contextStrokeUseCase } from "./Context/usecase/ContextStroke
|
|
|
43
43
|
import { execute as contextApplyFilterUseCase } from "./Context/usecase/ContextApplyFilterUseCase";
|
|
44
44
|
import { execute as contextContainerBeginLayerUseCase } from "./Context/usecase/ContextContainerBeginLayerUseCase";
|
|
45
45
|
import { execute as contextContainerEndLayerUseCase } from "./Context/usecase/ContextContainerEndLayerUseCase";
|
|
46
|
+
import { execute as contextContainerEndAtlasNodeUseCase } from "./Context/usecase/ContextContainerEndAtlasNodeUseCase";
|
|
46
47
|
import { execute as contextContainerDrawCachedFilterUseCase } from "./Context/usecase/ContextContainerDrawCachedFilterUseCase";
|
|
47
48
|
import { execute as contextUpdateTransferBoundsService } from "./Context/service/ContextUpdateTransferBoundsService";
|
|
48
49
|
import { execute as contextDrawFillUseCase } from "./Context/usecase/ContextDrawFillUseCase";
|
|
@@ -167,6 +168,12 @@ export class Context {
|
|
|
167
168
|
writable: true,
|
|
168
169
|
value: false
|
|
169
170
|
});
|
|
171
|
+
Object.defineProperty(this, "_pendingAtlasNodes", {
|
|
172
|
+
enumerable: true,
|
|
173
|
+
configurable: true,
|
|
174
|
+
writable: true,
|
|
175
|
+
value: []
|
|
176
|
+
});
|
|
170
177
|
$setWebGL2RenderingContext(gl);
|
|
171
178
|
$setRenderMaxSize(gl.getParameter(gl.MAX_TEXTURE_SIZE));
|
|
172
179
|
$setSamples(samples);
|
|
@@ -379,6 +386,19 @@ export class Context {
|
|
|
379
386
|
containerEndLayer(blend_mode, matrix, color_transform, use_filter, filter_bounds, filter_params, unique_key, filter_key) {
|
|
380
387
|
contextContainerEndLayerUseCase(blend_mode, matrix, color_transform, use_filter, filter_bounds, filter_params, unique_key, filter_key);
|
|
381
388
|
}
|
|
389
|
+
containerBeginAtlasNode(width, height) {
|
|
390
|
+
this.drawArraysInstanced();
|
|
391
|
+
// アトラスノードを確保(後でコピー先として使用)
|
|
392
|
+
const node = atlasManagerCreateNodeService(width, height);
|
|
393
|
+
this._pendingAtlasNodes.push(node);
|
|
394
|
+
// temp FBOを作成して子要素の描画先として設定
|
|
395
|
+
contextContainerBeginLayerUseCase(width, height);
|
|
396
|
+
return node;
|
|
397
|
+
}
|
|
398
|
+
containerEndAtlasNode() {
|
|
399
|
+
const node = this._pendingAtlasNodes.pop();
|
|
400
|
+
contextContainerEndAtlasNodeUseCase(node);
|
|
401
|
+
}
|
|
382
402
|
containerDrawCachedFilter(blend_mode, matrix, color_transform, filter_bounds, unique_key, filter_key) {
|
|
383
403
|
contextContainerDrawCachedFilterUseCase(blend_mode, matrix, color_transform, filter_bounds, unique_key, filter_key);
|
|
384
404
|
}
|