2012-07-26 2 views
5

쉐이더 여러 질감을 보내 : 내가하여 pTexture을 만들어 물론 다이렉트 X 11, 나는 쉐이더 한 질감을 보낼 수있는이 코드를 사용

devcon->PSSetShaderResources(0, 1, &pTexture); 

: D3DX11CreateShaderResourceViewFromFile

쉐이더 : Texture2D 질감;

return color * Texture.Sample(ss, texcoord); 

현재 셰이더에 하나의 텍스처 만 보내고 있지만 텍스처를 여러 개 보내고 싶습니다. 어떻게 가능합니까?

감사합니다.

+0

블렌딩/멀티 텍스처링을 시도하고 있습니까? –

답변

7

Texture Arrays을 사용하면. 을 작성하면 ArraySize 회원을 살펴보십시오. 이 desc 구조체는 ID3D11Device::CreateTexture2D으로 전달됩니다. 그런 다음 셰이더에서 참조하는 배열의 2D 텍스처를 나타내는 세 번째 텍코 코드 샘플링 인덱스를 사용합니다.

업데이트 : 난 그냥 당신이 셰이더의 텍스처 소스보기를 업데이트하는 경우 (즉, 서로 다른 지리에 대한) 여러 번 호출을 통해 일에 대해 이야기 할 수있는 실현. 효과 프레임 워크를 사용하는 경우 ID3DX11EffectShaderResourceVariable::SetResource을 사용하거나 PSSetShaderResources을 사용하여 새 텍스처를 리 바인드 할 수 있습니다. 그러나 여러 텍스처를 혼합하려는 경우 텍스처 배열을 사용해야합니다.

텍스쳐의 세 번째 요소를 통해 배열의 인접 텍스처간에 자연스럽게 삽입 할 수있는 방법을 제공합니다 (2D 배열은 가장 가까운 정수로 자동 고정됩니다). HLSL sampleremarks을 참조하십시오.

+0

흥미 롭다. 아프다. –

+0

한 가지 질문 만한다. 병합을 원한다면 어떻게 할 수 있는가? 그래서 나는 어떤 상황에서만 병합하고 싶다. 나는 두 번째 texcoord를 사용하지 않는다? –

+0

저는 효과 프레임 워크를 사용하지 않습니다. –

14

개수가 쉐이더 프로파일 사양을 초과하지 않는 한 여러 텍스처를 사용할 수 있습니다. 다음은 그 예이다 : HLSL 코드 :

Texture2D diffuseTexture : register(t0); 
Texture2D anotherTexture : register(t1); 

C++ 코드 :

devcon->V[P|D|G|C|H]SSetShaderResources(texture_index, 1, &texture); 

그래서 위의 HLSL 코드에 대한 예를 들어이 될 것입니다 :

devcon->PSSetShaderResources(0, 1, &diffuseTextureSRV); 
devcon->PSSetShaderResources(1, 1, &anotherTextureSRV); (SRV stands for Shader Texture View) 

OR :

ID3D11ShaderResourceView * textures[] = { diffuseTextureSRV, anotherTextureSRV}; 
devcon->PSSetShaderResources(0, 2, &textures); 

HLSL 이름은 arbi 일 수 있습니다. trary이고 특정 이름과 일치 할 필요는 없습니다. 색인 만 중요합니다. "register (tXX);" 문이 필요하지 않습니다. 어떤 텍스쳐가 어떤 슬롯에 해당하는지 혼란을 피하기 위해 사용하는 것이 좋습니다.

+0

* (SRV는 Shader Resource View의 약자 임) – d7samurai

관련 문제