DirectInput 프로그래밍의 힌트 및 툴 [목차열람] [주소복사] [슬롯비우기] |
Microsoft DirectX 9.0 |
이 주제에서는, 이하의 특수한 프로그래밍의 힌트를 기재한다.
DirectInput8Create ,IDirectInput8::Initialize ,IDirectInputDevice8::Initialize ,IDirectInputEffect::Initialize 의 각 메서드에서는, Microsoft® DirectInput® 의 버전 번호를 건네줄 필요가 있다. 이 파라미터는, DirectInput 서브 시스템이 어느 버전의 Microsoft DirectX® 를 에뮬레이트 하는지를 지정한다.
최신 버전의 DirectInput 용으로 설계된 애플리케이션은, Dinput.h 로 정의되고 있는 DIRECTINPUT_VERSION 값을 건네줄 필요가 있다.
이전의 버전으로 실행하도록(듯이) 설계된 애플리케이션에서는, 설계 대상의 DirectInput 의 버전에 대응한 값, 즉 상위 바이트에 메인 버전 번호를 매긴 값을 건네줄 필요가 있다. 예를 들어, DirectInput 3.0 상에서 동작하도록(듯이) 설계된 애플리케이션은, 0x0300 를 건네줄 필요가 있다.
Dinput.h 헤더 파일을 인클루드 하기 전에, DIRECTINPUT_VERSION 를 0x0300 로 정의 하면, 이 헤더 파일은 DirectInput 3.0 으로 호환성을 가지는 구조체 정의를 생성한다.
Dinput.h 헤더 파일을 인클루드 하기 전에 DIRECTINPUT_VERSION 를 정의하지 않으면 Dinput.h 헤더 파일은 DirectInput 의 현행 버전과 호환성이 있는 구조체 정의를 생성한다. 그러나, DirectX 3 으로 호환성이 있는 구조체도, 그 이름에 "_DX3" 를 붙이면 사용할 수 있다. 예를 들어, DirectX 3 으로 호환성이 있는 DIDEVCAPS 구조체는 DIDEVCAPS_DX3 와 같은 이름을 붙일 수 있다.
또, DirectInput 인터페이스와 DirectInputDevice 인터페이스의 적절한 버전을 사용할 필요가 있다. DirectX 7.0 보다 전의 버전의 DirectX 에서는,IDirectInput 와IDirectInputDevice 또는 IDirectInputDevice2 의 어느쪽이든을 사용할 필요가 있다. 후자는 DirectX 5.0 이후의 버전으로 이용 가능하다.
Microsoft Windows® 2000 상에서 실행하는 DirectInput 로 키보드 또는 마우스를 사용하는 경우, 디버그 세션중에 코드를 실행 하면, 단기간의 지연이 발생하는 경우가 있다. 이 현상은 debug 모드에서만 발생한다. 실제의 애플리케이션에서는 발생하지 않는다. 다만, Emulation 값을 다음의 레지스트리 키에 추가하는 것으로, debug 모드에서도 이 지연이 발생하지 않게 할 수 있다.
HKEY_LOCAL_MACHINE SOFTWARE Microsoft DirectInput
이름 | 타입 | 데이터 |
---|---|---|
Emulation | DWORD | 0x08 (키보드용) 0x10 (마우스용) 0x18 (마우스 및 키보드용) |
차의 순서에 따라, DirectX 컨트롤 패널로부터, 열거를 사용하도록(듯이) 바꿀 수도 있다.
이러한 값을 설정 하면, DirectInput 가 데이터를 돌려주는 방법을 변경하는 일 없이, 지연에 영향을 받지 않는 에뮬레이션 모드를 기동할 수 있다. 이러한 설정은 글로벌이며, 모든 DirectInput 클라이언트에 영향을 준다. 퍼포먼스가 향상하는 것은, 디버그 바이너리를 사용하는 경우뿐이어, 그 대상이 되는 것은 foreground의 배타 장치 액세스를 사용하는 애플리케이션뿐이다. 장치의 열거중은, Windows 키의 마스킹 등, 일부의 기능은 이용할 수 없기 때문에, 열거는 디버그의 목적에만 추천 한다.
DirectInput 8.0 이후를 사용하는 애플리케이션 마다, DirectInput 는 다음의 레지스트리에 키를 생성 한다.
HKEY_CURRENT_USER SOFTWARE Microsoft DirectInput
이것에 의해, 독립한 하드웨어 vender (IHV)는 특정의 애플리케이션으로 독자적인 장치 맵핑을 무효로 할 수 있다. 그러나, 각 빌드는, 디버그중에 타임 스탬프와 파일 사이즈가 포함된 새로운 키를 생성한다. 레지스트리로 복수의 키가 생성되지 않게 하려면 , 바이너리값 AppldFlag 를 사용한다.
다음의 표는,AppldFlag 로 사용 가능한 값을 나타내고 있다.
1 | 키를 생성할 경우에 타임 스탬프는 무시된다. |
2 | 키를 생성할 경우에 파일 사이즈는 무시된다. |
3 | 키를 생성할 경우에 타임 스탬프와 파일 사이즈의 양쪽 모두가 무시된다. |
AppldFlag 를 3 으로 설정 하면, 파일명이 같은 애플리케이션의 모든 빌드는, 같은 키를 사용한다.
Force Editor 에는, 다음과 같은 특징이 있다.
Force Editor 애플리케이션을 사용하면 force feedback 이펙트를 디자인하거나 그 이펙트를 단독으로 테스트하거나 몇개의 이펙트를 조합해 테스트하거나 할 수 있다. 이펙트는, 파일에 보존해, DirectInput 애플리케이션에 로드 시킬 수가 있다.
실행 가능 파일 :(SDK 루트) \Bin\Dxutils\Fedit.exe
Force Editor 에는 전용의 문서가 첨부하고 있다. Fedit.exe 를 기동해, F1 키를 누르면 on-line help를 참조할 수 있다. 다음의 파일을 더블 클릭 해, on-line help를 직접 기동할 수도 있다.
(SDK 루트) \Bin\Dxutils\Fedit.chm