문제

그래픽 프로그래머에게 멍청한 질문이 있습니다.

일부 게임(Crysis 등)이 어떻게 DirectX 9(XP)와 10(Vista)을 모두 지원할 수 있는지 궁금합니다.

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

아마도 두 개의 코드 기반이 있을 수 있습니다. 하나는 DX9로 작성되고 다른 하나는 DX10으로 작성됩니까?하지만 그건 과한 행동이 아닌가?

도움이 되었습니까?

해결책

두 개의 렌더링 파이프라인이 있는데, 하나는 DX9 호출을 사용하고 다른 하나는 DX10 호출을 사용합니다.API는 호환되지 않지만 대부분의 게임 엔진은 어느 쪽에도 재사용할 수 있습니다.다양한 렌더링 파이프라인이 어떻게 수행되는지에 대한 오픈 소스 예제를 원한다면 OpenGL, DX9 및 (곧)DX10 렌더링을 지원하는 Ogre3d와 같은 것을 살펴보십시오.

다른 팁

게임의 렌더링 레이어는 일반적으로 전체 애플리케이션에서 상당히 잘 격리되고 추상화된 부분입니다.게임 엔진에 관한 한, 각 프레임은 단순히 개념적 개체(나무, 캐릭터 등) 목록을 작성하는 것입니다.게임 엔진이 특정 개체를 렌더링하기로 선택한 경우 실제로 해당 의도를 DX 드로우 콜로 변환하는 방법은 렌더링 레이어에 달려 있습니다.DX10 렌더링은 DX9 레이어에 대한 다양한 그리기 호출 세트를 생성하지만 개념적으로는 여전히 '이 트리 렌더링'이라는 동일한 작업을 수행하고 있습니다.

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

응용 프로그램 설정은 좀 더 까다롭습니다. 시스템에 DX10이 지원되는지 여부를 물어보고 그렇지 않으면 DX9로 적절하게 폴백해야 하기 때문입니다. 그러나 이는 응용 프로그램 설정을 위한 표준 요금입니다(게임에서 지원되는 것과 같은 방식). 해상도, 주사율, 입력 장치 등을 선택하세요.)

그들은 추상화 계층을 갖고 있고 그에 맞춰 개발할 가능성이 높습니다.런타임 시 DX9 또는 DX10 래핑 콘크리트 엔진을 인스턴스화합니다.

나는 그들의 추상화가 DirectX 레이어에 매우 가깝게 위치하고 단순히 DX10 기능의 합리적인 수동 구현을 DX9에 제공하거나 DX10에서 실행될 때 DX9 로직을 향상시키는 것을 상상합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top