Pluggable Page Render Backends
HotPDF는 로드된 페이지 bitmap 렌더링을 애플리케이션이 정의한 backend로 돌리면서, 기존 렌더러를 설정 불필요 기본값이자 선택적 폴백으로 유지합니다
내장 네이티브 backend
PDF.UseNativeGDIRenderBackend;
Bitmap := PDF.RenderLoadedPageToBitmap(0, 144);
THPDFNativeGDIRenderBackend는 외부 구현이 쓰는 같은 public backend 계약으로 정착된 Windows 네이티브 GDI 렌더러를 노출합니다
그 능력은 prbcDeviceAcceleration을 주장하지 않으면서 prbcNative, prbcDeterministic, prbcTransparency, prbcColourManagement, prbcThreadSafe를 선언합니다
SIMD scanline backend
var
Backend: IHPDFPageRenderBackend;
begin
Backend := THPDFSIMDScanlineRenderBackend.Create;
PDF.PageRenderBackend := Backend;
Bitmap := PDF.RenderLoadedPageToBitmap(0, 144);
end;
THPDFSIMDScanlineRenderBackend는 컴파일된 display list 전체를 사전 점검한 뒤 지원되는 DeviceRGB/DeviceGray 사각형 채움을 64바이트 배치와 16바이트 벡터 꼬리로 최종 32비트 bitmap 표면에 직접 기록합니다
복합 사각형 path는 하나의 칠하기 연산으로 nonzero 또는 even-odd 채움 rule을 따르며, 구멍, transform된 subpath 방향, 이미 칠해진 콘텐츠를 보존합니다. rasterization은 상한 배치 단위로 취소를 검사하고 부분 표면은 폐기합니다
이 backend는 그래픽 상태 save/restore, 직교 스케일, 이동·직각 회전 행렬, 채움 색 변경, 사각형, 채움 연산자, path 리셋을 받습니다. 텍스트, 임의 path, 선, 이미지, 투명도, 클리핑, pattern, shading, 미지원 색공간, 비직교 transform은 bitmap 할당 전에 사양합니다
그 능력은 디바이스 가속, 투명도, 컬러 관리를 주장하지 않으면서 prbcSIMD, prbcThreadSafe, prbcDeterministic을 선언합니다
THPDFSIMDRenderBackendStatistics는 직접 표면, 렌더링된 사각형, 벡터 블록, 스칼라 꼬리 픽셀, 폴백이 필요할 때의 정확한 거부 연산자를 보고합니다
사용자 정의 backend 계약
IHPDFPageRenderBackend를 구현해 THotPDF.PageRenderBackend에 할당합니다
THPDFPageRenderBackendRequest는 요청 페이지 인덱스와 DPI, 컴파일된 THPDFPageDisplayList, stream/이미지/폰트/optional content/컬러 관리/취소용 THPDFRenderDocAccess resolver를 공급합니다
backend는 페이지 콘텐츠를 다시 파싱하지 않고 THPDFPageDisplayList.GetToken으로 컴파일된 각 연산자를 검사할 수 있습니다
새로 할당한 TBitmap과 함께 True를 반환하면 bitmap 소유권이 HotPDF로 넘어가고, bitmap 없이 False를 반환하면 요청을 사양합니다
동시성과 폴백
prbcThreadSafe를 선언한 backend는 두 병렬 페이지 렌더 파이프라인을 통해 동시 실행될 수 있습니다
그 능력이 없는 backend는 전용 호출 잠금으로 직렬화되고, display-list 컴파일은 동시성을 유지합니다
rbfpSoftwareFallback은 불가/사양/실패한 backend 요청을 기존 렌더러로 재시도하고, rbfpFail은 EHPDFRenderBackend를 던집니다
backend는 선택적으로 IHPDFPageRenderBackendFailureInfo를 구현하거나 요청별 진단 사유를 반환해 동시 사양도 정확한 렌더 시도의 사유를 유지합니다
backend를 바꾸면 메모리/영속 렌더링 페이지 캐시 항목이 무효화되어 다른 렌더러의 이미지가 섞이지 않습니다
진단과 시각 게이트
THPDFRenderBackendStatistics는 시도, 성공, 실패, 소프트웨어 폴백, 직렬화 호출, 경과 시간, backend 이름, 마지막 실패 사유를 보고합니다
내장 parity fixture는 겹치는 투명도를 쓰고, Win32/Win64에서 기본 렌더러 대비 최대 Delta E 0, alpha 합성 RGB 오차 0, 상이 픽셀 수 0을 선언합니다