2011-09-17 5 views
9

컴퓨터는 어떻게 화면을 최저 수준으로 그립니다 (X11과 같은 외부 라이브러리에 관한 정보는 없습니까?). 이 작업을 수행하는 어셈블리 명령이 있어야합니까? CPU가 화면에 나타나는 것을 정확히 어떻게 제어합니까?컴퓨터는 어떻게 화면을 그립니다.

+0

cpu는 GPU가 아닙니다. –

+1

@Ash : 전용 GPU가 있다고 가정합니다. – delnan

+0

http://fgiesen.wordpress.com/category/graphics-pipeline/page/2/이 흥미로울 수 있습니다. – user786653

답변

5

일반적으로 비디오 카드에는 frame buffer이라는 메모리 영역이 있습니다. 값을 쓰는 것은 픽셀의 색상 값을 설정하는 것을 의미합니다.

2D 배열과 같은 프레임 버퍼를 고려할 수 있습니다. 각 비트는 화면의 픽셀을 나타냅니다. 색상을 나타 내기 위해 다른 수준의 버퍼가 사용됩니다. 오늘날 공통 프레임 버퍼는 24 레벨 (각 RGB 색상 구성 요소마다 8 개)을 가지며 2^24 개의 가능한 색상을 허용합니다.

요즘 일반적으로 프레임 버퍼에 대한 액세스는 퍼포먼스 문제에 대해 GPU를 통해 발생합니다. CPU가이 작업을 수행 할 수는 있지만 상당히 비쌉니다.

8

기본적으로 하드 드라이브에서 읽거나 사운드 효과를 재생하는 것과 같은 방식입니다.

메모리 컨트롤러가 문제의 외부 하드웨어 (이 경우 하드 드라이브, GPU 또는 사운드 카드)에 매핑되는 특정 메모리 주소에 특정 데이터를 기록합니다. 하드웨어가 이러한 쓰기를 수신하면, 수행 된 작업에 대한 지침으로 작성된 데이터를 해석합니다.

CPU는 실제로 시스템의 나머지 부분과 분리되어 있습니다. 정말로 알고있는 것은 메모리 버스뿐입니다. 이 버스는 버스에서 데이터를 읽고 쓸 수 있으며, 기본적으로이 버스입니다. 이러한 읽기/쓰기 중 일부는 메모리로 이동하고 다른 메모리는 여러 하드웨어의 제어 레지스터에 매핑되거나 장치 메모리에 매핑되어 있으면 CPU가 다른 장치와 통신 할 수 있습니다.

최신 GPU에는 데이터를로드 할 수있는 전용 RAM이 있습니다. 따라서 CPU는 GPU에 명령을 보내 주 메모리에서 화면 내용을 생성하는 데 사용 된 데이터와 그 처리 방법을 지정합니다. 그런 다음 GPU는 주 메모리에서 해당 데이터를 자체 RAM으로로드합니다. 여기서 필요한 변환 및 계산이 프레임 버퍼에 기록됩니다.이 버퍼는 모니터에서 계속 읽습니다.

+1

+1 : 나는 표면적 인 대답에 수치심을 느낀다. – Heisenbug

+0

왜? 그것은 좋은 답변입니다. :) – jalf

3

어딘가에 비디오 화면 전용 메모리가 있습니다. 화면의 각 픽셀에는 일정량의 메모리가 있습니다. 팔레트 및 흑백과 같은 역사적인 솔루션을 피하기 위해 일반적으로 빨간색에 대한 특정 비트 수, 파란색에 대한 비트 수 및 녹색에 대한 수 비트가 있습니다. 그 색깔이 추가 될 때 당신은 백색을 포함하여 모두를 얻을 수있다 (나는 그들이 예를 들면 페인트로 사용 된 기본 색상이 아니라는 것을 안다. 일반적으로 8 비트, 1 바이트의 빨간색, 1 바이트의 녹색 및 1 바이트의 파란색 및 와이어 업 (wire up) 메모리 등을 관리하기가 쉽기 때문에 24 비트 색상을 찾습니다.

비디오 하드웨어는 계속해서 이것을 읽습니다 메모리에 저장하고 모니터에 신호를 보내는 기술을 사용하여 특정 픽셀에 대해 적색, 녹색 및 파란색의 양을 알려주고 지속적으로 최신 정보로 화면을 스캔합니다.

이 메모리를 사용하는 일반적인 기술은 두 엔티티가 메모리를 읽고 쓸 수있는 이중 포트라고하는 것을 사용하는 것입니다. 또는 두 가지 추억을 가지고 그들을 교환하십시오. 두 경우 모두, 비디오 카드/칩에 CPU, 또는 요즘 많은 그래픽 프로세서가있는 엔티티, 프로세서가 있습니다. 어느 경우 든 일부 소프트웨어가 실행되고 이들이 모든 픽셀의 위치와 색상을 계산하여 비디오 메모리에 기록합니다. 사용 된 메커니즘에 따라 메모리의 비디오/모니터 쪽이 의미를 갖을 때 변경 사항을 취합니다.사용자가 입력하는 글자의 픽셀 중 일부만 화면에 표시되도록 한 다음 나머지가 다음 패스에 표시되도록하려는 경우 사용자가 알 수있는 깜박임이 발생할 수 있습니다.

비디오 메모리는 일반적으로 시스템 메모리와 같이 매핑되며 프로세서는 비 비디오, 시스템, 메모리에 액세스 할 때 사용하는 것과 동일한 명령어를 사용합니다. 확실하게 GPRS는일지도 모르지만, CPU에는 일반적으로 주변 장치 특정한 지시, uart, gpio, 영상, usb, 저장, 등등이 없다. 주변 장치는 cpu의 기억 공간에있는 특정 주소로 일반적으로지도로 나타내고 정상적인 기억 읽기/쓰기 지시는 사용된다 .

비디오 게임에 필요한 특수한 유형의 알고리즘과 더 중요한 것은 비디오 카드가 많은 특수하고 간단한 그래픽 프로세서를 사용하기 때문에 어제, 오늘 또는 내일에 성능 또는 크기 또는 전원 또는 기타 이유로 비디오 메모리 관련 지침. 아마도 비디오 버퍼가 화면을 그릴 수 있도록 비디오 하드웨어가 모니터에 보낼 신호를 만드는 데 사용하는 픽셀 값의 화면을 보유하고있는 메모리 인 프레임 버퍼 메모리를 갖는 모델이 변경되지는 않을 것입니다.

+0

내가 아는 현재 시스템에서는 True이지만 일부 오래된 시스템에서는 Backing Frame Buffer가 없습니다. :-) –

+1

내가 "역사적인 솔루션을 피하는 것"이라고 말한 이유는 무엇보다 중요한 것은 프레임 버퍼가없는 일종의 프레임 버퍼가없는 무수한 방법을 사용하지 않기 위해서입니다. 중요한 질문은 조립 지침 (드물게), 그렇지 않은 경우 (대부분의 물건처럼 메모리 맵핑)입니다. 컴퓨터 비디오/그래픽을 구현하는 데 프레임 버퍼 이외의 다른 솔루션이 사용 된 재미있는 커뮤니티 유형 질문 일 수 있습니다. –

+0

실제로는 프레임 프레임 버퍼를 사용하지 않는 현재 (프로덕션에서) 시스템을 가로 질렀습니다. 프로펠러 기반의 "히드라"! –

관련 문제