버그 해결을 위한 모든 질문을 던져
0 votes
86 views

primary surface와 secondary surface 내용들을 살펴보니 대략 전면버퍼, 후면버퍼를 다르게 부르는 것이라 생각했는데

좀 더 학습하다보니 내용도 좀 다른 것 같더라구요. Surface 생성 관련 구조체 중 DDSCAPS 구조체가 있는데 여기에 플래그 중

- DDSCAPS_PRIMARYSURFACE

- DDSCAPS_FRONTBUFFER

- DDSCAPS_BACKBUFFER

이런 식으로 존재하는데, 즉 서로 다른 의미라는 건데...
 

풀스크린일 경우 flip이 가능, 창 모드일 경우 불가능하다고 하더라구요. flip이 가능할 경우 전면/후면 surface가 각각 DDSCAPS_PRIMARYSURFACE/DDSCAPS_BACKBUFFER을 사용하고

창 모드일 경우 DDSCAPS_PRIMARYSURFACE/DDSCAPS_OFFSCREENPLAIN를 사용하는데

그럼 DDSCAPS_FRONTBUFFER는 어떤 용도 인가요?

 

학습을 좀 하다보니 우선 Fullscreen 모드에서만 주 표면과 보조 표면의 포인터를 교환하는 Flip을 사용할 수 있다 합니다. 그리고 윈도우 모드에선 Flip은 안되고 단순 copy 하는 방식(Blit)으로만 사용할 수 있다 하는데.. 윈도우 모드에서 Flip이 불가능한 이유가 어떤 제약 때문인지 알 수 있을까요? 

화면 독점 여부와 관련이 있는지..  그래픽카드(비디오 메모리)에 대한 이해가 부족하다 보니 어렵네요. 

asked (6 point)
수정됨 , 86 views
아직도 ddraw 를 공부하는 사람이 있군요.

하도 오래전 일이라 기억이 가물가물 해서 댓글로만 달아 봅니다.

요즘 win10 에는 새로운 방법이 있는지 모르겠지만, 예전의 윈도는 win32 환경에 에서 GDI 를 통해서만 화면상의 객체를 그리수 있도록 엄격하게 제한이 있었습니다.

이 GDI 란 물건은 윈도 UI 를 그리기 위해서 설계된 API 이기 때문에, 게임에 대한 지원이 부족했습니다.

그래서 개발자들은 윈도에서 게임을 만들기 위해서 Bitmap 한장을 만들고 마치 이걸 screen buffer 처럼 활용해서 이 위에다 뭔가를 그리고 그걸 blit 명령을 통해 윈도에 그리는 방법을 사용했습니다.

그리고 blit 명령은 2d 가속을 통해 h/w 가속이 되기 때문에 괜찮은 방법이었죠.

그후에 directx 가 나와서 이런 방법을 거치지 않고 바로 비디오 메모리에 직접 접근할 수 있게 된 후로는, 굳이 사용할 필요가 없는데, 윈도 모드에선 여전히 이런 작업이 필요한 것입니다.
답변 감사합니다. 그런데 약간의 혼란이 오는데 제가 이해한 것을 적어보자면 win32 환경인 윈도 모드(Windows가 아닌 창 모드를 의미하는 것이죠?) 에선 여전히 blit이 필요하다. 그러나 directx가 나온 후엔 비디오 메모리에 직접 접근이 가능하다. 즉 플립이 가능하다. 그렇다면 풀스크린이 단순히 윈도우 모드와 크기만 다른 것이 아니라 directx의 기술 덕분에 가능한건가요? 전 단순히 둘다 win32 환경이고 화면 크기의 차이일 뿐이라 생각했는데 말이죠..

1 답변

+1 vote
우수 답변

네 그렇습니다.

보이는게 비슷할 뿐 direcx 가 보여주는 화면은 일종의 오버레이 화면이라 윈도 화면과는 별 관계가 없습니다.
 
창모드 : 이미지 blit =>  윈도우 화면 => 비디오 메모리 => 화면 출력

Directx : 이미지 전송 => 비디오 메모리 => 화면 출력

 

answered (132 point)
선택됨
아~ 이제 이해가 좀 되네요... 감사합니다.

버그 해결을 위해 도움을 구하고, 도움을 주세요. 우리는 그렇게 발전합니다.

throw bug 는 프로그래밍에 대한 전분야를 다룹니다. 질문,논의거리,팁,정보공유 모든 것이 가능합니다. 프로그래밍과 관련이 없는 내용은 환영받지 못합니다.

424 질문
564 answers
572 댓글
38,374 users