2010-02-14 2 views
1

SlimDX 기반 게임 편집기가 있습니다. 나는 기본적으로 장치의 모든 상태를 제어하고 잃어버린 장치를 처리하며 생성하는 등의 DeviceContext 인스턴스를 가지고 있습니다. 편집기는 항상 렌더링이 수행되는 뷰포트를 열지 않습니다. 대신 다양한 에디터, 씬 에디터, 텍스처 뷰어/에디터, 애니메이션 에디터, 머티리얼 에디터 등을 포함합니다.장치를 처음 만들 때 표면을 파괴하려면 어떻게해야합니까? ...?

이제 사용자가 씬 에디터 (4 개의 뷰를 패널로 렌더링 한 대화 상자)를 엽니 다. 편집기가 인스턴스화되면 DeviceContext에서 참조를 가져오고 'null'이 발견되면 context.CreateDevice (Control ctrl)를 호출합니다. 이 방법은 장치가 손실, 누락 또는 폐기되지 않도록합니다. 그렇다면, 그것은 무슨 일이 일어나고 있는지에 따라 처리합니다. 이제 편집기는 장치를 만들거나 재설정 할 때 사용할 컨트롤 (Panel) 인 'CreateDevice'메서드를 보냅니다.이 컨트롤은 TopLeft 뷰를 나타내는 패널입니다. 다음으로 컨텍스트에서 '장치'참조를 가져온 다음 스왑 체인보기 (다른 세 개의보기 포트 패널)를 만듭니다.

이제 사용자가 ModelViewer 대화 상자를 엽니 다. DeviceContext.CreateDevice (ModelViewPanel)를 호출하고 DeviceContext에서 Device 참조를 가져 오는 경우에도 장치 인스턴스가 'null'이 아닌지 확인합니다. Device가 null가 아닌 경우, View (모델이 렌더링되는)의 스왑 체인을 작성합니다.

우리는 4 개의 뷰 (TopLeft 패널은 Device 개체를 만드는 데 사용되는 컨트롤 임)와 스왑 체인으로 만든 3 개의 다른 Panel 개체가있는 장면 편집기를 제공합니다. 다음으로 사용자가 열어 본 ModelViewer가 있습니다. 이 패널은 스왑 체인으로 만들어집니다.

내 질문 : 처음에는 장치 인스턴스를 만든 컨트롤이 있기 때문에 사용자가 장면 편집기를 닫으면 어떻게해야합니까? ModelViewer의 프리젠 테이션 매개 변수를 사용하여 Devi를 호출합니다. ce.Reset()하거나 'new'Device()를 만드시겠습니까?

이해가되지 않을 경우 다시 질문 해주십시오. 감사합니다.

답변

2

제 질문은 장면 편집기에 처음 장치 인스턴스를 만든 컨트롤이 있기 때문에 사용자가 장면 편집기를 닫으면 어떻게해야합니까? ModelViewer의 프리젠 테이션 매개 변수를 사용하여 Devi를 호출합니다. ce.Reset() 또는 'new'Device()를 만드시겠습니까? 사용자가 장치를 만들어 컨트롤을 파괴하는 경우

기본적으로, 새 컨트롤 (창 핸들을)를 기반으로하지 새로운 장치를 확인해야합니다.

이미 스왑 체인을 사용하고 있으므로 매우 다른 좋은 옵션은 (보이지 않는) 1 픽셀 컨트롤을 만들고이를 사용하여 장치를 만드는 것입니다. 그런 다음 스왑 체인을 사용하여 모든 개별 서페이스를 만듭니다.

이점은 물론 HWND (1 픽셀 컨트롤의 핸들)를 응용 프로그램 수명 동안 유지할 수 있다는 점입니다. 사용자가 장치를 파손하는 것에 대해 걱정할 필요가 없습니다.

+0

나는 이것에 대해 생각해 보았습니다. 나는 단지 코드 구조를 해킹하고 싶지 않았다.모든 렌더링은 게임 엔진 그래픽 프레임 워크를 통해 추상적 인 것이므로 가능한 옵션은 아니지만 여전히 가능성이 있습니다. –

+0

이제 장치를 '다시 생성'합니다. 가장 좋은 옵션과 가장 깨끗한 것 같습니다. 또 다른 아이디어는 작은 50 x 50 캔버스를 만들어 로고나 무언가를 렌더링하는 것입니다. 그리고 이것을 나의 초기 '장치'제작자 캔버스에 사용하십시오. 추신 - 여기에 이중 게시 죄송합니다 :/... 그것은 내가 편집을 허용하지 않을 것이다 :? –

0

디자인에있어 핵심적인 문제는 동일한 것을 담당하는 두 가지 클래스가 있다는 것입니다. 즉, 장치를 만드는 것입니다.

대신에 리팩터링하여 해당 책임을 별도의 클래스에 부여하고 양식에 해당 클래스에 대한 참조를 제공하십시오.

+0

당신의 설명은 내가 DeviceContext에 대한 나의 질문에서 준 정확한 설명이다. DeviceContext는 Device와 관련된 모든 것을 처리합니다. 생성, 재설정, 삭제 등입니다. 또한 사용중인 DirectX 리소스를 처리하기위한 작업 시스템을 내부적으로 구현합니다. –

+0

사실이지만 개별 양식에 많은 기기 관리 코드가 표시됩니다. 나는 주로 저장소처럼 들리는 것보다 더 적극적으로 만들려고 시도했다. – kyoryu

관련 문제