From 2091af1ac9bd7a12a396895215ba536ef3a2ea46 Mon Sep 17 00:00:00 2001 From: ienaga Date: Tue, 1 Oct 2024 00:32:16 +0900 Subject: [PATCH] =?UTF-8?q?#154=20Stroke=E3=81=AE9slice=E3=82=92v2?= =?UTF-8?q?=E3=81=AB=E5=AE=9F=E8=A3=85(WIP)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...derManagerSetBitmapStrokeUniformService.ts | 62 +++++++++++++++-- ...rManagerSetGradientStrokeUniformService.ts | 61 ++++++++++++++-- .../ShaderManagerSetStrokeUniformService.ts | 69 ++++++++++++++++--- 3 files changed, 173 insertions(+), 19 deletions(-) diff --git a/packages/webgl/src/shader/ShaderManager/service/ShaderManagerSetBitmapStrokeUniformService.ts b/packages/webgl/src/shader/ShaderManager/service/ShaderManagerSetBitmapStrokeUniformService.ts index 3202674..7795bd1 100644 --- a/packages/webgl/src/shader/ShaderManager/service/ShaderManagerSetBitmapStrokeUniformService.ts +++ b/packages/webgl/src/shader/ShaderManager/service/ShaderManagerSetBitmapStrokeUniformService.ts @@ -1,5 +1,8 @@ import type { ShaderManager } from "../../ShaderManager"; -import { $gridEnabled } from "../../../Grid"; +import { + $gridEnabled, + $gridData +} from "../../../Grid"; import { $context, $inverseMatrix, @@ -23,6 +26,7 @@ export const execute = ( width: number, height: number ): void => { + const highp = shader_manager.highp; // vertex: u_matrix @@ -60,7 +64,56 @@ export const execute = ( let index = 20; const isGridEnabled = $gridEnabled(); if (isGridEnabled) { - index += 52; + + // vertex: u_parent_matrix + highp[20] = $gridData[0]; + highp[21] = $gridData[1]; + highp[22] = 0; + + highp[24] = $gridData[2]; + highp[25] = $gridData[3]; + highp[26] = 0; + + highp[28] = $gridData[4]; + highp[29] = $gridData[5]; + highp[30] = 1; + + // vertex: u_ancestor_matrix + highp[32] = $gridData[6]; + highp[33] = $gridData[7]; + highp[34] = 0; + + highp[36] = $gridData[8]; + highp[37] = $gridData[9]; + highp[38] = 0; + + highp[40] = $gridData[10]; + highp[41] = $gridData[11]; + highp[42] = 1; + + // vertex: u_parent_viewport + highp[31] = $gridData[12]; + highp[35] = $gridData[13]; + highp[39] = $gridData[14]; + highp[43] = $gridData[15]; + + // vertex: u_grid_min + highp[44] = $gridData[16]; + highp[45] = $gridData[17]; + highp[46] = $gridData[18]; + highp[47] = $gridData[19]; + + // vertex: u_grid_max + highp[48] = $gridData[20]; + highp[49] = $gridData[21]; + highp[50] = $gridData[22]; + highp[51] = $gridData[23]; + + // vertex: u_offset + highp[52] = $gridData[24]; + highp[53] = $gridData[25]; + + index += 56; } let face: number = Math.sign(matrix[0] * matrix[4]); if (face > 0 && matrix[1] !== 0 && matrix[3] !== 0) { @@ -71,9 +124,8 @@ export const execute = ( let scaleX: number; let scaleY: number; if (isGridEnabled) { - // todo - scaleX = 1; - scaleY = 1; + scaleX = Math.abs($gridData[6] + $gridData[8]); + scaleY = Math.abs($gridData[7] + $gridData[9]); } else { scaleX = Math.abs(matrix[0] + matrix[3]); scaleY = Math.abs(matrix[1] + matrix[4]); diff --git a/packages/webgl/src/shader/ShaderManager/service/ShaderManagerSetGradientStrokeUniformService.ts b/packages/webgl/src/shader/ShaderManager/service/ShaderManagerSetGradientStrokeUniformService.ts index 96eb210..1ed793f 100644 --- a/packages/webgl/src/shader/ShaderManager/service/ShaderManagerSetGradientStrokeUniformService.ts +++ b/packages/webgl/src/shader/ShaderManager/service/ShaderManagerSetGradientStrokeUniformService.ts @@ -1,5 +1,8 @@ import type { ShaderManager } from "../../ShaderManager"; -import { $gridEnabled } from "../../../Grid"; +import { + $gridEnabled, + $gridData +} from "../../../Grid"; import { $getViewportWidth, $getViewportHeight, @@ -60,7 +63,56 @@ export const execute = ( let index = 20; const isGridEnabled = $gridEnabled(); if (isGridEnabled) { - index += 52; + + // vertex: u_parent_matrix + highp[20] = $gridData[0]; + highp[21] = $gridData[1]; + highp[22] = 0; + + highp[24] = $gridData[2]; + highp[25] = $gridData[3]; + highp[26] = 0; + + highp[28] = $gridData[4]; + highp[29] = $gridData[5]; + highp[30] = 1; + + // vertex: u_ancestor_matrix + highp[32] = $gridData[6]; + highp[33] = $gridData[7]; + highp[34] = 0; + + highp[36] = $gridData[8]; + highp[37] = $gridData[9]; + highp[38] = 0; + + highp[40] = $gridData[10]; + highp[41] = $gridData[11]; + highp[42] = 1; + + // vertex: u_parent_viewport + highp[31] = $gridData[12]; + highp[35] = $gridData[13]; + highp[39] = $gridData[14]; + highp[43] = $gridData[15]; + + // vertex: u_grid_min + highp[44] = $gridData[16]; + highp[45] = $gridData[17]; + highp[46] = $gridData[18]; + highp[47] = $gridData[19]; + + // vertex: u_grid_max + highp[48] = $gridData[20]; + highp[49] = $gridData[21]; + highp[50] = $gridData[22]; + highp[51] = $gridData[23]; + + // vertex: u_offset + highp[52] = $gridData[24]; + highp[53] = $gridData[25]; + + index += 56; } let face: number = Math.sign(matrix[0] * matrix[4]); @@ -72,9 +124,8 @@ export const execute = ( let scaleX: number; let scaleY: number; if (isGridEnabled) { - // todo - scaleX = 1; - scaleY = 1; + scaleX = Math.abs($gridData[6] + $gridData[8]); + scaleY = Math.abs($gridData[7] + $gridData[9]); } else { scaleX = Math.abs(matrix[0] + matrix[3]); scaleY = Math.abs(matrix[1] + matrix[4]); diff --git a/packages/webgl/src/shader/ShaderManager/service/ShaderManagerSetStrokeUniformService.ts b/packages/webgl/src/shader/ShaderManager/service/ShaderManagerSetStrokeUniformService.ts index 68a98f1..902723c 100644 --- a/packages/webgl/src/shader/ShaderManager/service/ShaderManagerSetStrokeUniformService.ts +++ b/packages/webgl/src/shader/ShaderManager/service/ShaderManagerSetStrokeUniformService.ts @@ -1,5 +1,8 @@ import type { ShaderManager } from "../../ShaderManager"; -import { $gridEnabled } from "../../../Grid"; +import { + $gridEnabled, + $gridData +} from "../../../Grid"; import { $context, $getViewportWidth, @@ -20,6 +23,10 @@ export const execute = (shader_manager: ShaderManager): void => const highp = shader_manager.highp; const matrix = $context.$matrix; + // vertex: u_viewport + highp[3] = $getViewportWidth(); + highp[7] = $getViewportHeight(); + let index = 0; const isGridEnabled = $gridEnabled(); if (!isGridEnabled) { @@ -36,13 +43,58 @@ export const execute = (shader_manager: ShaderManager): void => highp[9] = matrix[7]; highp[10] = matrix[8]; - // vertex: u_viewport - highp[3] = $getViewportWidth(); - highp[7] = $getViewportHeight(); - index = 12; } else { - index = 32; + + // vertex: u_parent_matrix + highp[0] = $gridData[0]; + highp[1] = $gridData[1]; + highp[2] = 0; + + highp[4] = $gridData[2]; + highp[5] = $gridData[3]; + highp[6] = 0; + + highp[8] = $gridData[4]; + highp[9] = $gridData[5]; + highp[10] = 1; + + // vertex: u_ancestor_matrix + highp[12] = $gridData[6]; + highp[13] = $gridData[7]; + highp[14] = 0; + + highp[16] = $gridData[8]; + highp[17] = $gridData[9]; + highp[18] = 0; + + highp[20] = $gridData[10]; + highp[21] = $gridData[11]; + highp[22] = 1; + + // vertex: u_parent_viewport + highp[11] = $gridData[12]; + highp[15] = $gridData[13]; + highp[19] = $gridData[14]; + highp[23] = $gridData[15]; + + // vertex: u_grid_min + highp[24] = $gridData[16]; + highp[25] = $gridData[17]; + highp[26] = $gridData[18]; + highp[27] = $gridData[19]; + + // vertex: u_grid_max + highp[28] = $gridData[20]; + highp[29] = $gridData[21]; + highp[30] = $gridData[22]; + highp[31] = $gridData[23]; + + // vertex: u_offset + highp[32] = $gridData[24]; + highp[33] = $gridData[25]; + + index = 36; } let face: number = Math.sign(matrix[0] * matrix[4]); @@ -54,9 +106,8 @@ export const execute = (shader_manager: ShaderManager): void => let scaleX: number; let scaleY: number; if (isGridEnabled) { - // todo - scaleX = 1; - scaleY = 1; + scaleX = Math.abs($gridData[6] + $gridData[8]); + scaleY = Math.abs($gridData[7] + $gridData[9]); } else { scaleX = Math.abs(matrix[0] + matrix[3]); scaleY = Math.abs(matrix[1] + matrix[4]);