본문 바로가기

프로그래밍/공부관련

SetRenderState 간단정리


1. SetRenderState 사전적 의미
 
  HRESULT SetRenderState(
   D3DRENDERSTATETYPE  state,   //--1.
   DWORD Value       //--2.
   );
   
 
  Parameter
  1. state [in] D3DRENDERSTATETYPE 목록중 임의의 멤버 지정
  2. DWORD Value[in]
   state에 의한 결정
  
  반환값 성공시 D3D_OK를 반환  
   #define D3D_OK  S_OK
   #define S_OK                                   ((HRESULT)0x00000000L)
 
 
 2. 파라미터 D3DRENDERSTATETYPE
 
  - D3DRS_ZENABLE
   z버퍼를 유효하게 하려면 D3DZB_TRUE
   w버퍼를 유효하게 하려면 D3DZB_USEW
   깊이 버퍼링을 무효 하려면 D3DZB_FALSE
 
    D3DPRESENT_PARAMETERS 구조체의 EnableAutoDepthStencil
    맴버에 TRUE를 설정해 스텐실이 스왑 체인과 함께 생성 되고 있는 경우,
    D3DRS_ZENABLE 의 default value는 D3DZB_TRUE,
    D3DPRESENT_PARAMETERS 구조체의 EnableAutoDepthStencil
    맴버에 FALSE를 설정해 스텐실이 생성되고 있지 않는 경우
    D3DRS_ZENABLE의 default value는 D3DZB_FALSE
    
    ex) g_pd3dDevice->SetRenderState( D3DR_ZENABLE, D3DZB_TRUE );  // -> z버퍼유효
    
   - D3DRS_FILLMODE
    D3DFILL_POINT : 점을 칠한다.
    D3DFILL_WIREFRAME : WIREFRAME을 칠한다.
    D3DFILL_SOLID : 면을 칠한다.
 
   - D3DRS_SHADEMODE
    D3DSHADE_FLAT : flat shading mode. 보간되지 않는 색이 삼각형 전체에 적용
    D3DSHADE_GOURAUD : gouraud shading mode. 표면의 색성분과 스펙쿨러 성분은,
        삼각형의 3개 정점간의 interpolation에 의해 결정
    D3DSHADE_PHONG : pixel shading mode.
    
   - D3DRS_ZWRITEENABLE
    APP에 의한 깊이 버퍼에의 쓰기를 유효하게 하려면 TRUE -> default
    시스템이 새로운 깊이 값으로 깊이 버퍼 갱신을 막을 수 있다. //--------------> 요지
  
   - D3DRS_ALPHATESTENABLE
    픽셀마다 알파 테스트를 유효하게 하려면 TRUE를 설정
    테스트가
    성공하면 픽셀이 frame buffer에 의해 처리된다.
    실패하면 그 픽셀의 모든 frame buffer처리는 스킵된다.
    
    D3DRS_ALPHAFUNC 렌더링 스테이트에서 제공되는 비교함수를 사용해,
    들어오는 알파값을 기준 알파값과 비교해 테스트를 실시 한다.
    
    기준 알파 값은, D3DRS_ALPHAREF 의 설정값으로 정해진다.
    
  - D3DRS_ZFUNC
    default value D3DCMP_LESSEQUAL.
    픽셀의 깊이 값을 깊이 버퍼의 값과 비교 한다.
    픽셀의 깊이 값이 비교함수로 허가되면 픽셀이 출력된다.
    깊이 값이 깊이 버퍼에 출력되는 것은, RenderingState가 TRUE의 경우 뿐이다.
    픽셀 렌더링 처리를 실시 하지 않는 경우에 텍스쳐를 필터 처리하거나 곱셈 할 필요가
    없기 때문에 깊이 테스트에 실패하는 쪽이 소프트웨어에 의한
    레스터화나 하드웨어 가속기시의 처리는 빨라진다.  
    
   - D3DRS_SRCBLEND
    D3DBLEND_ZERO :    (0,0,0,0)
    D3DBLEND_ONE :   (1,1,1,1)
    D3DBLEND_SRCCOLOR :  (R,G,B,A)
    D3DBLEND_INVSRCCOLOR : (1-R,1-G,1-B,1-A)
    D3DBLEND_SRCALPHA :  (A,A,A,A)
    D3DBLEND_INVSRCALPHA :  (1-A,1-A,1-A,1-A)
    D3DBLEND_DESTALPHA :  (A,A,A,A)
    D3DBLEND_INVDESTALPHA : (1-A,1-A,1-A,1-A)
    D3DBLEND_DESTCOLOR : (R,G,B,A)
    D3DBLEND_INVDESTCOLOR : (1-R,1-G,1-B,1-A)
    D3DBLEND_SRCALPHASAT : (f,f,f,1), f = min(A, 1-A)
    D3DBLEND_BOTHINVSRCALPHA
    D3DRS_SRCBLEND rendering state 에 대해서만 지원 된다. //-------> 중요
    source blend factor 는 (1-A,1-A,1-A,1-A)로,
    destination blend factor는 (A,A,A,A) 다.
    destination의 blend factor는 overriding 된다.
   D3DBLEND_BLENDFACTOR
    frame buffer 블렌더가 사용하는 정수 컬러 혼합 계수.
    D3DPBLEND_BLENDFACTOR 가 on 인 경우에만 지원된다.
   D3DBLEND_INVBLENDFACTOR //----------------------------------> 차후 이해요망
    frame buffer 블렌더가 사용하는 정수 컬럽 혼합 계수의 보수.
    D3DCAPS9 의 SrcBlendCaps 또는 DestBlendCaps 멤버에
    D3DPBLEND_BLENDFACTOR 비트가 설정되어있는 경우만,
    blend factor가 지원 된다.
    
   - D3DRS_DESTBLEND
    default value is D3DBLEND_ZERO.
    D3DBLEND 목록의 맴버중 하나.
    
   - D3DRS_ALPHAREF
    알파 테스트가 유효하게 설정되어 있는 경우에,
    픽셀 테스트를 하기 위한 기준 알파값을 지정 하는 값
 
   - D3DRS_ALPHAFUNC
    D3DCMPFUNC 목록 맴버중 하나.
    default is D3DCMP_ALWAYS.
    이 맴버는 애플리케이션에 알파 값을 기준으로 하는 ...    
    This member enables an application to accept or reject a pixel,
    based on its alpha value. //--------------------------------> 차후 명확한 해석

    
   - D3DRS_CULLMODE
    Vertices를 Culling 하는 경우에 방법을 지정
    default value is D3DCULL_CCW
    D3DCULL_NONE / D3DCULL_CW / D3DCULL_CCW
    
   - D3DRS_LASTPIXEL
    default is TRUE
    라인상의 마지막 점 그리기를 가능하게 한다.
    
   - D3DRS_DITHERENABLE
    디더 링 _ default is FALSE -> 일종의 색 혼합법
  
   - D3DRS_ALPHABLENDENABLE
    Alpha Blend(혼합) Type 은
    D3DRS_SRCBLEND 와 D3DRS_DESTBLEND의 Rendering State에 의해 정해진다.