DirectX 10

공유 텍스쳐 설정

공대나온남자 2011. 6. 16. 22:39

* 텍스쳐를 설정하는 방식은 2가지다.


1. 쉐이더 변수

shader:

Texture2D g_txTexture;


client:

pEffect->GetVariableByName("g_txTexture")->AsShaderResource()->SetResource(pResourceView);


2. Device 설정

shader:

Texture2D g_txTexture: register(t0)


client:

pd3dDevice->PSSetShaderResources(0, 1, &pResourceView);


뭐 이런 식이다.


차이점은 ID3D10EffectPass::Apply() 를 호출했을 때 발생한다. Apply()를 호출하면 첫번째 방법으로 설정한 것은 유지가 되지만 두번째 방법으로 설정한 것은 리셋된다. 


두번째 방법을 사용하려면 Apply()를 호출한 다음에 텍스쳐를 설정해주어야 한다. 뭐 Effect를 사용하지 않으면 상관없겠지만.


일반적인 경우에는 별 문제가 없겠지만 여러 draw에 공통으로 사용되는 텍스쳐를 설정하기 위해 두번째 방법을 사용하면 문제가 발생한다. 공통으로 사용되는 텍스쳐임에도 불구하고 매 draw 마다 Apply() 이후에 텍스쳐를 다시 설정해주어야 한다. 그리고 각 draw 시점에 공통으로 사용되는 텍스쳐에 대한 정보를 알고 있어야 한다.


그래서! 첫번째 방법을 사용한다. 텍스쳐 변수를 shared로 설정하고 EffectPool을 통해 관리하는 식으로 하면 그리 어렵지 않게 사용할 수 있다.


shared Texture2D g_txTexture;



참고로, 텍스쳐 변수의 경우 Constant Buffer 에 사용할 수 없다.

shared cbuffer cb0

{

Texture2D g_txTexture;

}

이렇게는 안된다.


shared cbuffer cb0

{

...

}


shared Texture2D g_txTexture;


그냥 이렇게 쓰자.

'DirectX 10' 카테고리의 다른 글

Render Target, Depth/Stencil Buffer Clear  (0) 2011.07.23
그림자맵 샘플링  (0) 2011.06.18
텍스쳐 해제  (0) 2011.06.13
Rendering to multi window in DX10  (0) 2011.03.13
쉐이더 파일 내에서 Render State 설정  (0) 2010.11.20