프로그램
[펌] DirectDraw - Blit, Flip, RECT, DDBLTFX, Lock
>동네청년<
2007. 11. 5. 23:15
출처 : http://blog.empas.com/uuzazuk/19664434
◈ Blit, Flip, RECT, DDBLTFX 그리고 Lock
게임 제작에서는 복사를 자주 하게됩니다. 왜냐하면, 단 1개의 표면으로 모니터에 그림을 나타내는 것이 아니라 우선 2차, 3차 표면에다가 그림이나 캐릭터를 준비해 두었다가 나중에 1차 화면으로 그림들을 보내어 우리가 눈으로 볼 수 있게 하는 방식을 쓰기 때문입니다. 따라서 이제는 표면 복사 개념을 가진 함수인 Blit와 Flip - 그리고 이와 같은 효과를 가지는 Lock 함수 - 을 공부해야 하며, 또 이 과정에서 사용되는 RECT와 DDBLTFX라는 구조체도 알아 두어야 합니다.
1. Flip에 대하여
쉬운 개념부터 먼저 정리한다. 결론적으로 Flip 함수는 오로지 2차 표면에 들어가 있는 그림 내용을 - 눈에 보이는 화면 즉, 모니터 화면으로 이해하여도 될 - 1차 표면으로 복사해 주는 함수로써 사용법은 다음과 같이 아주 간단하다.
예) lpPrimary-> Flip(NULL, DDFLIP_WAIT):
앞에는 1차 표면을 나타내는 lpPrimary 객체가 나와, 그림 자료를 - 2차 표면에서 - 1차 표면으로 복사해 준다는 말이 되는데, 첫번째 매개변수의 NULL이란 뜻은 그림 자료 '전체' 크기를 전달하겠다는 의미이다. 그런데, 매개변수 안에는 2차 표면에 대한 언급 내용을 전혀 찾아 볼 수 없다. 그 이유는 2차 표면의 크기는 1차 표면과 같기에 - 이들이 이처럼 내부적으로 연관 되어있으므로 - 2차 표면에 대한 언급이 없다.
2. Blit에 대하여
한편, 3차 표면의 그림들을 2차 표면으로 복사해 주는 함수는 Blit인데, Blit해 주는 함수 종류로는 Blt 함수와 Bltfast 함수가 있다. 이들의 복사 과정은 다소 다르며, 약간은 복잡하다고 할 수 있겠다.
◈ Blit, Flip, RECT, DDBLTFX 그리고 Lock
게임 제작에서는 복사를 자주 하게됩니다. 왜냐하면, 단 1개의 표면으로 모니터에 그림을 나타내는 것이 아니라 우선 2차, 3차 표면에다가 그림이나 캐릭터를 준비해 두었다가 나중에 1차 화면으로 그림들을 보내어 우리가 눈으로 볼 수 있게 하는 방식을 쓰기 때문입니다. 따라서 이제는 표면 복사 개념을 가진 함수인 Blit와 Flip - 그리고 이와 같은 효과를 가지는 Lock 함수 - 을 공부해야 하며, 또 이 과정에서 사용되는 RECT와 DDBLTFX라는 구조체도 알아 두어야 합니다.
1. Flip에 대하여
쉬운 개념부터 먼저 정리한다. 결론적으로 Flip 함수는 오로지 2차 표면에 들어가 있는 그림 내용을 - 눈에 보이는 화면 즉, 모니터 화면으로 이해하여도 될 - 1차 표면으로 복사해 주는 함수로써 사용법은 다음과 같이 아주 간단하다.
예) lpPrimary-> Flip(NULL, DDFLIP_WAIT):
앞에는 1차 표면을 나타내는 lpPrimary 객체가 나와, 그림 자료를 - 2차 표면에서 - 1차 표면으로 복사해 준다는 말이 되는데, 첫번째 매개변수의 NULL이란 뜻은 그림 자료 '전체' 크기를 전달하겠다는 의미이다. 그런데, 매개변수 안에는 2차 표면에 대한 언급 내용을 전혀 찾아 볼 수 없다. 그 이유는 2차 표면의 크기는 1차 표면과 같기에 - 이들이 이처럼 내부적으로 연관 되어있으므로 - 2차 표면에 대한 언급이 없다.
2. Blit에 대하여
한편, 3차 표면의 그림들을 2차 표면으로 복사해 주는 함수는 Blit인데, Blit해 주는 함수 종류로는 Blt 함수와 Bltfast 함수가 있다. 이들의 복사 과정은 다소 다르며, 약간은 복잡하다고 할 수 있겠다.
◈ 참고 : Blt 함수와 Bltfast 함수는 표면 복사에 제한이 없다 Blt 함수와 Bltfast 함수는 일반적으로 3차 표면의 그림을 2차 표면으로 복사시키는데 사용된다. 그러나, 때로는 2차 표면에서 1차 표면으로 복사할 때도 사용되는 등 이들 함수는 사실상 표면 복사에 제한이 없다. 따라서 3차 표면에서 다른 3차 표면으로 그림 자료를 복사할 수도 있고, 또 3차에서 바로 1차 표면으로도, 심지어는 1차 표면에서 2차 표면으로 복사할 때도 사용된다. |
1) Blt와 Bltfast의 차이점
예) lpSecondary-> Bltfast(100, 200, &lpThird, &Srect, DDBLTFAST_WAIT);
예) lpSecondary-> Blt(&Drect, lpThird, &Srect, DDBLT_WAIT, NULL);
이 Blt 함수와 Bltfast 함수는 3차 표면(lpThird)에 들어가 있는 그림 자료를 2차 표면(lpSecondary)으로 복사해 준다. 그러나 차이점은 - 매개변수들을 통해서도 알 수 있듯이 - Bltfast 함수는 그림 크기 조절이 되지 않는 반면, Blt 함수는 그림 크기 조절이 가능하며 또 다양한 효과도 함께 나타낼 수 있다는 점이다.
2) Bltfast 함수의 사용
예) lpSecondary-> Bltfast(100, 200, &lpThird, &Srect, DDBLTFAST_WAIT);
예) lpSecondary-> Bltfast(100, 200, &lpThird, &Srect, DDBLTFAST_WAIT);
예) lpSecondary-> Blt(&Drect, lpThird, &Srect, DDBLT_WAIT, NULL);
이 Blt 함수와 Bltfast 함수는 3차 표면(lpThird)에 들어가 있는 그림 자료를 2차 표면(lpSecondary)으로 복사해 준다. 그러나 차이점은 - 매개변수들을 통해서도 알 수 있듯이 - Bltfast 함수는 그림 크기 조절이 되지 않는 반면, Blt 함수는 그림 크기 조절이 가능하며 또 다양한 효과도 함께 나타낼 수 있다는 점이다.
2) Bltfast 함수의 사용
예) lpSecondary-> Bltfast(100, 200, &lpThird, &Srect, DDBLTFAST_WAIT);