2010-07-03 4 views

답변

2

오신 것을 환영합니다 : 선택할 수있는 자원의

유형은 RWTexture2D<float4>입니다. 당신은 다이렉트 X SDK OIT 샘플을 볼 수 있습니다 :

그들은 기능 OIT_CS.hlslSortAndRenderCS에 액세스하는 RWTexture2D<float4> frameBuffer 선언했다. 당신이 실제로 RGBA 색상 (각 채널에 대한 바이트)입니다 r0, r1r2uint 값을 볼 수 있듯이

// convert the color to floats 
float4 color[3]; 
color[0].r = (r0 >> 0 & 0xFF)/255.0f; 
color[0].g = (r0 >> 8 & 0xFF)/255.0f; 
color[0].b = (r0 >> 16 & 0xFF)/255.0f; 
color[0].a = (r0 >> 24 & 0xFF)/255.0f; 

color[1].r = (r1 >> 0 & 0xFF)/255.0f; 
color[1].g = (r1 >> 8 & 0xFF)/255.0f; 
color[1].b = (r1 >> 16 & 0xFF)/255.0f; 
color[1].a = (r1 >> 24 & 0xFF)/255.0f; 

color[2].r = (r2 >> 0 & 0xFF)/255.0f; 
color[2].g = (r2 >> 8 & 0xFF)/255.0f; 
color[2].b = (r2 >> 16 & 0xFF)/255.0f; 
color[2].a = (r2 >> 24 & 0xFF)/255.0f; 

float4 result = lerp(lerp(lerp(0, color[2], color[2].a), color[1], color[1].a), color[0], color[0].a); 
result.a = 1.0f; 
frameBuffer[nDTid.xy] = result; 

, 그들은 변화 및 마스크과 정규화를 사용하여 각 채널의 압축을 풉니 다.

물론 이미 값이 float4이라면 그렇게하지 않아도됩니다. 그런 다음 그 lerps (보간). 다시는 그렇게 할 필요가 없습니다. 배열 표기법을 사용하여 frameBuffer에 액세스하고 좌표를 uint2으로 액세스하면 어떤 관심을 갖게됩니까?

+1

DX11에서 스왑 체인의 float4 프레임 버퍼에 묶이지 않은 경우 DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM (DXGI 1.1)과 같은 BGRA 형식 또는 하이 컬러 형식과 같이 스왑 체인에서 지원하는 DXGI_FORMAT를 가질 수 있습니다. – Stringer

+3

그렇게하면 RWTexture는 CS 5.0 프로파일에서 ** ** 사용 가능하므로 DX11 호환 비디오 카드 만 사용할 수 있습니다. – asmi84