듀얼모니터 환경에서 이미지를 뿌리고 있는데요.
Dlg를 두개 띄워서 똑같은 이미지를 뿌릴때에
main모니터에서는 문제없는 반면
sub모니터에서 나오는 이미지에는 스크레치 처럼 미세한 줄들이 그어지는 이유는 무엇인가요..???
sub 모니터에 있던 dlg를 main 모니터로 옴기면 잘 나옵니다~~
듀얼모니터 환경에서 이미지를 뿌리고 있는데요.
Dlg를 두개 띄워서 똑같은 이미지를 뿌릴때에
main모니터에서는 문제없는 반면
sub모니터에서 나오는 이미지에는 스크레치 처럼 미세한 줄들이 그어지는 이유는 무엇인가요..???
sub 모니터에 있던 dlg를 main 모니터로 옴기면 잘 나옵니다~~
메인이랑 서브에서 surface를 따로 생성해서 pitch 값이 같은지 한번 확인해봐봐. ddraw surface 출력시 스크래치 생기는 원인은 거의 pitch 계산 문제라서 각 스캔라인 시작주소가 밀려나거나 당겨져서 그러니까.
근데... 아직도 ddraw 쓸 일이 있나? 요즘시대엔 빠른 출력이 필요하면 d3d 기반이 더 빠르고, 복잡한 primitive 나 bitmap 생성 및 수정이 필요한 경우라면 dib로 해도 큰 차이 없을텐디...
암튼 메인 모니터에 맞춰 생성한 surface를 갖고 그대로 서브로 이동해가면 당연히 어긋나게 됨. 그걸 감지하자니 모니터 사이에 걸치는 문제가 생기고... 모니터간에 이동하고 싶으면 dib로 출력하는게 유일한 해법임.
앗쌀 형 너무 고마워.... Pitch값 계산 문제라는게 아직 D Draw를 잘 이해하지 못하고 있는 상태에서 이해하기가 힘든데.... 모니터 해상도 랑 인치가 똑같은데도 다를 수 있는거야...???
응 다를 가능성 있어. 같은 해상도와 depth 라도 PC에 따라서 pitch가 다르거든. 그래서 무조건 surface desc 에서 읽어서 계산해야 했지.
모니터간에 이동은 안하고.... 그냥 서브모니터용 Dlg 메인모니터용 Dlg를 만들어서 쓰고싶은데.....
이동을 절대 안한다는 보장이 있다면 ddraw 초기화할 때 device 를 두번째로 잡던가.. 근데 이런 저런 환경을 생각하면 dib 가 훨 효율적임.
디바이스를 두번째로 잡는다 라는 말에 정말 구현하고 싶은 생각이들어.. 사실 이미 구축되어있는 솔루션에 기능추가하는 일을하고잇어서 device-independent bitmap, ?? 이런 걸 새로 적용할 생각은 없어....
형! 그걸 구현하기위한 함수 내지 간략한 핵심 단어 떡밥좀 줬으면 좋겠어.. 소스를 달란말은 안해... 닥치고 구글검색 졸라 해볼테니까... ^^
씨발 ddraw 만져본지가 어언 10년 전 얘긴데ㅠㅠ 함 옛날 소스 뒤져봐야 할듯ㅠㅠ
그렇구나... 영상쪽으로 ddraw든 d3d든 지식이나 기본이 좀 되어있으면 막고치겠는데... 당장 시키는 내용 구현하는것도 좀 벅차서....
DirectDrawEnumerateEx 이걸로 각 디바이스의 guid 를 찾고, DirectDrawCreate 이거랑 IDirectDraw2::Initialize 이거에 각각 개별적은 guid 를 넘겨야 할거임..
모니터에 따라 HW 스펙이 달라서 pitch가 달라. 조사빔이 지나가야 될 실제 수평 거리가 되는데, 대부분 실제 모니터 해상도보다 높은데, 모니터마다 차이가 있을 수 있어. 특히 양쪽 모니터 해상도가 다르면 피치가 당연히 다르거든. 가장 간단하게 생각하면 Primary Surface를 없애고 Render된 surface를 걍 Window DC에다 뿌려. 윈도우가 알아서 해줘. 그게 싫으면 창모드로 하되 윈도우 이동을 제약시켜 걸치지 않게 하던가.
여튼 나라면 걍 RenderSurface->GetDC()해서 DC2DC blt를 호출하겠어.
근데 겜개발쪽에선.. 이미 옛날에 ddraw를 버렸거든. 비트맵 출력하는데 ddraw 쓰느니 차라리 d3d 에서 직교투영행렬로 설정하고 세모 두개로 네모 만들어 텍스쳐 바르는게 훨 빠르고 퀄리티도 잘 나오고... 뭣보다 dds 라는 압축포맷이 나온지라. 글구 프레임버퍼를 빈번하게 수정하는 경우라면 dib 만으로도 큰 수정 없이 ddraw 기반의 코드를 교체할 수 있는데다.. 이런저런 호환성 문제까지 해결되서리...
음..... 지금 내가... 이문제를 한 일주일째 붙잡고있는데...아... 쪽팔리다.. ㅠㅠ DirectDrawEnumerateEx 이걸로 각 디바이스의 guid 를 찾고, DirectDrawCreate에 guid를 넣는 부분까지는 구현을 했네....
앗쌀횽 말이 맞지만.. 위 형이 혹시 DDraw로 개발된걸 유지보수해야되거나 D3D mobile이 지원안되는 임베디드일지도 몰라서 ㅎ; DDraw가 왜 7까지만 나오고 그뒤로 없는지만 살펴봐도 자명한 이야기^^
여기는 cctv 회사라 3d 이런거 필요없어그냥 카메라에서 영상받아서 그냥 그대로 뿌려주고 저장만 잘하믄 돼...