2014-06-17 7 views
0

문자열 및 문자열 형식의 모든 문자 (색상 및 글꼴)가 포함 된 배열이 있습니다. 이제 XFT 라이브러리를 사용하여 각 색상 및 글꼴 (XftDrawStringUtf8 함수)을 사용하여 char-by-char 문자열을 그립니다. 그러나이 방법은 느립니다.XFT 라이브러리로 색상이 지정된 문자열을 빨리 그릴 수있는 방법은 무엇입니까?

문자열을 스캔하고 한 번에 같은 형식으로 청크를 그려야합니다. 그러나 어떤 상황 (모든 문자의 형식이 다른 경우)에서 이러한 접근 방식은 char-by-char 방식보다 느려질 수 있습니다.

또한 문자를 char로 그리는 방법은 인쇄상의 관점에서 좋은 방법이 아닙니다. 커닝에 관한 것.

XFT 라이브러리를 사용하면 더 빠르고 더 좋은 방법이 있습니까? 또는 다른 라이브러리를 사용합니까?

답변

2

Render 확장 프로그램을 CreateGlyphSet/CompositeGlyphs 요청과 함께 사용할 수 있습니다.

GlyphSet은 오프셋이있는 사각 픽스맵의 배열입니다. CompositeGlyphs 요청을 사용하면 하나의 요청 (하나의 네트워크 패킷을 한 방향으로)으로 렌더링 할 수 있습니다. "igid 배열", "ids 배열"의 마지막 char 끝에서 오프셋 된 "글리프 요소" 또는 사용할 다른 글리프 세트의 ID입니다. 커닝이 0이 아닌 지점에서 입력 문자열을 하위 문자열로 분리하여 커닝 쌍을 조정할 수 있습니다. 색상은 좀 더 까다 롭습니다. 한 가지 방법은 렌더링 된 텍스트를 마스크로 사용하는 소스 그림 (RenderCompositeGlyphs)을 사용하여 원하는 색상의 사각형으로 사전 색상을 지정하는 것입니다. 당신은 내가 당신의 당김

일부 높은 수준의 라이브러리 (Pango가/카이로) 및 전송 결과 그림과 클라이언트 측 픽셀 맵에있는 모든 렌더링하는 것이 좋습니다 것 (아랍어처럼) 복잡한 스크립트를 지원해야 특히 실제로

,

Render 확장 외에도 다른 접근법은 vertex 및 fragment 쉐이더가있는 GPU를 사용하여 모든 것을 렌더링하려고 시도하는 것입니다 (Behdad Esfahbod 페이지의 일반 텍스트 렌더링에 대한 정보는 glyphy 페이지를 참조하십시오)

+0

xrender 라이브러리를 사용하거나 XServer와 직접 통신하는 것을 의미합니까? – johnfound

+0

XRender 확장 - 원하는 클라이언트 (xrender, xcb-render, python-xib-render, node-x11 등) –