2011-09-26 9 views
4
PSSetShaderResource()의 첫 번째 매개 변수

:ID3D11DeviceContext :: PSSetShaderResource을 묶어 무슨()

void PSSetShaderResources(
    [in] UINT StartSlot, 
    [in] UINT NumViews, 
    [in] ID3D11ShaderResourceView *const *ppShaderResourceViews 
); 

StartSlot : "인덱스 쉐이더 자원 설정에 시작하는 디바이스의 제로로부터 시작되는 배열에"

는 그래서는이다 정수 인덱스와 .hlsl 변수 사이를 묶으시겠습니까? d3d9에서는 모든 것이 문자열 기반 이름이었습니다. 이제 이러한 정수 인덱스는

당신이 하나의 쉐이더 파일이 말 ...... 누락 된 무언가를 갖고있는 것 같다 :

// shader_1.psh 
Texture2D tex ; 

그리고 또 다른 ..

// shader_2.psh 
TextureCube cubeTex ; 

만 사용하는 경우 shader_1.psh, 파일이 서로 다른 경우 어떻게 구별합니까?

// something like this.. 
d3d11devicecontext->PSSetShaderResources(0, 1, &texture2d) ; 
// index 0 sets 0th texture.. 
// what index is the tex cube? 

답변

3

이 (참조 문서를 찾을 수 없습니다) 아직 실험적으로 검증 추측이지만, 난 당신과 같이 그것을 할 수 있다고 생각 : 바인드 때문에, C++ 코드에서,

// HLSL shader 
Texture2D tex : register(t0); 
Texture2D cubeTex : register(t1); 
SamplerState theSampler : register(s0); 

를 이제 쉐이더에서 texD3D11Texture2D*는 넥타이까지입니다

// C++ 
d3d11devicecontext->PSSetShaderResources(0, 1, &texture2d) ; // SETS TEX @ register(t0) 
d3d11devicecontext->PSSetShaderResources(1, 1, &textureCUBE) ;//SETS TEX @ register(t1) 
+2

다이렉트 X 11 API 매개 변수 - 이름에 "슬롯"의 개념이 실제로 "등록"의 개념에 직접 대응하기위한 것입니다 것 같다 HLSL에서. 이것은 현재 DX11 MSDN 기사의 어느 곳에도 문서화되어 있지 않지만 중요한 정보입니다. 또한 "t"접두사는 "텍스쳐 레지스터 - 슬롯", "b"는 "고정 버퍼 레지스터 - 슬롯"을 의미합니다. –