Skip to content

Commit

Permalink
fix: fix parsedTransformToMat4 optimizer
Browse files Browse the repository at this point in the history
  • Loading branch information
Aarebecca committed Oct 22, 2024
1 parent 64e5f91 commit 96b7341
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 11 deletions.
22 changes: 19 additions & 3 deletions packages/g-lite/src/services/interfaces.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ export interface SceneGraphService {
) => void;
informDependentDisplayObjects: (object: DisplayObject) => void;
dirtifyToRoot: (element: INode, affectChildren?: boolean) => void;
dirtifyLocal: (element: INode, transform: Transform) => void;
matches: <T extends IElement>(query: string, root: T) => boolean;
querySelector: <R extends IElement, T extends IElement>(
query: string,
Expand All @@ -38,9 +39,17 @@ export interface SceneGraphService {
z?: number,
) => void;
setPosition: (element: INode, position: vec3 | vec2) => void;
setLocalPosition: (element: INode, position: vec3 | vec2) => void;
setLocalPosition: (
element: INode,
position: vec3 | vec2,
dirtify?: boolean,
) => void;
scaleLocal: (element: INode, scaling: vec3 | vec2) => void;
setLocalScale: (element: INode, scaling: vec3 | vec2) => void;
setLocalScale: (
element: INode,
scaling: vec3 | vec2,
dirtify?: boolean,
) => void;
getLocalScale: (element: INode) => vec3;
getScale: (element: INode) => vec3;
getLocalSkew: (element: INode) => vec2;
Expand All @@ -58,7 +67,12 @@ export interface SceneGraphService {
) => void;
getPosition: (element: INode) => vec3;
getLocalPosition: (element: INode) => vec3;
setLocalSkew: (element: INode, skew: vec2 | number, y?: number) => void;
setLocalSkew: (
element: INode,
skew: vec2 | number,
y?: number,
dirtify?: boolean,
) => void;
setEulerAngles: (
element: INode,
degrees: vec3 | number,
Expand All @@ -70,6 +84,7 @@ export interface SceneGraphService {
degrees: vec3 | number,
y?: number,
z?: number,
dirtify?: boolean,
) => void;
rotateLocal: (
element: INode,
Expand Down Expand Up @@ -97,6 +112,7 @@ export interface SceneGraphService {
y?: number,
z?: number,
w?: number,
dirtify?: boolean,
) => void;
getLocalRotation: (element: INode) => quat;
getWorldTransform: (element: INode, transform?: Transform) => mat4;
Expand Down
27 changes: 20 additions & 7 deletions packages/g-lite/src/utils/transform-mat4.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
import { mat4 } from 'gl-matrix';
import { mat4, vec3 } from 'gl-matrix';
import type { CSSUnitValue } from '../css/cssom';
import { ParsedTransform, convertAngleUnit } from '../css/parser';
import type { DisplayObject } from '../display-objects/DisplayObject';
import { deg2rad } from './math';
import type { CSSUnitValue } from '../css/cssom';
import { runtime } from '../global-runtime';
import type { TransformType } from '../types';
import { deg2rad } from './math';

function createSkewMatrix(skewMatrix: mat4, skewX: number, skewY: number) {
// Create an identity matrix
Expand Down Expand Up @@ -93,14 +94,26 @@ const parser: Record<TransformType, (d: CSSUnitValue[]) => void> = {
},
};

const $vec3One = vec3.fromValues(1, 1, 1);
const $vec3Zero = vec3.create();
const optimizer: {
[key in TransformType]?: (object: DisplayObject, d: CSSUnitValue[]) => void;
} = {
translate: (object: DisplayObject, d: CSSUnitValue[]) => {
object.setLocalPosition([d[0].value, d[1].value]);
},
translate3d: (object: DisplayObject, d: CSSUnitValue[]) => {
object.setLocalPosition([d[0].value, d[1].value, d[2].value]);
runtime.sceneGraphService.setLocalScale(object, $vec3One, false);
runtime.sceneGraphService.setLocalEulerAngles(
object,
$vec3Zero,
undefined,
undefined,
false,
);
runtime.sceneGraphService.setLocalPosition(
object,
[d[0].value, d[1].value, 0],
false,
);
runtime.sceneGraphService.dirtifyLocal(object, object.transformable);
},
};

Expand Down
1 change: 0 additions & 1 deletion packages/g-plugin-svg-renderer/src/SVGRendererPlugin.ts
Original file line number Diff line number Diff line change
Expand Up @@ -363,7 +363,6 @@ export class SVGRendererPlugin implements RenderingPlugin {
this.applyTransform(this.$camera, this.context.camera.getOrthoMatrix());
}

// debugger;
this.renderQueue.forEach((object) => {
const $el = ((object as any).elementSVG as ElementSVG)?.$el;
const $groupEl = ((object as any).elementSVG as ElementSVG)?.$groupEl;
Expand Down

0 comments on commit 96b7341

Please sign in to comment.