@@ -210,6 +210,11 @@ function createRenderer(canvas: HTMLCanvasElement, width: number, height: number
210
210
} ) ;
211
211
}
212
212
213
+ function getDevicePixelRatio ( precision = 3 ) {
214
+ const factor = Math . pow ( 10 , precision ) ;
215
+ return Math . round ( window . devicePixelRatio * factor ) / factor ;
216
+ }
217
+
213
218
export type EffectLayerProps = PropsWithChildren < {
214
219
className ?: string ;
215
220
} > ;
@@ -228,7 +233,7 @@ export function EffectLayer({ children, className }: EffectLayerProps) {
228
233
const canvas = rCanvas . current ;
229
234
const rect = root . getBoundingClientRect ( ) ;
230
235
const uniforms = createUniforms ( rect . width , rect . height ) ;
231
- const renderer = createRenderer ( canvas , rect . width , rect . height , window . devicePixelRatio ) ;
236
+ const renderer = createRenderer ( canvas , rect . width , rect . height , getDevicePixelRatio ( ) ) ;
232
237
233
238
const { gl } = renderer ;
234
239
const geometry = new Triangle ( gl ) ;
@@ -243,7 +248,7 @@ export function EffectLayer({ children, className }: EffectLayerProps) {
243
248
function update ( time : number ) {
244
249
if ( ! isActive . current ) return ;
245
250
uniforms . uTime . value = time * 0.001 ;
246
- renderer . dpr = window . devicePixelRatio ;
251
+ renderer . dpr = getDevicePixelRatio ( ) ;
247
252
renderer . render ( { scene : mesh } ) ;
248
253
rRaf . current = requestAnimationFrame ( update ) ;
249
254
}
0 commit comments