"아티스트의 캔버스를 둘째 윈도우에 보여주려면, 픽셀을 읽어야 해 — flatten, merge, 또는 아직 작업 중인 document 를 건드리지 않고."
속기 쉽게 단순한 작업
Cinder 는 포토샵 캔버스에 뭐가 있는지 라이브 그림이 필요해. 사소하게 들려 — 그냥 이미지 가져와. 근데 document 가 아티스트의 활성 작업이야, 레이어로 가득하고, 편집 중이고. 레이어를 flatten 하거나 merge 하는 순진한 '이미지 가져오기' 는 아티스트가 그리는 바로 그걸 변형해. 진짜 작업은: document 를 전혀 안 바꾸고 캔버스의 composite 스냅샷을 읽는 거야.
옳은 도구: 읽기 전용 imaging 경로
플러그인 플랫폼이 document 의 composite 픽셀 — 모든 보이는 레이어가 한 이미지로 merge 된 — 을 document 변형 없이 읽기로 반환하는 imaging API 를 제공해. document 는 모든 레이어를 지키고; 넌 그것들의 flatten 된 view 만 받아. 이게 '이거 지금 어떻게 보여?'(읽기)랑 'document 를 flatten 해'(파괴적 변형)의 차이야. 같은 시각 결과, 아티스트 파일엔 완전히 다른 결과.
일부러 더 작은 이미지를 요청해
capture 가 target 크기를 요청해 — full 해상도 캔버스가 아니라 downscaled preview. 그냥 대역폭 절약이 아니야. 더 작은 target 요청은 플랫폼이 내부 image pyramid 에서 미리-downscaled 된 레벨을 서빙하게 해, 매번 full 이미지를 읽고 줄이는 것보다 극적으로 빨라. 아티스트가 작업하면서 업데이트되는 라이브 preview 엔, 빠르고-작음이 완벽하고-느림을 이겨. 작업에 옳은 크기는 목적을 서빙하는 가장 작은 크기야.
필수 cleanup
날카로운 가장자리가 있어: capture 된 image data 가 호스트 앱 메모리를 들고, 각 capture 후 명시적으로 해제돼야 해. 해제를 건너뛰면, 반복 capture 하는 라이브 preview 에서, 플러그인이 호스트가 플러그인이 한계 넘었다고 경고할 때까지 꾸준히 메모리를 누수해. capture 는 바이트를 가졌을 때 끝난 게 아니야 — 메모리도 도로 건넸을 때 끝나. 모든 capture 가 acquire-use-release 고, release 는 선택이 아니야.