2010-07-07 1 views
2

그래서 나는 어딘가에 내 쉐이더에서,이 가정은 다음과 같이 성명 (나는 DX9와 DX10 간의 쉐이더 공유하는 레거시 지원을 가능하게하고 참고) 확인 :D3D10 HLSL : 리플렉션을 통해 텍스처를 글로벌 Texture2D에 바인딩하려면 어떻게해야합니까?

Texture2D DiffuseMap; 

내가 아무런 문제 쉐이더를 컴파일 할 수 있지만, ShaderResourceView를 "DiffuseMap"에 바인딩하는 방법에 대해서는 약간의 손실이 있습니다. 셰이더를 "리플 렉트 (Reflect)"할 때 나는 일정한 버퍼의 변수들 사이에서 돌아갈 것이라고 생각했습니다. 그렇지 않습니다. 사실 나는 그것을 어디서나 식별 할 수없는 것처럼 보입니다. 그렇다면 ShaderResourceView를 바인딩해야하는 텍스쳐 "스테이지"(DX9 용어 사용)를 어떻게 알 수 있습니까?

편집 : "GetResourceBindingDesc"를 사용하여 샘플러 이름을 식별 할 수 있음을 발견했습니다. 나는 전혀 :(

Edit2가 그래도 나에게 도움이 확실하지 않다 :. 즉, 나는 단지 샘플러를 얻을 수 있습니다 ... 마찬가지로 나뿐만 아니라 DX9에서 자사의 동일 발견하지 않았다

EDIT3 : 내 Texture2D와 샘플러는 다음과 같습니다 :

Texture2D DiffuseMap : DiffuseTexture; 
sampler DiffuseSampler = sampler_state 
{ 
    Texture = (DiffuseMap); 
    MinFilter = Linear; 
    MaxFilter = Linear; 
}; 

를 이제 효과 프레임 워크에 내가 의미 "DiffuseTexture"에 의해 Texture2D를 얻을 수 나는 다음 Texture2D에 ResourceView (D3D10)/텍스처 (D3D9)을 설정할 수 있습니다. 아아 거기에 늪지 표준 쉐이더를 사용하여 "의미"를 처리 할 방법이없는 것 같습니다 (D3D가 어떻게하는지 알면 좋겠지 만 D3D11 효과 프레임 워크를 연구하면 아무 것도 얻을 수 없습니다. ar. 바이너리에서 읽는 것 같습니다. 즉, 컴파일 된 데이터이고, "DiffuseSampler"만 볼 수 있습니다.)

+0

DX9 .fx 파일 (또는 .vs/.ps?)을 가지고 있으며 리플렉션을 사용하여 DX10 컨텍스트에서 컴파일 및 실행하고 싶습니까? – Stringer

+0

효과적으로 ... 예. – Goz

+0

흠, 지금 당신의 문제를 봅니다. 그러나 "DiffuseSampler"가 있다면 확산 된 텍스처의 SRV를 주어진 슬롯에 바인딩해야한다는 것을 아는 것으로 충분합니까? * SetSamplers를 사용하여 DX10 샘플러 상태를 동일한 슬롯에 바인드해야하는지 확실하지 않습니다. – Stringer

답변

1

흠 나는 그것을 바꾸어 말하게한다. C++ 쪽에서는로드 된 텍스처와 관련 SRV가 있습니다. 이제 쉐이더 (DX9에서 제공됨)를 설정하고 쉐이더 작성 방법을 보지 않고 SRV를 바인딩하려고합니다 (확산 슬롯, 반사, 보통 맵으로 확산 - 이름 지정). 권리?

HRESULT GetResourceBindingDesc(
    [in] UINT ResourceIndex, 
    [in] D3D10_SHADER_INPUT_BIND_DESC *pDesc 
); 

난 당신이 각각 ResourceIndex (다음, 0에서 1, 2 등을 시작하는) HRESULT 다음 S_OK 경우 반복한다고 생각 : 당신은 당신이 가장 좋은 건 GetResourceBindingDesc를 사용하고 있다고 말했다으로

는 그런 생각 당신은배열에있는 연관된 SRV의 위치를 ​​나타낼 pDesc.BindPoint*SetShaderResources 호출이라고합니다. pDesc.Name (예 : 'DiffuseMap')은 연결 정보를 제공합니다.

+0

GetResourceBindingDesc는 Texture2D가 아닌 Sampler를 반환하지만, BindPoint 부분에 대한 확인을 주셔서 감사합니다. 그럴지는 모르지만 확실하지는 않을 것입니다. 정말 멋지 겠지만, – Goz

+0

DX9의 샘플러와 텍스처는 동일합니까? DX10/11 만 샘플러와 텍스처 (또는 버퍼)를 명확하게 구분합니다. – Stringer

+0

그들은 동일하지 않습니다. DX9 AFAIK에서 원한다면 여러 샘플러를 동일한 텍스처에 첨부 할 수 있습니다 ... 원하는 이유가 무엇이든 볼 수는 없지만 AFAIK 할 수 있습니다. (다시 AFAIK) – Goz

관련 문제