티스토리 뷰
다양한 종류의 표면 포맷을 정의한다.
구문
typedef enum _D3DFORMAT { ...(values) } D3DFORMAT; |
포맷에는 몇개의 종류가 있다.
모든 포맷은, 왼쪽에서 오른쪽으로 최상정도 비트 (MSB)로부터 최하정도 비트 (LSB)의 순서에 나타나고 있다. 예를 들어, D3DFORMAT_ARGB 는, MSB 채널 A (알파)로부터 LSB 채널 B (파랑)의 순서이다. 표면 데이터를 암벽 횡단 할 때 데이터는 LSB 로부터 MSB 의 순서로 메모리에 저장 된다. 이것은, 메모리내의 채널의 순서가, LSB (파랑)로부터 MSB (알파)의 순서인 것을 의미한다.
미정도리의 채널 (G16R16 나 A8 등)을 포함한 포맷의 디폴트값은 1 이다. 유일한 예외는 A8 포맷으로, 3 개의 컬러 채널에 대해서 000 에 초기화된다.
부호 없음 포맷
이러한 정수는, 픽셀 셰이더에 대한 텍스처 주소 명령의 작동코드를 참조한다.
부호 없음 포맷의 데이터는, 정이 아니면 안된다. 부호 없음 포맷에서는, 적 (R), 록 (G), 청 (B), 알파 (A), 휘도(Luminance) (L), 팔레트 (P) 데이터를 조합해 사용한다. 팔레트 데이터는, 색팔레트의 인덱스 생성에 사용하므로, 컬러 인덱스 데이터라고도 부른다.
부호 없음 포맷의 플래그 | 값 | 포맷 |
---|---|---|
D3DFMT_R8G8B8 | 20 | 24 비트의 RGB 픽셀 포맷으로, 채널 근처 8 비트를 사용한다. |
D3DFMT_A8R8G8B8 | 21 | 32 비트의 알파 첨부 ARGB 픽셀 포맷으로, 채널 근처 8 비트를 사용한다. |
D3DFMT_X8R8G8B8 | 22 | 32 비트의 RGB 픽셀 포맷으로, 각 색에 8 비트가 확보되고 있다. |
D3DFMT_R5G6B5 | 23 | 16 비트의 RGB 픽셀 포맷으로, 빨강에 5 비트, 초록에 6 비트, 파랑에 5 비트를 사용한다. |
D3DFMT_X1R5G5B5 | 24 | 16 비트의 픽셀 포맷으로, 그 중 5 비트는 각 색을 위해서(때문에) 확보되고 있다. |
D3DFMT_A1R5G5B5 | 25 | 16 비트의 픽셀 포맷으로, 각 색에 5 비트, 알파에 1 비트가 확보되고 있다. |
D3DFMT_A4R4G4B4 | 26 | 16 비트의 ARGB 픽셀 포맷으로, 채널 마다 4 비트를 사용한다. |
D3DFMT_R3G3B2 | 27 | 8 비트의 RGB 텍스처 포맷으로, 빨강에 3 비트, 초록에 3 비트, 파랑에 2 비트를 사용한다. |
D3DFMT_A8 | 28 | 8 비트의 알파만. |
D3DFMT_A8R3G3B2 | 29 | 16 비트의 ARGB 텍스처 포맷으로, 알파에 8 비트, 빨강과 초록에 각각 3 비트, 파랑에 2 비트를 사용한다. |
D3DFMT_X4R4G4B4 | 30 | 16 비트의 RGB 픽셀 포맷으로, 색 마다 4 비트를 사용한다. |
D3DFMT_A2B10G10R10 | 31 | 32 비트의 픽셀 포맷으로, 각 색에 10 비트, 알파에 2 비트를 사용한다. |
D3DFMT_A8B8G8R8 | 32 | 32 비트의 알파 첨부 ARGB 픽셀 포맷으로, 채널 근처 8 비트를 사용한다. |
D3DFMT_X8B8G8R8 | 33 | 32 비트의 RGB 픽셀 포맷으로, 각 색에 8 비트가 확보되고 있다. |
D3DFMT_G16R16 | 34 | 32 비트의 픽셀 포맷으로, 초록과 빨강에 각각 16 비트를 사용한다. |
D3DFMT_A2R10G10B10 | 35 | 32 비트의 픽셀 포맷으로, 적·록·청에 각각 10 비트, 알파에 2 비트를 사용한다. |
D3DFMT_A16B16G16R16 | 36 | 64 비트의 픽셀 포맷으로, 성분 마다 16 비트를 사용한다. |
D3DFMT_A8P8 | 40 | 8 비트의 알파가 붙은 8 비트의 컬러 인덱스 데이터. |
D3DFMT_P8 | 41 | 8 비트의 컬러 인덱스 데이터. |
D3DFMT_L8 | 50 | 8 비트의 휘도(Luminance)만. |
D3DFMT_L16 | 81 | 16 비트의 휘도(Luminance)만. |
D3DFMT_A8L8 | 51 | 16 비트로, 알파와 휘도(Luminance)에 각각 8 비트를 사용한다. |
D3DFMT_A4L4 | 52 | 8 비트로, 알파와 휘도(Luminance)에 각각 4 비트를 사용한다. |
부호 첨부 포맷
부호 첨부 포맷의 데이터는, 정이어도 부여도 괜찮다. 부호 첨부 포맷에서는, (U), (V), (W), (Q) 데이터를 조합해 사용한다.
부호 첨부 포맷의 플래그 | 값 | 포맷 |
---|---|---|
D3DFMT_V8U8 | 60 | 16 비트의 범프 맵 포맷으로, u 데이터와 v 데이터에 각각 8 비트를 사용한다. |
D3DFMT_Q8W8V8U8 | 63 | 32 비트의 범프 맵 포맷으로, 채널 마다 8 비트를 사용한다. |
D3DFMT_V16U16 | 64 | 32 비트의 범프 맵 포맷으로, 채널 마다 16 비트를 사용한다. |
D3DFMT_Q16W16V16U16 | 110 | 64 비트의 범프 맵 포맷으로, 성분 마다 16 비트를 사용한다. |
D3DFMT_CxV8U8 | 117 | 16 비트의 보통 압축 포맷. 텍스처 샘플러는 다음과 같이 C 채널을 계산한다. C = sqrt(1 - U2 - V2) |
믹스 포맷
믹스 포맷에는, 부호 없음 데이터와 부호 첨부 데이터를 조합해 저장 할 수 있다.
믹스 포맷의 플래그 | 값 | 포맷 |
---|---|---|
D3DFMT_L6V5U5 | 61 | 휘도(Luminance) 첨부의 16 비트 범프 맵 포맷으로, 휘도(Luminance)에 6 비트, v 와 u 에 각각 5 비트를 사용한다. |
D3DFMT_X8L8V8U8 | 62 | 휘도(Luminance) 첨부의 32 비트 범프 맵 포맷으로, 채널 마다 8 비트를 사용한다. |
D3DFMT_A2W10V10U10 | 67 | 32 비트의 범프 맵 포맷으로, 알파에 2 비트, w, v, u 에 각각 10 비트를 사용한다. |
FOURCC 포맷
4 문자 코드 (FOURCC) 포맷의 데이터는, 압축 데이터이다.
MAKEFOURCC
4 문자 코드를 생성하는 매크로를 다음에 나타낸다.
#define MAKEFOURCC(ch0, ch1, ch2, ch3) \ ((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8) | \ ((DWORD)(BYTE)(ch2) << 16) | ((DWORD)(BYTE)(ch3) << 24 ))
정의 끝난 FOURCC 포맷을 다음에 나타낸다.
FOURCC 플래그 | 값 | 포맷 |
---|---|---|
D3DFMT_MULTI2_ARGB8 | MAKEFOURCC('M', 'E', 'T', '1') | MultiElement 텍스처 (압축 없음) |
D3DFMT_G8R8_G8B8 | MAKEFOURCC('G', 'R', 'G', 'B') | YUY2 (Y0U0, Y1V0, Y2U2 등)에 유사한 16 비트에 팩 된 RGB 포맷. 색값을 올바르게 나타내기 위해서(때문에), 픽셀의 페어를 필요로 한다. 페어의 1 번째의 픽셀은, 초록의 8 비트 (상위 8 비트)와 빨강의 8 비트 (하위 8 비트)를 포함한다. 2 번째의 픽셀은, 초록의 8 비트 (상위 8 비트)와 파랑의 8 비트 (하위 8 비트)를 포함한다. 2 개의 픽셀은, 함께 빨강과 파랑의 성분을 공유하고 있지만, 동시에 각각이 고유의 초록 성분 (G0R0, G1B0, G2R2 등)을 갖는다. 텍스처 샘플러는, 픽셀 셰이더내를 참조할 경우에 색을 정규화하지 않는다. 색은 0.0f ~ 255.0f 의 범위대로 된다. 이것은 모든 프로그래밍 가능한 픽셀 셰이더 모델에 들어맞는다. 고정 기능 픽셀 셰이더에 경우는, 하드웨어로 0. f ~ 1. f 의 범위에 정규화할 필요가 있어, 본질적으로 YUY2 텍스처로서 처리할 필요가 있다. 이 포맷을 공개하는 하드웨어는,D3DCAPS9 의 PixelShader1xMaxValue 멤버가, 그 범위를 처리할 수 있는 값으로 설정되지 않으면 안 된다. |
D3DFMT_R8G8_B8G8 | MAKEFOURCC('R', 'G', 'B', 'G') | UYVY (U0Y0, V0Y1, U2Y2 등)에 유사한 16 비트에 팩 된 RGB 포맷. 색값을 올바르게 나타내기 위해서(때문에), 픽셀의 페어를 필요로 한다. 페어의 1 번째의 픽셀은, 초록의 8 비트 (하위 8 비트)와 빨강의 8 비트 (상위 8 비트)를 포함한다. 2 번째의 픽셀은, 초록의 8 비트 (하위 8 비트)와 파랑의 8 비트 (상위 8 비트)를 포함한다. 2 개의 픽셀은, 함께 빨강과 파랑의 성분을 공유하고 있지만, 동시에 각각이 고유의 초록 성분 (R0G0, B0G1, R2G2 등)을 갖는다. 텍스처 샘플러는, 픽셀 셰이더내를 참조할 경우에 색을 정규화하지 않는다. 색은 0.0f ~ 255.0f 의 범위대로 된다. 이것은 모든 프로그래밍 가능한 픽셀 셰이더 모델에 들어맞는다. 고정 기능 픽셀 셰이더에 경우는, 하드웨어로 0. f ~ 1. f 의 범위에 정규화할 필요가 있어, 본질적으로 YUY2 텍스처로서 처리할 필요가 있다. 이 포맷을 공개하는 하드웨어는,D3DCAPS9 의 PixelShader1xMaxValue 멤버가, 그 범위를 처리할 수 있는 값으로 설정되지 않으면 안 된다. |
D3DFMT_DXT1 | MAKEFOURCC('D', 'X', 'T', '1') | DXT1 압축 텍스처 포맷 |
D3DFMT_DXT2 | MAKEFOURCC('D', 'X', 'T', '2') | DXT2 압축 텍스처 포맷 |
D3DFMT_DXT3 | MAKEFOURCC('D', 'X', 'T', '3') | DXT3 압축 텍스처 포맷 |
D3DFMT_DXT4 | MAKEFOURCC('D', 'X', 'T', '4') | DXT4 압축 텍스처 포맷 |
D3DFMT_DXT5 | MAKEFOURCC('D', 'X', 'T', '5') | DXT5 압축 텍스처 포맷 |
D3DFMT_UYVY | MAKEFOURCC('U', 'Y', 'V', 'Y') | UYVY 포맷 (PC98 준거) |
D3DFMT_YUY2 | MAKEFOURCC('Y', 'U', 'Y', '2') | YUY2 포맷 (PC98 준거) |
버퍼 포맷
깊이 버퍼, 스텐실 버퍼, 정점 버퍼, 인덱스 버퍼는, 각각 고유의 포맷을 갖는다.
버퍼 플래그 | 값 | 포맷 |
---|---|---|
D3DFMT_D16_LOCKABLE | 70 | 16 비트의 Z 버퍼 비트 깊이. |
D3DFMT_D32 | 71 | 32 비트의 Z 버퍼 비트 깊이. |
D3DFMT_D15S1 | 73 | 16 비트의 Z 버퍼 비트 깊이로, 15 비트가 깊이 채널에, 1 비트가 스텐실 채널에 확보되고 있다. |
D3DFMT_D24S8 | 75 | 32 비트의 Z 버퍼 비트 깊이로, 깊이 채널에 24 비트, 스텐실 채널에 8 비트를 사용한다. |
D3DFMT_D24X8 | 77 | 32 비트의 Z 버퍼 비트 깊이로, 깊이 채널에 24 비트를 사용한다. |
D3DFMT_D24X4S4 | 79 | 32 비트의 Z 버퍼 비트 깊이로, 깊이 채널에 24 비트, 스텐실 채널에 4 비트를 사용한다. |
D3DFMT_D32F_LOCKABLE | 82 | 깊이값을 표준 IEEE 부동 소수점수(실수)값으로 나타내는 잠금 가능한 포맷. |
D3DFMT_D24FS8 | 83 | 24 비트의 깊이 (24 비트 부동 소수점 포맷 - 20e4)와 8 비트의 스텐실을 포함한, 잠글 수 없는 포맷. |
D3DFMT_D16 | 80 | 16 비트의 Z 버퍼 비트 깊이. |
D3DFMT_VERTEXDATA | 100 | 정점 버퍼 표면을 기술한다. |
D3DFMT_INDEX16 | 101 | 16 비트의 인덱스 버퍼의 비트 깊이. |
D3DFMT_INDEX32 | 102 | 32 비트의 인덱스 버퍼의 비트 깊이. |
D3DFMT_D16_LOCKABLE 를 제외하는 모든 스텐실 포맷은, 각 픽셀에 특정의 비트 오더를 지정하지 않기 때문에, 드라이버는 깊이 채널로서 지정된 비트수보다 넓은 채널을 사용할 수 있다 (다만, 스텐실 채널은 사용할 수 없다).
부동 소수점 포맷
이러한 플래그는, 부동 소수점의 표면 포맷에 사용한다. 채널 근처 16 비트를 사용하는 이러한 포맷은, s10e5 포맷이라고도 부른다.
부동 소수점의 플래그 | 값 | 포맷 |
---|---|---|
D3DFMT_R16F | 111 | 16 비트의 부동 소수점 포맷으로, 빨강의 채널에 16 비트를 사용한다. |
D3DFMT_G16R16F | 112 | 32 비트의 부동 소수점 포맷으로, 빨강의 채널에 16 비트, 초록의 채널에 16 비트를 사용한다. |
D3DFMT_A16B16G16R16F | 113 | 64 비트의 부동 소수점 포맷으로, 알파·청·록·적의 채널 마다 16 비트를 사용한다. |
IEEE 포맷
이러한 플래그는, 부동 소수점의 표면 포맷에 사용한다. 채널 근처 32 비트를 사용하는 이러한 포맷은, s23e8 포맷이라고도 부른다.
부동 소수점의 플래그 | 값 | 포맷 |
---|---|---|
D3DFMT_R32F | 114 | 32 비트의 부동 소수점 포맷으로, 빨강의 채널에 32 비트를 사용한다. |
D3DFMT_G32R32F | 115 | 64 비트의 부동 소수점 포맷으로, 빨강의 채널에 32 비트, 초록의 채널에 32 비트를 사용한다. |
D3DFMT_A32B32G32R32F | 116 | 128 비트의 부동 소수점 포맷으로, 알파·청·록·적의 채널 마다 32 비트를 사용한다. |
그 외
그 외의 플래그는, 이것뿐이어, 미정도리의 포맷에 사용한다.
그 외의 플래그 | 값 | 포맷 |
---|---|---|
D3DFMT_UNKNOWN | 0 | 표면 포맷은 불명하다. |
백 버퍼 또는 디스플레이 포맷
이러한 포맷은, 백 버퍼 또는 디스플레이 에 대해서만 유효하다.
포맷 | 백 버퍼. | 디스플레이 |
---|---|---|
A2R10G10B10 | x | x (풀 스크린 모드만) |
A8R8G8B8 | x | |
X8R8G8B8 | x | x |
A1R5G5B5 | x | |
X1R5G5B5 | x | x |
R5G6B5 | x | x |
주의
비트 오더는, 최상정도 바이트가 선두이다. 따라서, D3DFMT_A8L8 는, 이 2 바이트 포맷의 상위 바이트가 알파인 것을 나타내고 있다. D3DFMT_D16 는, 16 비트의 정수값으로, 애플리케이션으로 잠금 가능한 표면을 나타낸다.
픽셀 포맷이 선택되고 있는 것은, 확립되어 있는 FOURCC 방식을 도입할 뿐만 아니라, 하드웨어 벤더가 정의하는 확장 포맷의 표현을 가능하게 하기 위한(해)이다. Microsoft? Direct3D? 런타임이 인식하는 포맷군은,D3DFORMAT 로 정의되고 있다.
독립한 하드웨어 vender (IHV)가 제공하는 포맷 및 많은 FOURCC 코드는, 일람에는 나타나지 않기 때문에 주의할 필요가 있다. 이 열거형의 포맷은, 런타임에 의해 인정되고 있는 점이 다른 포맷과 다르다. 즉, 레퍼런스 래스터라이저는, 이러한 형태의 모두로 동작한다. IHV 제공의 포맷은, 카드 마다 각각의 IHV 가 지원 한다.
'Application > C/C++' 카테고리의 다른 글
리눅스 채팅 서버 (0) | 2010.12.01 |
---|---|
주변광 센서를 이용한 보다 스마트한 기기 구현하기 (0) | 2010.11.02 |
[CPP] 디버깅에 관하여 (0) | 2010.08.24 |
vc6과 vs2005의 차이로 오는 캐짜증남들 (0) | 2010.08.24 |
VC++ 6.0을 쓰지 말아야하는 이유 (0) | 2010.08.24 |
- Total
- Today
- Yesterday
- 막장로그
- wallpaper
- console
- Assembly
- 프리랜서로 살아남는 법
- medical
- 3D Engine
- Web Programming
- Battle
- cartoon
- win32
- WDB
- Military
- Linux
- Reverse Engineering
- Life News
- Mabinogi
- humor
- Embedded System
- Network Inspector
- BadCode
- USB Lecture
- C#
- diary
- Tech News
- 나비효과
- network
- Information Processor
- 짤방 및 아이콘
- 야마꼬툰
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |