글수 39
Gamza.net 에서 감자님이 올려주신 내용입니다.
-------------------------------------------
(1) D3DSWAPEFFECT_DISCARD
D3D는 Present직후, 백버퍼에 이전 프레임의 내용이 들어있다는 것을 보장 해주려고 합니다.
(아무것도 않고 Present 만 계속하면 화면이 정지해 있도록...)
(D3D help - 'Present 처리가 백 버퍼의 내용에 영향을 주지 않는 것을 보증한다.')
COPY방식일 경우엔 전혀 문제가 되지 않습니다. 백버퍼를 그냥 그대로 놔두기만 하면 되는 일이죠.
하지만 FLIP방식일 경우, Present직후...백버퍼에는 무엇이 들어있을까....(잘생각해 보시길...)
때문에 프론트버퍼(방금전까지 백버퍼였던)의 내용을 백버퍼로 복사해올 필요가 생깁니다.
(D3D help - '이 보증을 만족시키기 위해서 상당한 비디오 메모리의 오버헤드나 처리의 오버헤드를 수반하는 일이 있다')
D3DSWAPEFFECT_DISCARD는 그런 보장은 안해줘도 상관없으니 쓸데없는 짓은 하지말아라....
라고 알려주는겁니다.
덧붙이자면, 위의 경우는 한가지 예일 뿐입니다.
D3D헬프에 나온표현이 더 정확하죠.
어떤 제약조건을 만족시키기 위해선 뭔가(무엇이 될지 모르지만) 해줘야 할.지.도. 모른다.
그런데 이옵션은 그 제약조건을 풀어줌으로해서 있을지 없을지 모르는 오버헤드를 원천봉쇄하는거다.
이렇게 이해를 해주세요.
(2) COPY==window , FLIP==full screen ????
그래픽 카드는 모니터로 전송되는 화면의 내용을 담고있는 주소를 지정하는 레지스터가 있습니다.
그래픽카드는 이 레지스터가 가리키는곳을 쉴새없이 읽어다가 모니터에 뿌려주죠....(모니터 주파수에 맞추어서..)
FLIP은 백버퍼의 주소값을 이 레지스터에 쓰는것으로 완료입니다.(내용이 모니터에 뿌려지는건 자동이라...)
그렇다면 상식적으로 생각해봐도 Present를 할때 COPY보다는 FLIP이 훨씬 효율적인게 분명합니다.
3D화면 전체 복사(COPY) VS 레지스터한두개 설정(FLIP)
그런데....윈도우 모드일 경우......
FLIP을 쓰면, 3D이외의..바탕화면이라던가...다른 윈도우들.....이것들이 보였다 안보였다 하게 됩니다.
이것을 막으려면 그런것들을 두군데에 모두 그려놓고 똑같게 유지해 주어야 하는데...
이렇게 하자면...기존에 구축되어있는 GUI에 일관성도 파괴될 뿐더러,
요새처럼 바탕화면이 고해상도인 경우엔, 배보다 배꼽이 더 크게 되죠....
차라리 3D화면을 한번 복사하는게 더 낳습니다.......COPY
full screen일 경우엔 바탕화면이라던가 다른윈도우 신경안써도 되니...당연.....FLIP
이해가 되셨는지 모르겠습니다.
감자 성수올림...@~
-------------------------------------------
(1) D3DSWAPEFFECT_DISCARD
D3D는 Present직후, 백버퍼에 이전 프레임의 내용이 들어있다는 것을 보장 해주려고 합니다.
(아무것도 않고 Present 만 계속하면 화면이 정지해 있도록...)
(D3D help - 'Present 처리가 백 버퍼의 내용에 영향을 주지 않는 것을 보증한다.')
COPY방식일 경우엔 전혀 문제가 되지 않습니다. 백버퍼를 그냥 그대로 놔두기만 하면 되는 일이죠.
하지만 FLIP방식일 경우, Present직후...백버퍼에는 무엇이 들어있을까....(잘생각해 보시길...)
때문에 프론트버퍼(방금전까지 백버퍼였던)의 내용을 백버퍼로 복사해올 필요가 생깁니다.
(D3D help - '이 보증을 만족시키기 위해서 상당한 비디오 메모리의 오버헤드나 처리의 오버헤드를 수반하는 일이 있다')
D3DSWAPEFFECT_DISCARD는 그런 보장은 안해줘도 상관없으니 쓸데없는 짓은 하지말아라....
라고 알려주는겁니다.
덧붙이자면, 위의 경우는 한가지 예일 뿐입니다.
D3D헬프에 나온표현이 더 정확하죠.
어떤 제약조건을 만족시키기 위해선 뭔가(무엇이 될지 모르지만) 해줘야 할.지.도. 모른다.
그런데 이옵션은 그 제약조건을 풀어줌으로해서 있을지 없을지 모르는 오버헤드를 원천봉쇄하는거다.
이렇게 이해를 해주세요.
(2) COPY==window , FLIP==full screen ????
그래픽 카드는 모니터로 전송되는 화면의 내용을 담고있는 주소를 지정하는 레지스터가 있습니다.
그래픽카드는 이 레지스터가 가리키는곳을 쉴새없이 읽어다가 모니터에 뿌려주죠....(모니터 주파수에 맞추어서..)
FLIP은 백버퍼의 주소값을 이 레지스터에 쓰는것으로 완료입니다.(내용이 모니터에 뿌려지는건 자동이라...)
그렇다면 상식적으로 생각해봐도 Present를 할때 COPY보다는 FLIP이 훨씬 효율적인게 분명합니다.
3D화면 전체 복사(COPY) VS 레지스터한두개 설정(FLIP)
그런데....윈도우 모드일 경우......
FLIP을 쓰면, 3D이외의..바탕화면이라던가...다른 윈도우들.....이것들이 보였다 안보였다 하게 됩니다.
이것을 막으려면 그런것들을 두군데에 모두 그려놓고 똑같게 유지해 주어야 하는데...
이렇게 하자면...기존에 구축되어있는 GUI에 일관성도 파괴될 뿐더러,
요새처럼 바탕화면이 고해상도인 경우엔, 배보다 배꼽이 더 크게 되죠....
차라리 3D화면을 한번 복사하는게 더 낳습니다.......COPY
full screen일 경우엔 바탕화면이라던가 다른윈도우 신경안써도 되니...당연.....FLIP
이해가 되셨는지 모르겠습니다.
감자 성수올림...@~
