Pixi.js: iOS의 Pixi JS λ Œλ”λŸ¬ λ“œλ‘œμž‰ 버퍼 문제

에 λ§Œλ“  2017λ…„ 06μ›” 16일  Β·  10μ½”λ©˜νŠΈ  Β·  좜처: pixijs/pixi.js

μ•ˆλ…•!
λ°μŠ€ν¬ν†±μ—μ„œ 잘 μ‹€ν–‰λ˜λŠ” Pixie μ½”λ“œλŠ” λͺ¨λ°”μΌμ—μ„œ μ΄μƒν•˜κ²Œ μž‘λ™ν•˜λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.
λ‚˜λŠ” pixie.js에 λŒ€ν•œ λ©μ²­ν•œ μ‚¬λžŒμ΄λ―€λ‘œ μ—¬κΈ°μ—μ„œ λ­”κ°€ 잘λͺ»ν•˜κ³ μžˆμ„ κ°€λŠ₯성이 맀우 λ†’μŠ΅λ‹ˆλ‹€.

λͺ¨λ°”μΌμ—μ„œ 그리기 μ½”λ“œλ₯Ό μ‚¬μš©ν•˜λ©΄ μΊ”λ²„μŠ€κ°€ μ΄μƒν•˜κ²Œ μƒˆλ‘œ κ³ μΉ¨λ˜λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.
전체 슀트둜크λ₯Ό λ‹€μ‹œ κ·Έλ¦¬λŠ” 것이 μ•„λ‹ˆλΌ DrawingBufferλ₯Ό μœ μ§€ν•˜κ³  μƒˆ μŠ€ν”„λΌμ΄νŠΈλ₯Ό μΆ”κ°€ν•©λ‹ˆλ‹€.

'legacy :'λ₯Ό false λ˜λŠ” true (μ•„λž˜ μ°Έμ‘°)둜 μ„€μ •ν•˜λ”λΌλ„ λ™μΌν•œ κ²°κ³Όλ₯Ό 얻을 수 μžˆμŠ΅λ‹ˆλ‹€.

봐 μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€!

pixierenderer

initializePixieCanvas() {
    console.log("init canvas")
    const cArea = this.canvasContainer;
    const width  = 1000;
    const height = 1000;
    this.stage = new PIXI.Container();
    this.renderer = new PIXI.WebGLRenderer(
      width,
      height,
      {
          antialias: false,
          transparent: true,
          resolution: 2,
          clearBeforeRender: false,
          preserveDrawingBuffer: true,
          premultipliedAlpha: false,
          forceFXAA: true,
          legacy: true
      }
    );

    cArea.appendChild(this.renderer.view);

    this.renderer.view.style.position = "absolute";
    this.renderer.view.style.top = "0";
    this.renderer.view.style.left = "0";
    this.renderer.view.style.pointerEvents = "none";
    this.renderer.view.style.zIndex = "99";

    const cnvs = this.renderer.view;
    const scaleForHighResDisplay = true;
    if (scaleForHighResDisplay) {
        cnvs.width = width * 2;
        cnvs.height = height * 2;
        cnvs.style.width = width + 'px';
        cnvs.style.height = height + 'px';
    }

    this.pointer = new PIXI.Sprite(PIXI.Texture.fromCanvas(this.brushElement));
    this.pointer.texture.destroy();
    this.pointer.texture = PIXI.Texture.fromCanvas(this.brushElement);
    this.pointer.anchor.x = 0.5;
    this.pointer.anchor.y = 0.5;

    this.renderer.clear();

    this.stage.addChild(this.pointer);
}
Stale πŸ’Ύ v4.x (Legacy) πŸ€” Question

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

쒋은 μ†Œμ‹μ€ μ•ˆν‹° 앨리어싱을 켜면이 μ•„ν‹°νŒ©νŠΈκ°€ μˆ˜μ •λœλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ λΆ„λͺ…νžˆ μ•ˆν‹° 앨리어싱을 μΌœλŠ” 것은 μ—¬μ „νžˆ ​​성λŠ₯에 큰 νƒ€κ²©μ„μ€λ‹ˆλ‹€. 이 버그λ₯Ό 우회 / μˆ˜μ •ν•˜λŠ” 데 도움을 μ£Όμ‹œλ©΄ λŒ€λ‹¨νžˆ κ°μ‚¬ν•˜κ² μŠ΅λ‹ˆλ‹€. κ³ λ§ˆμ›Œ!

λͺ¨λ“  10 λŒ“κΈ€

이 κ³ κΈ‰ κΈ°λŠ₯에 λŒ€ν•œ λ„€μ΄ν‹°λΈŒ 앱을 μž‘μ„±ν•΄μ•Όν•©λ‹ˆλ‹€.

