2014-11-26 1 views
1

원본 및 대상 캔버스가 모두 동일 할 때 drawImage 함수가 1000 배 이상 느리다는 사실을 발견했습니다. 왜 이런거야 ? 어떤 캔버스가 GPU로 가고 무엇이 GPU에 가지 않을까요? 이 주제에 대한 도움이 있으면 대단히 감사하겠습니다.소스 캔버스와 목적지 캔버스가 동일한 경우 HTML5 캔버스 drawImage 기능이 느려 집니까?

감사합니다. 당신은 소스 및 대상으로 캔버스를 사용하는 경우

+0

대부분의 캔버스 구현은 장면 뒤에서 weGL/Open GL을 사용합니다. 캔버스를 소스와 대상으로 사용하면 작업 전에 전체 화면을 복사해야합니다. 이는 다소 느린 작업입니다 ... 브라우저에서 심하게 처리합니다 (직사각형이 겹치지 않으면 복사 할 필요가 없습니다. 공연은 사본이 완료되었음을 보여줍니다). – GameAlchemist

답변

1

는 브라우저가 (이 포함 된 미세한 단계는하지만, 이러한 주요 것들) 할 필요합니다

  • 에 복사 할 수있는 스크래치 비트 맵 만들기
  • 현재 비트 맵을 스크래치 비트 맵으로 복사
  • 스크래치 비트 맵을 원본 비트 맵으로 다른 위치 (예 : drawImage (canvas, ...))로 복사합니다.

    • 복사 소스 비트 맵

    왜 그냥 "블리트"하지 대상 비트 맵 : 대신 별도의 캔버스를 사용할 때의

  • 제거 처음

이를? 이 방법의 official standard define이 경우 (내 강조) :

캔버스 또는 CanvasRenderingContext2D 객체가 자체에 그려되면, 드로잉 모델 이미지가 전에 복사 할 소스를 필요 따라서 캔버스 또는 스크래치 비트 맵 의 일부를 겹치는 부분에 복사 할 수 있습니다.

또한 관련된 단계에 대한 Drawing Model를보십시오.

관련 문제