| DirectX SDK Summer 2003
에 있는 예제를 실행 시키면 ID3DXFont 로 생성한 폰트를 쓰는데, 윈도우 사이즈를 변경했어도 그 상태가 유지 되던데, 어떻게 구현한 것인지 궁금합니다.. 제가 렌더링시 뿌려주는 폰트는 윈도우 사이즈에 따라서 크기가 변경이 되거든요. 때문에 화면은 크게 했을 때는 글자가 이상하게 보이네요.. ㅠㅠ 윈도우 사이즈를 조절해도 폰트에 영향을 주지 않게 하려면 어떻게 해야하는지 알려주세요. |
|
||||||||
| 디바이스 생성할때 백버퍼 크기가 생성
되는데... (예를 들어 백버퍼는 1024*768 ) 윈도우 크기가 변경되어서 확대 되거나 축소 되는겁니다. (윈도우 사이즈가 변한다면? D3D 는 백버퍼의 크기비율(?)로 확대되거나 축소 되겠죠 ) 백버퍼의 크기를 윈도우 사이즈로 다시 리셋 해주시거나.. D3DPRESENT_PARAMETERS m_d3dpp; m_d3dpp.BackBufferWidth = rt.Width(); m_d3dpp.BackBufferHeight = rt.Height(); m_pD3DDevice->Reset(&m_d3dpp); 화면 전체를 백버퍼로 하고.. Present 로 적절히.. 플리핑? 해줘도 되겠죠... 리셋 하기전에 .. ID3DXSprite 같은것들은 OnLostDevice 해줘야할겁니다.. |
|
||||||||
| 그런데 Reset()을 하면 디바이스 생성이 실패를 하거든요..? 물론 이 문제에 대해서는 메모리 누수라는 것에 있는 것으로 알구요... 헌데, Reset()을 호출할 때 View와 MainFrame에서 같이 해줘야 하나요...? 아니면, View나 MainFrame의 어느쪽이든 상관없이 한 곳만 해주면 되나요..? 실제로 눈에 보이는 부분은 View부분에서 처리를 해주기 때문에 View에서 Reset()을 호출하면 될 것 같은데요... 이 부분에 대해서도 좀 알려주세요... |
|
||||||||
| 컥... devpia
에는 잘안들어오는데.. 답글을 다니깐 메일이 오는군요..^^; 그런데 Reset()을 하면 디바이스 생성이 실패를 하거든요..? -> 리셋을 하기전 디바이스를 사용하는 오브젝트들은 삭제 시켜줘야합니다. 물론 이 문제에 대해서는 메모리 누수라는 것에 있는 것으로 알구요... -> 사실 저도 자세히는 모르지만. 위에 오브젝트들을 삭제하지 않아서 인것 같습니다. 디바이스를 사용하는것들은 리셋하기전에 처리(?)를 해줘야합니다.. 말그대로... 디바이스에 의존적인 것들인데.. 디바이스를 리셋 하니.. 다른것들도 리셋 해주는거라고 할까요? 참고로.. 디바이스 오브젝트들중.. D3DPOOL_DEFAULT 인가..? 디폴트로..(그래픽카드 메모리에) 생성한것들은.. 지웠다가 다시생성해야하는걸로 알고있습니다. D3DPOOL_MANAGED 로 하면.. 복사본이 시스템 메모리에 존재해서 자동으로.. DX 수준에서 관리해주는걸로 알고있습니다. 헌데, Reset()을 호출할 때 View와 MainFrame에서 같이 해줘야 하나요...? -> Dx 초기화 할때 넘겨준 핸들의 윈도우만.. 하면 됩니다. 즉.. 만약 뷰에서.. D3Dapp->Initialize(this->GetSafeHwnd(),해상도...어쩌고..저쩌고..) 이런식으로 DX 를 초기화 해줬다면... 뷰 의.. OnSize 에서.. 리셋 해주시면 되겠죠.. 참고로.. 급한일이 아니시라면.. 찬찬히.. DX_SDK 를 먼저 보시는게 좋을것 같습니다.^^; DX 프레임워크를 한번 쭈욱 보면.. 왠만한것들은.. 다 처리되어있습니다.^^; DX 도큐먼트 + SDK 샘플 + 개발관련 사이트들 + 구글검색 조합으로 공부하시면.. 막히는것들은 거의 해결 되실거에요.. |






