http://blog.naver.com/dlqudgml81/50119354700
IDirect3DStateBlock9
기능 - 렌더링 스테이트를 캡슐화
다른 기능을 제외하더도 렌더링 스테이트를 제대로 관리 안하고 있을시에 초기로 돌리기에 아주 편했다.
사용법은 SDK를 참조하자!
ex ) 간단히 현재 렌더링 스테이트를 저장하고 초기화 하는 방법
1. CreateStateBlock ( ); // 생성한다.
2. IDirect3DStateBlock9 ->Capture();를해주면 이후에 모든 렌더링 스테이트를 저장한다.
3. IDirect3DStateBlock9 ->Apply(); 초기로 돌려준다.
http://diefish.egloos.com/10099055
DirectX에서 재공해주는 IDirect3DStateBlock9 를 이용하면
D3D렌더링 옵션정보를 잠시 기억했다가 다시 원복시켜주고 싶은 시점에서 전상태로 돌려주도록 할수 있다.
// 첫번째 파라미터 관련
typedef enum _D3DSTATEBLOCKTYPE
{
D3DSBT_ALL = 1, // capture all state
D3DSBT_PIXELSTATE = 2, // capture pixel state
D3DSBT_VERTEXSTATE = 3, // capture vertex state
D3DSBT_FORCE_DWORD = 0x7fffffff,
} D3DSTATEBLOCKTYPE;
[사용예]
// IDirect3DStateBlock9의 초기화 관련
IDirect3DStateBlock9* pStateBlock = NULL;
pd3dDevice->CreateStateBlock( D3DSBT_ALL, &pStateBlock );
g_pStateBlock->Capture(); // 현재 설정을 기억
// <-- 이부분에서 다른 설정으로 랜더링
g_pStateBlock->Apply(); // Capture()를 호출했던 시점의 상태로 원복
http://gigaboy.egloos.com/10734021
IDirect3DStateBlock9를 사용한 렌더상태 조작 D3D
by gigaboy 2011/06/28 14:32 gigaboy.egloos.com/10734021
IDirect3DStateBlock9* pStateBlock = NULL;
gd3dDevice->CreateStateBlock( D3DSBT_ALL, &pStateBlock ); // 프로그램 생성할 때 초기화
// 변경되는 렌더 스테이트 BeginStateBlock, EndStateBlock 사이에 입력.
gd3dDevice->BeginStateBlock();
gd3dDevice->SetRenderState( D3DRS_FILLMODE, D3DFILL_WIREFRAME ); // 와이어 프레임.
gd3dDevice->EndStateBlock( &pStateBlock ); // pStateBlock에 상태들이 기록되어 있다.
gd3dDevice->SetRenderState( D3DRS_FILLMODE, D3DFILL_SOLID ); // 솔리드로 그리고 싶다.
drawObjectA(); // 솔리드로 그려진다.
pStateBlock->Apply(); // 이전에 기억해 두었던 렌더 상태로 되돌린다.
drawObjectB(); // 와이어 프레임으로 그려진다.
drawObjectC();
pStateBlock->Release(); // 프로그램 종료시 해제
구와 기둥은 WIRE 로 그려지고 있지만 바닥은 SOLID로 그려지고 있다.
가능하면 렌더 상태들을 FX 안에서 사용하는게 편한것 같다.
반응형
'그래픽스(Graphics) > DirectX9~12' 카테고리의 다른 글
D3D 에서의 HRESULT 값의 의미 (0) | 2012.12.30 |
---|---|
FPS 와 프레임 즉시 렌더링 (0) | 2012.12.27 |
소프트 파티클 (0) | 2012.12.20 |
디바이스 상태에 대한 HRESULT 값 (0) | 2012.12.18 |
D3D 디바이스 소실 처리 (0) | 2012.11.13 |