managed DirectX 사용중에 질문드립니다.

2D, 3D, 다각형, 픽셀 등 게임의 그래픽 프로그래밍에 관한 포럼입니다.

Moderator: 류광

Locked
비회원

managed DirectX 사용중에 질문드립니다.

Post by 비회원 »

Code: Select all

public void CreateDevice(Form mainForm)
        {
            if(device != null)
            {
                device.Dispose();
                device = null;
            }

            PresentParameters presentParams = new PresentParameters();
            presentParams.AutoDepthStencilFormat = DepthFormat.D16;
            presentParams.Windowed = true;
            presentParams.SwapEffect = SwapEffect.Discard;
            presentParams.PresentationInterval = PresentInterval.Immediate;
            presentParams.EnableAutoDepthStencil = true;

            device = new Device(0, DeviceType.Hardware, mainWindow, CreateFlags.SoftwareVertexProcessing, presentParams);

            device.DeviceLost += new EventHandler(OnDeviceLost);
            device.DeviceReset += new EventHandler(OnDeviceReset);

            ready = true;
        }
이렇게 디바이스를 생성했습니다. DeviceLost이벤트와 Reset이벤트를 델리게이트로 연결해 놨는데, Lost->Reset이 단순히 메인 폼을 Resize할 때도 발생하네요;;

D3D에서 lost & Reset이 필요한 시점은 사용자가 바탕화면의 비트수를 바꿨을 경우등 뭔가 시스템에 변화를 주었을 때 일어나는 것 아닌가요? Resize할 때 저 이벤트가 발생하니 좀 황당하네요;;

Reset시에는 Device에서 생성된 리소스를 전부 재할당 해주는데;; 리사이즈 할 때마다 재할당되면;;;

답변 부탁드립니다.
비회원

Re: managed DirectX 사용중에 질문드립니다.

Post by 비회원 »

비회원 wrote:

Code: Select all

public void CreateDevice(Form mainForm)
        {
            if(device != null)
            {
                device.Dispose();
                device = null;
            }

            PresentParameters presentParams = new PresentParameters();
            presentParams.AutoDepthStencilFormat = DepthFormat.D16;
            presentParams.Windowed = true;
            presentParams.SwapEffect = SwapEffect.Discard;
            presentParams.PresentationInterval = PresentInterval.Immediate;
            presentParams.EnableAutoDepthStencil = true;

            device = new Device(0, DeviceType.Hardware, mainWindow, CreateFlags.SoftwareVertexProcessing, presentParams);

            device.DeviceLost += new EventHandler(OnDeviceLost);
            device.DeviceReset += new EventHandler(OnDeviceReset);

            ready = true;
        }
이렇게 디바이스를 생성했습니다. DeviceLost이벤트와 Reset이벤트를 델리게이트로 연결해 놨는데, Lost->Reset이 단순히 메인 폼을 Resize할 때도 발생하네요;;

D3D에서 lost & Reset이 필요한 시점은 사용자가 바탕화면의 비트수를 바꿨을 경우등 뭔가 시스템에 변화를 주었을 때 일어나는 것 아닌가요? Resize할 때 저 이벤트가 발생하니 좀 황당하네요;;

Reset시에는 Device에서 생성된 리소스를 전부 재할당 해주는데;; 리사이즈 할 때마다 재할당되면;;;

답변 부탁드립니다.
원래 그렇게 처리 됩니다...

윈도우 사이즈가 바뀔때에도, 백버퍼사이즈를 유지하고 싶으신가요.....그렇다면
lost->reset과정은 필요없으니 WM_SIZE쪽에서 리셋호출부분을 제거하면 됩니다만...
그러나, 윈도우 사이즈가 바뀌면 거기에 맞춰서 백버퍼사이즈를 조정하는게 보통이져....
글케 되면, 디바이스리셋이 필요하며, 셋팅시에 알맞는 Width,Height를 넘겨줍니다.......

그리구, Device에서 생성된 리소스를 재할당하신다 하셨는데....... D3DPOOL_MANAGED로
생성하는 리소스라면 Reset호출에 리소스 생성이 들어갈 이유가 없죠...
D3DPOOL_DEFAULT로 생성한 것들만 재생성해주면 됩니다.....
Locked