2008-09-15 2 views
3

모든 그래픽 프로그래머에게 까다로운 질문이 있습니다.DirectX 9 및 10을 모두 지원하는 응용 프로그램

일부 게임 (예 : Crysis)이 DirectX 9 (XP)와 10 (Vista)을 어떻게 지원하는지 궁금합니다.

지금까지 내가 DX10 앱을 작성하면 Vista에서만 실행할 수 있다는 것을 이해합니다.

아마 그들은 2 개의 코드베이스를 가지고있을 것입니다 - 하나는 DX9로 쓰여지고 다른 하나는 DX10으로 쓰여졌습니까? 하지만 과잉은 아닌가?

답변

5

두 개의 렌더링 파이프 라인이 있습니다. 하나는 DX9 호출을 사용하고 다른 하나는 DX10 호출을 사용합니다. API는 호환되지 않지만 대부분의 게임 엔진은 둘 중 하나에서 다시 사용할 수 있습니다. 다른 렌더링 파이프 라인을 수행하는 방법에 대한 몇 가지 오픈 소스 예제가 필요하면 OpenGL, DX9 및 (곧) DX10 렌더링을 지원하는 Ogre3d와 같은 것을보십시오.

1

추상화 계층을 가지고 있으며 그로 인해 발생할 수 있습니다. 런타임시 DX9 또는 DX10 랩핑 구체 엔진을 인스턴스화합니다.

추상화가 DirectX 레이어에 매우 가까이 위치하고 DX10에서 손쉽게 DX10 기능을 수동으로 구현하거나 DX10에서 DX9 로직을 향상시킬 수 있다고 상상해보십시오.

2

게임 렌더링 레이어는 일반적으로 전체 애플리케이션에서 상당히 잘 분리/추상화 된 부분입니다. 게임 엔진에 관한 한, 각 프레임은 단순히 개념적 개체 (나무, 문자 등)의 목록을 작성하는 것입니다. 게임 엔진이 특정 객체를 렌더링하도록 선택한 경우 렌더링 레이어에 따라 해당 인 텐트를 DX 그리기 호출로 실제로 변환하는 방법이 다릅니다. DX10 렌더링은 DX9 레이어에 대한 다른 드로 콜 호출을 생성하지만 개념 상 그들은 여전히이 트리를 렌더링하는 동일한 액션을 수행합니다.

렌더링 레이어에서 정보를 얻지 못하는 경우가 드물기 때문에 렌더링이 멋지게 추상화됩니다. '이 트리 렌더링'작업이 수행되면 게임 엔진은 렌더링이 올바른 것으로 가정합니다. 99.9 %의 정보가 엔진에서 그래픽 시스템으로 이동하기 때문에 DX9/DX10 렌더링 호출에서 다른 잠재적 인 결과를 처리 할 필요가 거의 없으며 돌아 오는 0.1 %는 두 API간에 동일한 형식을 취할 가능성이 높습니다.

DX10이 지원되고 정상적으로 DX9로 돌아갈 지 여부를 시스템에 문의해야하기 때문에 응용 프로그램 설치가 조금 복잡합니다. 그러나 이것은 응용 프로그램 설정에 대한 표준 요금입니다 (같은 방식으로 게임은 해상도, 주사율, 입력 장치 등을 선택해야합니다.

관련 문제