컴퓨터는 어떻게 화면을 최저 수준으로 그립니다 (X11과 같은 외부 라이브러리에 관한 정보는 없습니까?). 이 작업을 수행하는 어셈블리 명령이 있어야합니까? CPU가 화면에 나타나는 것을 정확히 어떻게 제어합니까?컴퓨터는 어떻게 화면을 그립니다.
답변
일반적으로 비디오 카드에는 frame buffer이라는 메모리 영역이 있습니다. 값을 쓰는 것은 픽셀의 색상 값을 설정하는 것을 의미합니다.
2D 배열과 같은 프레임 버퍼를 고려할 수 있습니다. 각 비트는 화면의 픽셀을 나타냅니다. 색상을 나타 내기 위해 다른 수준의 버퍼가 사용됩니다. 오늘날 공통 프레임 버퍼는 24 레벨 (각 RGB 색상 구성 요소마다 8 개)을 가지며 2^24 개의 가능한 색상을 허용합니다.
요즘 일반적으로 프레임 버퍼에 대한 액세스는 퍼포먼스 문제에 대해 GPU를 통해 발생합니다. CPU가이 작업을 수행 할 수는 있지만 상당히 비쌉니다.
기본적으로 하드 드라이브에서 읽거나 사운드 효과를 재생하는 것과 같은 방식입니다.
메모리 컨트롤러가 문제의 외부 하드웨어 (이 경우 하드 드라이브, GPU 또는 사운드 카드)에 매핑되는 특정 메모리 주소에 특정 데이터를 기록합니다. 하드웨어가 이러한 쓰기를 수신하면, 수행 된 작업에 대한 지침으로 작성된 데이터를 해석합니다.
CPU는 실제로 시스템의 나머지 부분과 분리되어 있습니다. 정말로 알고있는 것은 메모리 버스뿐입니다. 이 버스는 버스에서 데이터를 읽고 쓸 수 있으며, 기본적으로이 버스입니다. 이러한 읽기/쓰기 중 일부는 메모리로 이동하고 다른 메모리는 여러 하드웨어의 제어 레지스터에 매핑되거나 장치 메모리에 매핑되어 있으면 CPU가 다른 장치와 통신 할 수 있습니다.
최신 GPU에는 데이터를로드 할 수있는 전용 RAM이 있습니다. 따라서 CPU는 GPU에 명령을 보내 주 메모리에서 화면 내용을 생성하는 데 사용 된 데이터와 그 처리 방법을 지정합니다. 그런 다음 GPU는 주 메모리에서 해당 데이터를 자체 RAM으로로드합니다. 여기서 필요한 변환 및 계산이 프레임 버퍼에 기록됩니다.이 버퍼는 모니터에서 계속 읽습니다.
어딘가에 비디오 화면 전용 메모리가 있습니다. 화면의 각 픽셀에는 일정량의 메모리가 있습니다. 팔레트 및 흑백과 같은 역사적인 솔루션을 피하기 위해 일반적으로 빨간색에 대한 특정 비트 수, 파란색에 대한 비트 수 및 녹색에 대한 수 비트가 있습니다. 그 색깔이 추가 될 때 당신은 백색을 포함하여 모두를 얻을 수있다 (나는 그들이 예를 들면 페인트로 사용 된 기본 색상이 아니라는 것을 안다. 일반적으로 8 비트, 1 바이트의 빨간색, 1 바이트의 녹색 및 1 바이트의 파란색 및 와이어 업 (wire up) 메모리 등을 관리하기가 쉽기 때문에 24 비트 색상을 찾습니다.
비디오 하드웨어는 계속해서 이것을 읽습니다 메모리에 저장하고 모니터에 신호를 보내는 기술을 사용하여 특정 픽셀에 대해 적색, 녹색 및 파란색의 양을 알려주고 지속적으로 최신 정보로 화면을 스캔합니다.
이 메모리를 사용하는 일반적인 기술은 두 엔티티가 메모리를 읽고 쓸 수있는 이중 포트라고하는 것을 사용하는 것입니다. 또는 두 가지 추억을 가지고 그들을 교환하십시오. 두 경우 모두, 비디오 카드/칩에 CPU, 또는 요즘 많은 그래픽 프로세서가있는 엔티티, 프로세서가 있습니다. 어느 경우 든 일부 소프트웨어가 실행되고 이들이 모든 픽셀의 위치와 색상을 계산하여 비디오 메모리에 기록합니다. 사용 된 메커니즘에 따라 메모리의 비디오/모니터 쪽이 의미를 갖을 때 변경 사항을 취합니다.사용자가 입력하는 글자의 픽셀 중 일부만 화면에 표시되도록 한 다음 나머지가 다음 패스에 표시되도록하려는 경우 사용자가 알 수있는 깜박임이 발생할 수 있습니다.
비디오 메모리는 일반적으로 시스템 메모리와 같이 매핑되며 프로세서는 비 비디오, 시스템, 메모리에 액세스 할 때 사용하는 것과 동일한 명령어를 사용합니다. 확실하게 GPRS는일지도 모르지만, CPU에는 일반적으로 주변 장치 특정한 지시, uart, gpio, 영상, usb, 저장, 등등이 없다. 주변 장치는 cpu의 기억 공간에있는 특정 주소로 일반적으로지도로 나타내고 정상적인 기억 읽기/쓰기 지시는 사용된다 .
비디오 게임에 필요한 특수한 유형의 알고리즘과 더 중요한 것은 비디오 카드가 많은 특수하고 간단한 그래픽 프로세서를 사용하기 때문에 어제, 오늘 또는 내일에 성능 또는 크기 또는 전원 또는 기타 이유로 비디오 메모리 관련 지침. 아마도 비디오 버퍼가 화면을 그릴 수 있도록 비디오 하드웨어가 모니터에 보낼 신호를 만드는 데 사용하는 픽셀 값의 화면을 보유하고있는 메모리 인 프레임 버퍼 메모리를 갖는 모델이 변경되지는 않을 것입니다.
내가 아는 현재 시스템에서는 True이지만 일부 오래된 시스템에서는 Backing Frame Buffer가 없습니다. :-) –
내가 "역사적인 솔루션을 피하는 것"이라고 말한 이유는 무엇보다 중요한 것은 프레임 버퍼가없는 일종의 프레임 버퍼가없는 무수한 방법을 사용하지 않기 위해서입니다. 중요한 질문은 조립 지침 (드물게), 그렇지 않은 경우 (대부분의 물건처럼 메모리 맵핑)입니다. 컴퓨터 비디오/그래픽을 구현하는 데 프레임 버퍼 이외의 다른 솔루션이 사용 된 재미있는 커뮤니티 유형 질문 일 수 있습니다. –
실제로는 프레임 프레임 버퍼를 사용하지 않는 현재 (프로덕션에서) 시스템을 가로 질렀습니다. 프로펠러 기반의 "히드라"! –
- 1. 석영으로 화면을 그립니다.
- 2. 레지스터 기반 가상 컴퓨터는 어떻게 작동합니까?
- 3. JList는 어떻게 다시 그립니다?
- 4. 그립니다?
- 5. 어떻게 하프 화면을 표시합니까?
- 6. 컴퓨터는 특정 메모리 위치가 저장하는 데이터 유형을 어떻게 추적합니까?
- 7. 캔버스에 투명 모양을 그립니다.
- 8. 어떻게 투명하게 GNU 화면을 사용합니까?
- 9. android : 어떻게 다중보기 화면을 만드시겠습니까?
- 10. ActionScript에서 전체 화면을 어떻게 활용합니까?
- 11. CGPath를 사용하여 선을 그립니다.
- 12. 정사각형 행렬을 그립니다.
- 13. 안드로이드에서 15km 반경을 그립니다.
- 14. 드래그 가능한 사각형을 그립니다.
- 15. 배경에 선을 그립니다.
- 16. 비트 맵을 생성하고 그립니다.
- 17. 다른 클래스의 메서드를 그립니다.
- 18. perl GD 모양을 그립니다.
- 19. iOS의 버퍼에서 이미지를 그립니다.
- 20. 어떻게 Perl 쿠키 초기화 로그인 화면을 디자인합니까?
- 21. screentoaster.com은 브라우저에서 컴퓨터 화면을 어떻게 캡처합니까?
- 22. RichTextBox가 화면을 새로 고치는 것을 어떻게 방지합니까?
- 23. AppleScript를 사용하여 Safari에서 화면을 어떻게 클릭합니까?
- 24. 어떻게 사용자 정의 Android 대기 화면을 설정합니까?
- 25. 어떻게 스플래시 화면을 무작위화할 수 있습니까?
- 26. 메뉴 바가있는 화면을 어떻게 결정할 수 있습니까?
- 27. Dreamweaver의 화면을 어떻게 더 커 보이게합니까?
- 28. DataGridView가 잘못 그립니다.
- 29. drawRect에서 UIView의 경계 외부로 그립니다.
- 30. DataGridView는 WPF에서 버그를 그립니다.
cpu는 GPU가 아닙니다. –
@Ash : 전용 GPU가 있다고 가정합니다. – delnan
http://fgiesen.wordpress.com/category/graphics-pipeline/page/2/이 흥미로울 수 있습니다. – user786653