Skip to content

Commit 1c12953

Browse files
committed
🛠 fix: screen position node
1 parent 3b8ea7d commit 1c12953

File tree

1 file changed

+20
-13
lines changed

1 file changed

+20
-13
lines changed

src/components/input/geometry/ScreenPositionRC.ts

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -49,11 +49,13 @@ export class ScreenPositionRC extends RC {
4949
.addControl(new SelectControl('mode', node, 'Mode', ModeOptions as any, false));
5050
}
5151

52-
static initScreenPositionContext(compiler: ShaderGraphCompiler, mode: ModeValue) {
52+
static initScreenPositionContext(
53+
compiler: ShaderGraphCompiler,
54+
mode: Exclude<ModeValue, 'tiled'>,
55+
) {
5356
const node = { name: ScreenPositionRC.Name, data: {} } as any;
5457
const vertVar = 'ScreenPosition' + capitalizeFirstLetter(mode);
5558

56-
// TODO 确认结果是否正确
5759
let code = '';
5860
if (mode === 'default') {
5961
const screenPositionVar = ScreenPositionRC.initScreenPositionContext(compiler, 'raw');
@@ -72,19 +74,13 @@ export class ScreenPositionRC extends RC {
7274
} else if (mode === 'center') {
7375
const screenPositionVar = ScreenPositionRC.initScreenPositionContext(compiler, 'raw');
7476
code = `let ${vertVar} = vec4f((${screenPositionVar}.xy / ${screenPositionVar}.w) * 2.0 - 1.0, 0., 0.);`;
75-
} else if (mode === 'tiled') {
76-
const screenPositionVar = ScreenPositionRC.initScreenPositionContext(compiler, 'raw');
77-
const screenWidth = ScreenRC.initScreenContext(compiler, 'width');
78-
const screenHeight = ScreenRC.initScreenContext(compiler, 'height');
79-
code = `let ${vertVar} = fract(vec4f(((${screenPositionVar}.x / ${screenPositionVar}.w) * 2. - 1.) * ${screenWidth} / ${screenHeight}, (${screenPositionVar}.y / ${screenPositionVar}.w) * 2.0 - 1.0, 0.0, 0.0));`;
8077
}
8178

8279
compiler.setContext('vertShared', node, mode, { varName: vertVar, code });
83-
8480
const varyingVar = compiler.setContext(
8581
'varyings',
8682
node,
87-
+'v_' + mode,
83+
'v' + mode,
8884
varName => `${varName}: vec4f`,
8985
);
9086
const defVar = compiler.setVarNameMap(node, mode, vertVar, varyingVar);
@@ -93,9 +89,20 @@ export class ScreenPositionRC extends RC {
9389
}
9490

9591
compileSG(compiler: ShaderGraphCompiler, node: SGNodeData<ReteScreenPositionNode>): SGNodeOutput {
96-
return {
97-
outputs: { out: ScreenPositionRC.initScreenPositionContext(compiler, node.data.modeValue) },
98-
code: '',
99-
};
92+
if (node.data.modeValue !== 'tiled') {
93+
return {
94+
outputs: { out: ScreenPositionRC.initScreenPositionContext(compiler, node.data.modeValue) },
95+
code: '',
96+
};
97+
} else {
98+
const outVar = compiler.getOutVarName(node, 'mode', 'screenPos' + node.data.modeValue);
99+
const screenPositionVar = ScreenPositionRC.initScreenPositionContext(compiler, 'raw');
100+
const screenWidth = ScreenRC.initScreenContext(compiler, 'width');
101+
const screenHeight = ScreenRC.initScreenContext(compiler, 'height');
102+
return {
103+
outputs: { out: outVar },
104+
code: `let ${outVar} = fract(vec4f(((${screenPositionVar}.x / ${screenPositionVar}.w) * 2. - 1.) * ${screenWidth} / ${screenHeight}, (${screenPositionVar}.y / ${screenPositionVar}.w) * 2.0 - 1.0, 0.0, 0.0));`,
105+
};
106+
}
100107
}
101108
}

0 commit comments

Comments
 (0)