2011-07-06 4 views
9

죄송합니다. 그렇다면; 해당 사이트로 자유롭게 이동하십시오.
DirectX 또는 OpenGL과 같은 GPU와 통신하기 위해 낮은 수준의 API를 사용하지 않고 GDI/GDI +를 그래픽 카드 (화면의 콘텐츠 표시)로 렌더링하는 방법은 무엇입니까? API를 사용하지 않으면 어떻게 화면에 그려 집니까? 예; 이미지가 합성되어 CPU에 렌더링되었지만 모니터에 표시되기 전에 어느 정도 GPU로 전송되어야한다는 것을 알고 있습니다. 이게 어떻게 작동합니까?GDI/GDI +가 OpenGL 또는 DirectX없이 작동하는 방식

답변

12

GDI 프리미티브는 비디오 카드 드라이버에서 구현됩니다. 비디오 드라이버는 GPU 제조업체가 제공하며 독점적 인 레지스터 레벨 인터페이스를 사용하여 GPU와 통신하며이 레벨에서는 공개 API가 필요하지 않습니다.

귀하가 알고 계신 것과는 반대로 이미지는 일반적으로 CPU에서 완전히 렌더링되고 합성되지 않습니다. 오히려 비디오 드라이버는 CPU와 GPU 프로세싱의 조합을 자유롭게 사용할 수 있으며 일반적으로 많은 수의 GDI 명령 (특히 비트 블록 전송, 블리 팅)이 GPU에 위임됩니다.

독점 인터페이스는 OpenGL 클라이언트 드라이버와 DirectX 드라이버를 지원할만큼 강력해야하므로 GDI 드라이버가 실행을 위해 GPU에 명령을 전달할 수 있다는 것은 놀라운 일이 아닙니다. 부팅시 초기


(및 Windows 설치)에는 제조업체 별 드라이버를 사용할 수없는 경우, 비디오 API는 소프트웨어의 모든 렌더링을 수행하고 GPU의 RAMDAC을 공급 단지 메모리 영역 인 프레임 버퍼에 기록 않습니다 CPU 주소 공간에 매핑됩니다. 프레임 버퍼는 몇 가지 잘 알려진 형식 중 하나 (VESA로 정의 됨)에 저장됩니다.

+1

그래서 GDI는 Direct3d 또는 OpenGL 레벨에 배치되지만 (창 기반 도면에 필요한 API 만 구현하지만) 이들과 병렬 (서로를 사용하지 않음)합니다. 내가 맞습니까? – SerG

+1

@SerG : 대다수. 비디오 드라이버는 하나의 명령 집합 만 하드웨어에 구현하고 나머지는 다른 명령 집합에 자유롭게 배치하거나 명령 집합 중 하나와 완전히 일치하지 않는 명령 집합을 가질 수 있지만 API는 별도로 구현되어 있습니다. 독점 API/명령 세트의 맨 위에있는 레이어입니다. 최근 버전의 Windows에서는 또한 GDI 및 GDI +를 오프 스크린 표면에 렌더링 한 다음 DirectX를 사용하여 전체 이미지를 합성합니다. 그러나 애플리케이션 측면에서 보면 완전히 분리되어 있습니다. –

관련 문제