shader에서의 dword
shader에는 dword형이 존재하지 않는다.
하지만 우리가 입력스트림으로 칼라값을 설정해서 넘길때 보통 dword를 많이 사용한다.
struct VS_INPUT
{
float4 Pos : POSITION;
float2 Tex : TEXCOORD0;
};
그리고 argb로 해서 값을 넘긴다.
즉, 빨간색이라면 d3dcolor_argb(255, 255, 0, 0) 이런식으로 설정해 넘긴다.
이렇게 해도 shader 내부에서는 입력스트림일 경우 dword를 float4로 치환하여 사용하기 때문에 문제가 없다.
문제는 입력스트림이 아닌 전역상수로 넘기고자 할 때이다.
전역상수에 float4 vColor;이라고 설정하고 이곳에 SetValue로 값을 넘길때 dword를 넘기면 에러가 난다.
이 경우에는 직접 float4로 치환하여 넘겨야 한다.
dword의 경우 float4로 치환하고자 한다면 한바이트찍 잘라서 넣어주면 된다.
DWORD color = dwValue;
float a = (float)(color>>24);
color = color<<8;
float r = (float)(color>>24);
color = color<<8;
float g = (float)(color>>24);
color = color<<8;
float b = (float)(color>>24);
그리고 255로 나누어 주면 shader에서 사용하는 색상값으로 표현할 수 있다.
D3DXVECTOR4(a/255.0f, r/255.0f, g/255.0f, b/255.0f);
그런데 문제는 dword 입력스트림이 아니라 상수로 넣어줄 경우에는 argb가 아니라
rgba로 넣어줘야 한다는 것이다.
dword는 shader내부에서 알아서 rgba로 바꿔주지만 외부 상수는 직접 모두 바꾸어 줘야 한다.
'Study > Graphics ' 카테고리의 다른 글
shader version 맞춰주기. (0) | 2009.09.06 |
---|---|
not use lock, unlock version font system (0) | 2009.08.24 |
float4에 마지막 w의 값...1이냐 0이냐.... (0) | 2009.08.11 |
shader SetValue (0) | 2009.08.08 |
Directx9 셰이더 프로그래밍 예제 수정방법. (4) | 2009.07.13 |