Direct3D 9로 변환
Microsoft Direct3D 9에서 다음과 같은 기능이 변경되었습니다. 이러한 기능을 사용하는 경우 아래 나열된 변경 내용을 참조하여 애플리케이션을 Direct3D 9로 이식하는 데 도움이 됩니다.
- BaseVertexIndex 변경 내용
- CreateImageSurface 변경 내용
- D3DENUM_NO_WHQL_LEVEL 변경 내용
- 리소스 변경 내용 만들기
- EnumAdapterModes 변경 내용
- 가져오기/SetStreamSource_Changes
- 다중 샘플링 품질 변경
- ResourceManagerDiscardBytes 변경 내용
- SetSoftwareVertexProcessing 변경 내용
- 텍스처 샘플러 변경 내용
- 꼭짓점 선언 변경 내용
- 간격,_and_SwapEffects_Changes
BaseVertexIndex 변경 내용
DirectX 8.x에서 IDirect3DDevice8::SetIndices에는 인덱스 버퍼에 대한 포인터와 꼭짓점 버퍼의 시작 위치에 대한 BaseVertexIndex가 필요했습니다. 다른 개체를 꼭짓점 버퍼로 일괄 처리하는 애플리케이션은 IDirect3DDevice8::D rawIndexedPrimitive를 호출하기 전에 인덱스 버퍼를 전환하거나 IDirect3DDevice8::SetIndices를 호출해야 했습니다.
Direct3D 9에서 꼭짓점 버퍼 BaseVertexIndex의 시작 위치가 IDirect3DDevice9::D rawIndexedPrimitive로 이동되었으며 해당 데이터 형식이 DWORD에서 INT로 변경되었습니다.
HRESULT IDirect3DDevice9::DrawIndexedPrimitive(
D3DPRIMITIVETYPE PrimType,
INT BaseVertexIndex,
UINT minIndex,
UINT NumVertices,
UINT startIndex,
UINT primCount);
HRESULT SetIndices(IDirect3DIndexBuffer9* pIndexData);
CreateImageSurface 변경 내용
IDirect3DDevice8::CreateImageSurface의 이름이 CreateOffscreenPlainSurface로 바뀌었습니다. D3DPOOL 형식을 사용하는 추가 매개 변수가 추가되었습니다. D3DPOOL_SCRATCH IDirect3DDevice8::CreateImageSurface에서 만든 표면과 동일한 특성을 가진 표면을 반환합니다. D3DPOOL_DEFAULT StretchRect 및 ColorFill과 함께 사용하기에 적합한 풀입니다.
D3DENUM_NO_WHQL_LEVEL 변경 내용
응답이 비교적 오래 걸리기 때문에 애플리케이션은 이제 Microsoft WHQL(Windows Hardware Quality Labs)을 명시적으로 요청해야 합니다. D3DENUM_NO_WHQL_LEVEL 제거되고 D3DENUM_WHQL_LEVEL 추가되었습니다.
리소스 변경 내용 만들기
핸들이 여러 메서드에 추가되었으며 NULL로 설정해야 합니다. 영향을 받는 메서드는 다음과 같습니다.
- CreateTexture
- CreateVolumeTexture
- CreateCubeTexture
- CreateVertexBuffer
- CreateIndexBuffer
- CreateRenderTarget
- CreateDepthStencilSurface
- CreateOffscreenPlainSurface
EnumAdapterModes 변경 내용
EnumAdapterModes는 이제 D3DFORMAT를 사용합니다.
HRESULT IDirect3D9::EnumAdapterModes(
UINT Adapter,
D3DFORMAT Format,
UINT Mode,
D3DDISPLAYMODE *pMode);
형식은 확장된 디스플레이 모드 집합을 지원합니다. 애플리케이션이 제공될 때 발명되지 않은 형식을 열거하지 않도록 애플리케이션을 보호하려면 애플리케이션이 Direct3D에 열거해야 하는 디스플레이 모드의 형식을 알려야 합니다. 결과 디스플레이 모드의 배열은 너비, 높이 및 새로 고침 속도에 따라 다릅니다.
애플리케이션은 픽셀 형식을 지정하고 열거형은 형식과 정확히 일치하는 표시 모드로 제한됩니다. 다음은 허용되는 형식 목록입니다.
- D3DFMT_A1R5G5B5
- D3DFMT_A2B10G10R10
- D3DFMT_A8R8G8B8
- D3DFMT_R5G6B5
- D3DFMT_X1R5G5B5
- D3DFMT_X8R8G8B8
열거형은 동일한 형식의 알파 및 비알파 버전에 해당합니다. 반환된 형식은 항상 애플리케이션에서 제공하는 것과 동일한 형식으로 채워집니다.
이 메서드는 565 및 555를 동등한 것으로 처리하고 Format에서 올바른 버전을 반환합니다. 차이점은 애플리케이션이 백 버퍼를 잠그고 이를 수행하기 위해 애플리케이션이 설정해야 하는 명시적 플래그가 있는 경우에만 발생합니다.
Get/SetStreamSource 변경 내용
GetStreamSource 및 SetStreamSource 메서드에 하나의 매개 변수가 추가되었습니다. 오프셋은 스트림의 시작과 꼭짓점 데이터의 시작 사이의 바이트 수입니다. 바이트로 측정됩니다. 이렇게 하면 파이프라인이 스트림 오프셋을 지원할 수 있습니다. 디바이스가 스트림 오프셋을 지원하는지 확인하려면 D3DDEVCAPS2_STREAMOFFSET.
HRESULT GetStreamSource(
UINT StreamNumber,
IDirect3DVertexBuffer9 **ppStreamData,
UINT *pOffsetInBytes,
UINT *pStride);
다중 샘플링 품질 변경
이전에는 D3DMULTISAMPLE_TYPE 열거형만 있었습니다. Direct3D 9는 이 열거형을 유지하고 열거형의 각 요소에 대한 품질 수준의 아이디어를 추가합니다. 품질 수준은 마스킹 가능한 샘플(D3DRS_MULTISAMPLEMASK 의미)의 수를 표시하여 시각적 품질과 성능 간의 절편을 나타냅니다.
애플리케이션은 필요한 마스킹 가능한 샘플 수를 선택한 다음 pQualityLevels를 참조해야 합니다. 0이 아닌 경우 이 값은 애플리케이션이 MultiSampleQuality를 통해 다양한 생성 함수에 전달할 수 있는 품질 수준 수를 나타냅니다. 드라이버는 모든 다중 샘플링 구성표를 D3DMULTISAMPLE_NONMASKABLE 품질 수준으로 노출하므로 애플리케이션이 샘플을 마스킹할 필요가 없는 경우 이 한 형식을 통해 사용 가능한 모든 다중 샘플링 체계를 열거할 수 있습니다.
D3DPRASTERCAPS_STRETCHBLTMULTISAMPLE caps 비트가 사용 중지되었습니다. 이 비트는 다중 샘플링 메서드가 쓰기 마스크를 지원하지 않으며 BeginScene 과 EndScene 간에 켜고 끌 수 없음을 의미하는 데 사용됩니다. 이러한 마스크할 수 없는 메서드는 이제 D3DMULTISAMPLE_NONMASKABLE 통해 노출됩니다.
HRESULT CheckDeviceMultiSampleType(
UINT Adapter,
D3DDEVTYPE DeviceType,
D3DFORMAT SurfaceFormat,
BOOL Windowed,
D3DMULTISAMPLE_TYPE MultiSampleType,
DWORD * pQualityLevels);
마스킹 가능한 샘플 수마다 다른 최대값이 있습니다. 예를 들어 D3DMULTISAMPLE_4_SAMPLES 세 가지 수준의 품질을 가질 수 있지만 D3DMULTISAMPLE_2_SAMPLES 하나만 있을 수 있습니다. 각 마스킹 가능한 샘플 수에 대해 최대 8가지 수준의 품질이 있습니다(드라이버는 더 이상 표현할 수 없음). 품질 범위는 0에서 (*pQualityLevels - 1)입니다.
ResourceManagerDiscardBytes 변경 내용
ResourceManagerDiscardBytes가 IDirect3DDevice9::EvictManagedResources로 대체되었습니다. Direct3D 및 드라이버 리소스 모두의 모든 리소스를 제거할 수 있습니다.
이제 비디오 메모리가 부족하여 리소스(관리 또는 비관리 여부)를 만들지 못하는 경우 리소스 관리자를 참조합니다. 관리자에게 만들기에 성공할 수 있는 충분한 리소스를 확보하라는 메시지가 자동으로 표시됩니다. DirectX 8.0에서는 자동화된 프로세스가 아니었습니다.
SetSoftwareVertexProcessing 변경 내용
애플리케이션은 소프트웨어 및 하드웨어 꼭짓점 처리를 사용하는 혼합 모드 디바이스를 만들 수 있습니다.
DirectX 8.x에서 두 꼭짓점 처리 모드 간에 전환하려면 IDirect3DDevice8::SetRenderState를 호출합니다. 이는 상태 블록으로 인한 문제를 완화하기 위해 SetSoftwareVertexProcessing 으로 대체되었습니다. 이 새 메서드는 상태 블록에 의해 기록되지 않습니다.
텍스처 샘플러 변경 내용
Direct3D 9는 픽셀 셰이더 2_0 모델을 사용하여 한 패스에서 최대 16개의 텍스처 표면을 지원합니다. 그러나 텍스처 좌표 수는 8개로 제한됩니다. 텍스처 단계 상태는 표면, 좌표 집합, 꼭짓점 처리 및 픽셀 처리와 연결됩니다. 컴파일 시간에 이러한 차이점을 관리하기 위해 SetTextureStageState 는 다음 두 가지 방법으로 나뉘어졌습니다.
- IDirect3DDevice9::SetTextureStageState는 래핑 모드 및 텍스처 좌표 생성과 같은 텍스처 좌표 상태에 계속 사용됩니다.
- SetSamplerState 가 추가되었으며 이제 필터링, 타일링, 클램핑, MIPLOD 등에 사용됩니다. 최대 16개의 샘플러에서 작동합니다.
SetTextureStageState 변경 내용
IDirect3DDevice9::SetTextureStageState는 이제 다음 상태를 설정합니다.
함수 꼭짓점 처리 상태를 수정했습니다. 이 상태는 텍스처 좌표 D3DTSS_TEXTURETRANSFORMFLAGS 및 D3DTSS_TEXCOORDINDEX 조작을 제어합니다. 8개의 텍스처 좌표가 항상 지원되므로 각각 최대 8개를 설정할 수 있습니다. D3DTSS_TEXCOORDINDEX 고정 함수 꼭짓점 처리 상태입니다. 프로그래밍 가능한 꼭짓점 셰이더를 사용하는 경우 이 상태는 무시됩니다.
함수 픽셀 셰이더 상태(레거시 TextureStageState)가 수정되었습니다.
- D3DTSS_ALPHAARG0
- D3DTSS_ALPHAARG1
- D3DTSS_ALPHAARG2
- D3DTSS_ALPHAOP
- D3DTSS_BUMPENVLOFFSET
- D3DTSS_BUMPENVLSCALE
- D3DTSS_BUMPENVMAT00
- D3DTSS_BUMPENVMAT01
- D3DTSS_BUMPENVMAT10
- D3DTSS_BUMPENVMAT11
- D3DTSS_COLORARG0
- D3DTSS_COLORARG1
- D3DTSS_COLORARG2
- D3DTSS_COLOROP
- D3DTSS_RESULTARG
설정할 수 있는 고정 함수 픽셀 셰이더 상태의 수는 MaxTextureBlendStages가 나타내는 수보다 작거나 같습니다.
애플리케이션에 사용할 수 있는 텍스처 샘플러의 수는 다음 표에 표시된 대로 픽셀 셰이더 버전에 따라 결정됩니다.
속성 | Number |
---|---|
ps_1_3 ps_1_1 | 4개 텍스처 샘플러 |
ps_1_4 | 6개 텍스처 샘플러 |
ps_2_0 | 텍스처 샘플러 16개 |
고정 함수 파이프라인 | MaxTextureBlendStages/MaxSimultaneousTextures 텍스처 샘플러 |
Direct3D 9에서 변위 매핑을 지원하는 디바이스는 테셀레이터 단위의 변위 맵을 샘플링하는 추가 샘플러(D3DDMAPSAMPLER)를 지원합니다.
SetSamplerState 변경 내용
IDirect3DDevice9::SetSamplerState는 샘플러 상태를 설정합니다(테셀레이터 단위에서 샘플 변위 맵에 사용되는 상태 포함). DirectX 8.x에서 포팅할 때 컴파일 시간 오류 검색을 사용하도록 D3DSAMP_ 접두사로 이름이 변경되었습니다. 상태는 다음과 같습니다.
- D3DSAMP_ADDRESSU
- D3DSAMP_ADDRESSV
- D3DSAMP_ADDRESSW
- D3DSAMP_BORDERCOLOR
- D3DSAMP_MAGFILTER
- D3DSAMP_MAXANISOTROPY
- D3DSAMP_MAXMIPLEVEL
- D3DSAMP_MINFILTER
- D3DSAMP_MIPFILTER
- D3DSAMP_MIPMAPLODBIAS
꼭짓점 선언 변경 내용
이제 꼭짓점 선언이 꼭짓점 셰이더 만들기에서 분리됩니다. 이제 꼭짓점 선언은 COM(구성 요소 개체 모델) 인터페이스를 사용합니다.
DirectX 8.x의 경우 꼭짓점 선언은 꼭짓점 셰이더에 연결됩니다.
- 고정 함수 파이프라인의 경우 꼭짓점 버퍼의 FVF(유연한 꼭짓점 형식) 코드를 사용하여 SetVertexShader 를 호출합니다.
- 꼭짓점 셰이더의 경우 이전에 만든 꼭짓점 셰이더에 대한 핸들을 사용하여 IDirect3DDevice9::SetVertexShader를 호출합니다. 셰이더에는 꼭짓점 선언이 포함됩니다.
Direct3D 9의 경우 꼭짓점 선언은 꼭짓점 셰이더에서 분리되며 고정 함수 파이프라인 또는 셰이더와 함께 사용할 수 있습니다.
- 고정 함수 파이프라인의 경우 IDirect3DDevice9::SetVertexShader를 호출할 필요가 없습니다. 그러나 고정 함수 파이프라인으로 전환하고 이전에 꼭짓점 셰이더를 사용한 경우 IDirect3DDevice9::SetVertexShader(NULL)를 호출합니다. 이 작업이 완료되면 SetFVF 를 호출하여 FVF 코드를 선언해야 합니다.
- 꼭짓점 셰이더를 사용하는 경우 꼭짓점 셰이더 개체를 사용하여 IDirect3DDevice9::SetVertexShader를 호출합니다. 또한 IDirect3DDevice9::SetFVF를 호출하여 꼭짓점 선언을 설정합니다. FVF에서 암시적 정보를 사용합니다. SetVertexDeclaration 은 FVF로 표현할 수 없는 꼭짓점 선언을 지원하므로 IDirect3DDevice9::SetFVF 대신 호출할 수 있습니다.
간격 및 SwapEffects 변경 내용
사용자가 모니터 새로 고침 빈도, 프레젠테이션 속도 및 프런트 버퍼와 백 버퍼 드로잉을 보다 세세하게 제어할 수 있도록 몇 가지 변경이 이루어졌습니다. 다음과 같습니다.
- 하나의 스왑 효과, D3DSWAPEFFECT_COPY_VSYNC 및 하나의 프레젠테이션 속도 D3DPRESENT_RATE_UNLIMITED 제거되었습니다.
- 이름이 D3DPRESENT_PARAMETERS. PresentationIntervals에 FullScreen_PresentationInterval.
- D3DPRESENT_INTERVAL_IMMEDIATE 추가되었습니다. 즉, 프레젠테이션이 세로 동기화와 동기화되지 않습니다. DirectX 8.x에서와 같이 D3DPRESENT_INTERVAL_DEFAULT 0으로 정의되며 D3DPRESENT_INTERVAL_ONE 동일합니다. D3DPRESENT_INTERVAL_DEFAULT D3DPRESENT_PARAMETERS 0으로 초기화하는 데 편리합니다.
지원되는 모드 및 간격에 대한 자세한 설명은 D3DPRESENT를 참조하세요.
관련 항목