멀티 엘리먼트 텍스처
종래의 텍스처는 단일 요소의 텍스처에 대해 고려했다. 멀티 엘리먼트 텍스처를 사용하면 애플리케이션으로 픽셀 셰이더로부터 텍스처의 복수의 요소를 동시에 써낼 수가 있다. 이 결과, 다음의 렌더링 패스로는, 복수의 요소를 단일 요소의 텍스처로서 즉 픽셀 셰이더에의 입력으로서 사용할 수 있다. 이러한 추가 요소는 중간 결과의 일시적인 저장역이라고 생각할 수가 있어 애플리케이션은 후의 패스로 이것을 사용한다. 이 기능을 공개한 제 1 세대의 하드웨어에는, 다음과 같은 제한이 있었다.
- 모든 멀티 엘리먼트 텍스처 표면을 자동적으로 할당할 수 있다. 이 제한은, 이 표면을 인터리브 된 복수의 RGBA 채널을 가지는 새로운 타입의 표면 포맷으로서 취급하는 것에 의해 해결할 수 있다.
- 멀티 엘리먼트 텍스처의 모든 요소가 같은 비트 깊이가 되는 경우가 있다. 이 제한은, 새로운 표면 포맷의 이름으로 나타낸다.
- 멀티 엘리먼트 텍스처를 1차나 표시 가능하게 할 수 없다. 즉, 오프 스크린 전용이다. 이 제한은, 표면 포맷의 열거로 나타낸다.
- 디더 링, 알파 테스트, 포그(안개:fog), 블렌드, 래스터 처리, 마스킹은 허가되지 않다. Z 테스트 및 스텐실 테스트 이외에, 픽셀 셰이더 후의 처리는 행해지지 않는다.
- 밉맵은 사용할 수 없다. 밉체의 생성은 실패한다.
- 같은 요소를 동시에 텍스처 및 렌더링 타겟으로서 설정할 수 없다. 다만, 같은 멀티 엘리먼트 텍스처 표면이 다른 요소를 동시에 텍스처 및 렌더링 타겟으로 할 수 있다.
- anti-aliasing는 지원 하고 있지 않다.
- 텍스처로서 사용하고 있는 멀티 엘리먼트 텍스처 표면은, 필터링 할 수 없다. 이 제한은,IDirect3D9::CheckDeviceFormat 를 사용해 확인할 수 있다.
- 멀티 엘리먼트 텍스처 표면을 잠글 수 없다.
- 보통의 텍스처와 같이 각 멀티 엘리먼트 텍스처 표면을 다양한 스테이지에 할당하는 것에 의해, 복수의 멀티 엘리먼트 텍스처 표면을 동시에 사용할 수 있다.
- 멀티 엘리먼트 텍스처 표면은, 다른 텍스처 포맷과 같게, read시의 감마 2.2 로부터 감마 1.0 에의 변환을 지원 하고 있다.
- 처리에 따라서는, 출력 쓰기 마스크 (D3DRS_COLORWRITEENABLE)를 적용하지 않는 경우가 있다. 이것을 적용할 수 있는 처리은, 개별의 색쓰기 마스크를 가지고 있다. 이것은, 새로운 능력 비트로 나타낸다. 사용 가능한 개별의 색쓰기 마스크의 수는, 장치로 사용 가능한 요소의 최대수로 동일하다.
- IDirect3DDevice9::Clear 는, 렌더링 타겟으로서 설정하는 것에 의해, 멀티 엘리먼트 텍스처의 모든 요소를 클리어 한다.
다음에, 그 사용법에 대해 설명한다.
- 애플리케이션은, 멀티 엘리먼트 텍스처 포맷이 사용 가능한가 어떤가를 조사해, 이 기능이 지원 되고 있는지 확인한다.
- 애플리케이션은,IDirect3DDevice9::CreateTexture 를 호출해 이러한 표면을 생성 한다.
- 애플리케이션은,IDirect3DDevice9::SetRenderTarget 호출을 사용해, 표면을 렌더링 타겟으로서 설정한다. 픽셀 셰이더는,mov 명령을 사용해 표면에 출력한다.
- IDirect3DDevice9::SetTexture 를 호출해, 멀티 엘리먼트 텍스처 표면을 특정의 스테이지로 설정한다. 다른 텍스처와 같이, 같은 표면을 복수의 스테이지에 동시에 설정할 수 있다.
- IDirect3DDevice9::SetSamplerState 를 호출해, 샘플러가 샘플링 하는 멀티 엘리먼트 텍스처 표면의 적절한 요소 번호를 D3DSAMP_ELEMENTINDEX 로 설정한다. 이 스테이트의 디폴트값이 0 의 경우, 멀티 엘리먼트 텍스처는 기능하지 않는다. 이 스테이트를 부적절한 수치로 설정 하면, 부정의 동작이 생긴다. 예를 들어, 멀티 엘리먼트 텍스처의 폭이 요소 2 개일 때, 4 번째의 요소로부터의 샘플링을 샘플러에 요구한 것 같은 경우이다.
API 의 변경
이 기능의 지원을 위해서(때문에), 다음과 같은 애플리케이션 프로그래밍 인터페이스 (API)의 변경이 제안되고 있다. 여기에 나타내는 것 같은 새로운 표면 포맷은, 포맷의 인터리브 된 성질을 표현하고 있다.
새로운 인터리브 된 표면 포맷:
D3DFMT_MULTI2_ARGB8 = MAKEFOURCC('M', 'E', 'T', '1'),
얻어온다 요소를 나타내는 새로운 샘플러 스테이트:
D3DSAMP_ELEMENTINDEX
새로운 렌더링 스테이트:
D3DRS_COLORWRITEENABLE1
D3DRS_COLORWRITEENABLE2
D3DRS_COLORWRITEENABLE3
D3DRS_COLORWRITEENABLE 는 렌더링 타겟 (또는 요소) 제로에 적용된다.
새로운 하드웨어 능력:
D3DPMISCCAPS_INDEPENDENTWRITEMASKS // True if they can support it