GNU Emacs Canvas 입문: 픽셀 버퍼를 직접 다루는 새 이미지 기능

3 weeks ago 30

약 8개월간 개발한 Canvas 기능이 GNU Emacs 코어에 병합돼, Emacs 32부터 이미지 데이터를 문자열로 전달하지 않고 픽셀 버퍼를 직접 조작할 수 있음 Canvas는 기존 이미지 API와 호환되는 새 이미지 유형으로, Emacs Lisp에서는 이미지 객체로 사용하고 동적 모듈에서는 ARGB32 픽셀 버퍼에 저수준으로 접근함 canvas-refresh는 전체 redisplay 대신 Canvas가 차지하는 글리프만 갱신하며, 데모에서는 나머지 Emacs 세션을 지연시키지 않고 25·30·60FPS 애니메이션과 영상을 처리함 Emacs Lisp만으로 튀는 공과 이중 진자를 구현하고, C 동적 모듈과 track-mouse를 결합해 마우스로 회전할 수 있는 3D 점 격자를 초당 60회 렌더링함 문서 리더, 비디오 플레이어, 그리기 도구, 게임 프레임워크, 과학 시각화, LaTeX 렌더링, 이미지·비디오 편집기 등 그래픽 애플리케이션을 Emacs 안에서 구축할 기반이 마련됨 Emacs 코어에 들어온 Canvas Canvas 패치가 약 8개월의 작업 끝에 GNU Emacs 업스트림에 병합됐으며 Emacs 32 릴리스 주기에 포함될 예정임 Emacs Reader를 개발하면서 이미지 데이터를 문자열에 넣어 Emacs에 부담을 주지 않고, 이미지를 지속해서 갱신·조작할 방법이 필요했음 동적 모듈 API를 통해 Emacs 내부의 픽셀 버퍼를 노출하며, Emacs Lisp 이미지 API와 저수준 버퍼 접근을 함께 제공함 HTML5 Canvas·SVG와의 차이 Emacs Canvas는 HTML5 Canvas와 구현상 관련이 없음 둘 다 표면에 자유롭게 그린다는 상위 개념만 공유함 HTML5 Canvas에는 다양한 그리기 함수가 있지만, Emacs Canvas는 기존 이미지 API에 통합되고 동적 모듈에 기본 픽셀 버퍼를 노출함 버퍼에 표시되는 방식은 SVG를 포함한 다른 Emacs 이미지와 같지만 세 가지 차이가 있음 :data는 압축 이미지 형식이 아니라 문자열이나 벡터로 표현한 ARGB32 픽셀 데이터임 Emacs Lisp 이미지 객체에 저수준으로 접근해 직접 조작할 수 있음 전체 재표시를 호출하지 않고 이미지를 갱신할 수 있음 Canvas 자체는 GPU 가속 기능이 아니며, 변경되는 픽셀 버퍼를 Emacs가 표시하는 구조임 픽셀 계산이나 텍스처 연산은 Emacs 외부에서 하드웨어 가속한 뒤 결과를 Canvas 버퍼...

Read Entire Article