μ›Ή 앱은 λ†€λžλ„λ‘ λΉ λ₯΄λ©° λ„ˆλ¬΄ κ°€κΉŒμ›Œ λ³΄μž…λ‹ˆλ‹€. λ¬Όλ‘  λ“œλ‘œμž‰ 버퍼가 였래된 데이터λ₯Ό μ—­λ₯˜μ‹œν‚€λŠ” 것을 μ’‹μ•„ν•œλ‹€λŠ” 점을 μ œμ™Έν•˜λ©΄ ...

쒋은 μ†Œμ‹μ€ μ•ˆν‹° 앨리어싱을 켜면이 μ•„ν‹°νŒ©νŠΈκ°€ μˆ˜μ •λœλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ λΆ„λͺ…νžˆ μ•ˆν‹° 앨리어싱을 μΌœλŠ” 것은 μ—¬μ „νžˆ ​​성λŠ₯에 큰 νƒ€κ²©μ„μ€λ‹ˆλ‹€. 이 버그λ₯Ό 우회 / μˆ˜μ •ν•˜λŠ” 데 도움을 μ£Όμ‹œλ©΄ λŒ€λ‹¨νžˆ κ°μ‚¬ν•˜κ² μŠ΅λ‹ˆλ‹€. κ³ λ§ˆμ›Œ!

μ•ˆλ…•ν•˜μ„Έμš”! 이것은 정밀도 문제인 것 κ°™μŠ΅λ‹ˆλ‹€. μ‰μ΄λ”μ˜ 정밀도λ₯Ό highP둜 μ„€μ •ν•΄ λ³΄μ…¨μŠ΅λ‹ˆκΉŒ?

μ•ˆν‹° 앨리어싱이 ν™œμ„±ν™” 된 μƒνƒœμ—μ„œ μž‘λ™ν•˜λŠ”μ§€ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

@GoodBoyDigital : μ•„μ‰½κ²Œλ„ νš¨κ³Όκ°€ μ—†μ—ˆλ˜ "highP"μ„€μ • μ‹œλ„

μ•ˆν‹° μ•¨λ¦¬μ–΄μ‹±μ˜ μ„±λŠ₯ μ €ν•˜μ—†μ΄μ΄ 문제λ₯Ό μ–΄λ–»κ²Œ ν•΄κ²°ν•  수 μžˆλŠ”μ§€ λ‹€λ₯Έ 생각이 μžˆμœΌμ‹­λ‹ˆκΉŒ?

λΏ‘λΏ‘

배경이 ν•„μš”ν•˜μ§€ μ•ŠμœΌλ©΄ 투λͺ…도λ₯Ό λ³€κ²½ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

{ transparent: 'notMultiplied'}

λ˜λŠ”

{ transparent: false}

μ•ˆνƒ€κΉκ²Œλ„ 투λͺ… 페인트 λ ˆμ΄μ–΄μ΄λ―€λ‘œ λ‘˜ λ‹€ ν•„μš”ν•©λ‹ˆλ‹€ ...
μ•ˆν‹° 앨리어싱이 ν™œμ„±ν™” 된 μƒνƒœμ—μ„œ 이런 일이 λ°œμƒν•˜μ§€ μ•ŠλŠ” 이유λ₯Ό 디버깅 ν•  수 μžˆλŠ”μ§€ ν™•μΈν•΄μ•Όν•©λ‹ˆλ‹€.

λͺ¨λ°”일 λΈŒλΌμš°μ €λ₯Ό 디버깅 ν•˜μ‹œκ² μŠ΅λ‹ˆκΉŒ?

이 λ¬Έμ œλŠ” 졜근 ν™œλ™μ΄ μ—†μ—ˆκΈ° λ•Œλ¬Έμ— μžλ™μœΌλ‘œ 였래된 κ²ƒμœΌλ‘œ ν‘œμ‹œλ˜μ—ˆμŠ΅λ‹ˆλ‹€. 더 이상 ν™œλ™μ΄ λ°œμƒν•˜μ§€ μ•ŠμœΌλ©΄ νμ‡„λ©λ‹ˆλ‹€. κ·€ν•˜μ˜ 기여에 κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€.

이 μŠ€λ ˆλ“œλŠ” λ‹«νžŒ ν›„ 졜근 ν™œλ™μ΄ μ—†μ—ˆκΈ° λ•Œλ¬Έμ— μžλ™μœΌλ‘œ μž κ²ΌμŠ΅λ‹ˆλ‹€. κ΄€λ ¨ 버그에 λŒ€ν•œ μƒˆ 문제λ₯Όμ—¬μ‹­μ‹œμ˜€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