c++ 더블버퍼링 예제

주의해야 할 점은 일부 DirectX 함수가 성공할 때 실패 코드를 반환한다는 것입니다. 예를 들어, IDirectPlay:GetPlayerData는 데이터 크기를 요청할 때 DPERR_BUFFERTOOSMALL으로 “실패”합니다. 이 동작은 문서화되지 않으며 매우 실망스럽습니다. 이 중 많은 것은 아니지만 경계해야 합니다.) 이제 두 개의 버킷이 있는 경우 어떻게 할 지 생각해 보십시오. 첫 번째 버킷을 채운 다음 실행 중인 탭 아래에서 두 번째 버킷을 교체합니다. 그런 다음 첫 번째 버킷을 패들 풀에 비우기 위해 두 번째 버킷을 채우는 데 걸리는 시간이 있습니다. 돌아오면 버킷을 교체하여 첫 번째 버킷이 다시 채워지므로 두 번째 버킷을 풀에 비우는 것입니다. 풀이 가득 차게 될 때까지 이 작업을 반복할 수 있습니다. 버킷이 채우는 동안 아무것도하지 않고 기다리는 데 소요되는 시간이 훨씬 적기 때문에이 기술이 풀을 훨씬 빨리 채울 것이 분명합니다. 이는 이중 버퍼링과 유사합니다. 탭은 항상 있을 수 있으며 처리가 완료되는 동안 기다릴 필요가 없습니다. 이중 버퍼링은 이 문제를 해결하지만 방법을 이해하려면 먼저 컴퓨터가 그래픽을 표시하는 방법을 검토해야 합니다.

다른 사람을 고용하여 버킷을 풀로 옮기고 다른 사람이 채워지고 다른 사람이 비어 있는 경우 이는 트리플 버퍼링과 유사합니다. 이 단계가 충분히 오래 걸리면 더 많은 버킷을 사용할 수 있으므로 탭이 충전 버킷을 계속 실행합니다. 실제로 이중 버퍼링을 사용하기 위해서는 실시간 응용 프로그램이 됩니다. 따라서 GetMessage가 메시지를 받을 때까지 유휴 상태이기 때문에 메시지 루프를 약간 수정해야합니다. 대신 수신할 메시지가 없는 경우 즉시 반환되는 PeekMessage를 호출합니다. Windows에 메시지 큐가 있으므로 여러 메시지가 연속적으로 수신될 수 있습니다. PeekMessage의 마지막 인수를 PM_REMOVE로 지정하여 수신된 메시지가 이 큐에서 제거되어야 두 번 처리되지 않도록 합니다. 클리핑은 드로잉 루틴이 화면 가장자리 또는 창과 같은 다른 직사각형 경계 영역에서 그리는 것을 방지하는 기술에 주어진 이름입니다. 수행하지 않으면 일반적인 결과를 엉망으로 가장 잘 설명할 수 있습니다.

예를 들어, 창 모드를 사용하는 경우 와 같은 직접 그리기; 윈도우는 기본적으로 DirectDraw가 원하는 화면의 아무 곳이나 그릴 수있는 권리를 제공합니다. 그러나 잘 작동하는 DirectDraw 응용 프로그램은 일반적으로 자체 창으로만 그립니다. DirectX에는 창 외부로 그리는 것을 방지하기 위해 DirectDraw 표면에 부착할 수 있는 “클리퍼”라는 오브젝트가 있습니다. 일반적인 예이며 모든 게임 엔진이 해결해야 하는 예는 렌더링입니다. 게임이 사용자가 보는 세계를 그릴 때, 그것은 한 번에 한 조각씩 – 거리의 산, 구릉지, 나무, 차례로 각각 그렇게합니다. 사용자가 뷰가 점진적으로 그려지는 것을 본다면 일관된 세계의 환상은 산산조각이 될 것입니다. 장면은 원활하고 빠르게 업데이트되어야 하며, 각 프레임이 즉시 나타나는 일련의 완전한 프레임을 표시해야 합니다. 비트맵은 픽셀 값의 배열로 저장되는 컴퓨터의 이미지입니다. 그건 꽤 엉터리 설명. 기본적으로 비트맵은 컴퓨터의 모든 그림이며 일반적으로 `픽셀`의 직사각형 블록입니다.