Shader System Mgun Contents Effect Pool Effect State

  • Slides: 9
Download presentation
Shader System Mgun.

Shader System Mgun.

Contents Effect Pool Effect State Manager Shader System

Contents Effect Pool Effect State Manager Shader System

Effect pool -> What : 다른 effect들 간의 변수와 텍스쳐, 그리고 쉐이더를 공유 할

Effect pool -> What : 다른 effect들 간의 변수와 텍스쳐, 그리고 쉐이더를 공유 할 수 있게 해준다. -> Advantage : 다른 이펙트 파일들 사이에서 데이터를 공유함으로서 공통된 변수나 데이터를 매 프레임당 한번씩만 설정해 줄 수 있도록 한다. -> How : - dx 9에서는 Sampler을 지원하지 않는다. shared float 3 g_Light. Dir; shared texture 2 D g_tx. Diffuse; sampler 2 D Mesh. Texture. Sampler = sampler_state { Texture = (g_tx. Diffuse); Min. Filter = Linear; Mag. Filter = Linear; Address. U = WRAP; Address. V = WRAP; }; -dx 10에서는 상수버퍼 그룹이용, Sampler 지원. shader 4. 0모델에서는 sampler은 별개의 오브젝트라 서 공유가능. shared cbuffer cb. Shared { float 3 g_Light. Dir; float g_Tex. Move; }; shared texture 2 D g_tx. Diffuse; shared sampler 2 D Mesh. Texture. Sampler = sampler_state { Texture = (g_tx. Diffuse); Min. Filter = Linear; Mag. Filter = Linear; Address. U = WRAP; Address. V = WRAP; };

Effect pool. Use Sample -> in Dx 10: if(FAILED(DXUTFind. DXSDKMedia. File. Cch( sz. Effect.

Effect pool. Use Sample -> in Dx 10: if(FAILED(DXUTFind. DXSDKMedia. File. Cch( sz. Effect. Pool, MAX_PATH, L"Effect. Pools. fxh" ))) RT_ASSERT(false, "MRmanager. Shader. Effect - DXUTFind. DXSDKMedia. File. Cch") // 2. shader macro - ifdef D 3 D 10을사용하기위해등록해둔다. D 3 D 10_SHADER_MACRO Shader_Macros[] = { "D 3 D 10", "1", NULL }; // 3. use effect pool MRgraphic 10* p. Graphic = (MRgraphic 10*)pk. MRgraphic; ID 3 D 10 Device* p. Device = p. Graphic->Get. Device 10(); if(FAILED(D 3 DX 10 Create. Effect. Pool. From. File( sz. Effect. Pool, &Shader_Macros[0], NULL, "fx_4_0", D 3 D 10_SHADER_ENABLE_BACKWARDS_COMPATIBILITY, 0, p. Device, NULL, &m_pk. Pool, NULL ))) { RT_ASSERT(false, "MRmanager. Shader. Effect X 10 Create. Effect. Pool. From. File") }

Effect pool. In Dx Sample

Effect pool. In Dx Sample

State Manager -> What : Render loop에서 일어나는 state change를 직접 컨트롤 할 수

State Manager -> What : Render loop에서 일어나는 state change를 직접 컨트롤 할 수 있게 하기 위한 인터페이스 -> Advantage : 복잡한 Render loop에서 일어나는 state change의 횟수를 줄임으로써 Cpu 작업 속도를 크게 향상시켜준다. 디바이스의 불필요한 state change의 필터링을 통해 많은 이점을 준다. -> How : -ID 3 DXEffect. State. Manager을 오버라이드(상속)하여 사용. class CState. Manager. Interface : public ID 3 DXEffect. State. Manager { Public: virtual ~CState. Manager. Interface() { }; // virtual destructor, for cleanup purposes virtual void Dirty. Cached. Values() = 0; // Cause any cached state change values to be invalid virtual LPCWSTR End. Frame. Stats() = 0; // Called once per frame retrieve statistics // Create a state manager interface for the device static CState. Manager. Interface* CState. Manager. Interface: : Create( LPDIRECT 3 DDEVICE 9 p. Device ); };

State Manager -> Performance Tip : state change의 필터링에다가 추가적인 옵션으로 render sequence를 재배열

State Manager -> Performance Tip : state change의 필터링에다가 추가적인 옵션으로 render sequence를 재배열 하면 큰 포퍼먼스를 얻을 수 있다. // Render each mesh object For each instance of mesh x Setup transforms (ID 3 DXEffect Set. Matrix) For each material of mesh x Set up material (ID 3 DXEffect Begin/Begin. Pass) Draw This is the same sequence re-ordered by material: // Render each effect to minimize state changes For each material y Set up material (ID 3 DXEffect Begin/Begin Pass) For each instance of material y Set up transforms (ID 3 DXEffect Set. Matrix) Draw