* 텍스쳐를 설정하는 방식은 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 |