@@ -209,13 +209,20 @@ class EffectTransform {
209
209
210
210
const effects = drawable . enabledEffects ;
211
211
const uniforms = drawable . getUniforms ( ) ;
212
+ const skinUniforms = drawable . skin . getUniforms ( ) ;
213
+
214
+ // v_logicalCoord = (a_texCoord - u_logicalBounds.xy) / (u_logicalBounds.zw - u_logicalBounds.xy);
215
+ dst [ 0 ] = ( dst [ 0 ] - skinUniforms . u_logicalBounds [ 0 ] ) /
216
+ ( skinUniforms . u_logicalBounds [ 2 ] - skinUniforms . u_logicalBounds [ 0 ] ) ;
217
+ dst [ 1 ] = ( dst [ 1 ] - skinUniforms . u_logicalBounds [ 1 ] ) /
218
+ ( skinUniforms . u_logicalBounds [ 3 ] - skinUniforms . u_logicalBounds [ 1 ] ) ;
219
+
212
220
if ( ( effects & ShaderManager . EFFECT_INFO . mosaic . mask ) !== 0 ) {
213
221
// texcoord0 = fract(u_mosaic * texcoord0);
214
222
dst [ 0 ] = uniforms . u_mosaic * dst [ 0 ] % 1 ;
215
223
dst [ 1 ] = uniforms . u_mosaic * dst [ 1 ] % 1 ;
216
224
}
217
225
if ( ( effects & ShaderManager . EFFECT_INFO . pixelate . mask ) !== 0 ) {
218
- const skinUniforms = drawable . skin . getUniforms ( ) ;
219
226
// vec2 pixelTexelSize = u_skinSize / u_pixelate;
220
227
const texelX = skinUniforms . u_skinSize [ 0 ] * uniforms . u_pixelate ;
221
228
const texelY = skinUniforms . u_skinSize [ 1 ] * uniforms . u_pixelate ;
@@ -269,6 +276,13 @@ class EffectTransform {
269
276
dst [ 1 ] = CENTER_Y + ( r * unitY * CENTER_Y ) ;
270
277
}
271
278
279
+ // After doing all distortions in "logical texture space", convert back to actual texture space
280
+ // texcoord0 = (texcoord0 * (u_logicalBounds.zw - u_logicalBounds.xy)) + u_logicalBounds.xy;
281
+ dst [ 0 ] = ( dst [ 0 ] * ( skinUniforms . u_logicalBounds [ 2 ] - skinUniforms . u_logicalBounds [ 0 ] ) ) +
282
+ skinUniforms . u_logicalBounds [ 0 ] ;
283
+ dst [ 1 ] = ( dst [ 1 ] * ( skinUniforms . u_logicalBounds [ 3 ] - skinUniforms . u_logicalBounds [ 1 ] ) ) +
284
+ skinUniforms . u_logicalBounds [ 1 ] ;
285
+
272
286
return dst ;
273
287
}
274
288
}
0 commit comments