반응형
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 안에서 사용하는게 편한것 같다.







반응형

+ Recent posts