ID3DXEffect Ãß°¡

ÇöÀçÀÇ ÇÁ·¹ÀÓ¿÷¿¡¼­ ¼ÎÀÌ´õ¸¦ °£´ÜÇÏ°Ô »ç¿ëÇϱâ À§ÇØ, ID3DXEffect¸¦ Ãß°¡ ÇÑ´Ù.

ÀÌÆåÆ®¸¦ »ç¿ëÇÏ´Â ¼ø¼­´Â ´ÙÀ½°ú °°´Ù.

1. ÀÌÆåÆ® »ý¼º

2. ÀÌÆåÆ® ·»´õ¸µ

3. ÀÌÆåÆ® ÇØÁ¦

1. ÀÌÆåÆ® »ý¼º

ÀÌÆåÆ®¸¦ ½ÃÀÛÇϱâ À§ÇØ ID3DXEffect °´Ã¼¸¦ ¸¸µç´Ù.

HRESULT D3DXCreateEffectFromFile

    LPDIRECT3DDEVICE9 pDevice,

    LPCTSTR pSrcFile,   
    CONST D3DXMACRO * pDefines,
    LPD3DXINCLUDE pInclude,  
    DWORD Flags,
    LPD3DXEFFECTPOOL pPool,
    LPD3DXEFFECT * ppEffect,
    LPD3DXBUFFER * ppCompilationErrors

);

[in] pDevice: ÀÌÆåÆ®¸¦ »ý¼ºÇÏ´Â IDirect3DDevice9 Æ÷ÀÎÅÍ
[in] pSrcFile: ÀÌÆåÆ® ÆÄÀϸí
[in] pDefines: ÇÁ¸®ÇÁ·Î¼¼¼­ ¸ÅÅ©·Î Á¤ÀÇ·Î NULL·Î ³¡³ª´Â D3DXMACRO ¹è¿­
               º¸Åë NULLÀ» ³Ö´Â´Ù.
[in] pInclude: #include ÀÇ»ç ¸í·É¾î·Î º¸Åë NULLÀ» ³Ö´Â´Ù.
[in] Flags: ¼ÎÀÌ´õ¸¦ ÄÄÆÄÀÏ, ¾î¼Àºí¸µ ÇÏ´Â »ç¿ëµÇ´Â D3DXSHADER¿Í D3DXFX Ç÷¡±×.
     À̹ø¿¡ »ç¿ëµÈ ¼ÎÀÌ´õ ÄÄÆÄÀÏ Ç÷¡±×´Â ¾Æ·¡¿Í °°´Ù.

D3DXSHADER_DEBUG : (ÄÄÆÄÀÏ ¿É¼Ç /Zi)
ÄÄÆÄÀÏ ÇÏ´Â µ¿¾È µð¹ö±× ÆÄÀÏÀ̸§,  ¶óÀÎ ¹øÈ£, ŸÀÔ, ½Éº¼ Á¤º¸¸¦ Ãß°¡ÇÑ´Ù.

D3DXSHADER_NO_PRESHADER : (ÄÄÆÄÀÏ ¿É¼Ç /Op)
preshader¸¦ ½ÇÇàÇÏÁö ¾Ê´Â´Ù. µðÆúÆ®·Î Presshader¸¦ ½ÇÇàÇÑ´Ù.
         
[in] pPool: ÆĶó ¸ÞÅÍ °øÀ¯¸¦ À§ÇÑ ID3DXFffectPool °³Ã¼ÀÇ Æ÷ÀÎÅÍ.
            NULLÀÌ¸é °øÀ¯ÇÏÁö ¾Ê´Â´Ù.
[out] ppEffect:  ÄÄÆÄÀÏµÈ ID3DXEFFECT Æ÷ÀÎÅ͸¦ µ¹·ÁÁØ´Ù.           
[out] ppCompilationErrors: ÄÄÆÄÀÏ ¿¡·¯¸¦ ID3DXBuffer¸¦ µ¹·ÁÁØ´Ù.
    ¿¡·¯°ªÀÌ ÇÊ¿ä ¾ø´Ù¸é NULL ÀÔ·Â

IDirect3DDevice9*    pDevice;

ID3DXEffect*         m_pEffect;       

ID3DXBuffer* errorBuffer = 0;

 

    DWORD dwShaderFlags = 0;

#if defined( _DEBUG )

    dwShaderFlags |= D3DXSHADER_DEBUG;

    dwShaderFlags |= D3DXSHADER_NO_PRESHADER;

#endif

 

    HRESULT hr = D3DXCreateEffectFromFile(

        pDevice,

        szFileName,

        0,

        0,

        dwShaderFlags,

        0,

        &m_pEffect,

        &errorBuffer);

2. ÀÌÆåÆ® ·»´õ¸µ

ÀÌÆåÆ® ·»´õ¸µ½Ã¿¡ »ç¿ëµÇ´Â ¸í·É¾î¸¦ ¾Ë¾Æº»´Ù.

SetTechnique()
   Begin()
      BeginPass()
      //¸ÞÆ®¸®¾ó ¼³Á¤µµ ¿©±â¼­ ÇÑ´Ù.
      SetTexture()
      CommitChanges()
      //¿©±â¼­ ¸Þ½Ã¸¦ ±×¸°´Ù.
      EndPass()
   End()

SetTechnique() : È°¼ºÈ­µÈ Å×Æ®´ÐÀ» ¼ÂÆÃÇÑ´Ù.

HRESULT SetTechnique( D3DXHANDLE hTechnique )

[in] hTechnique : D3DXHANDLE¸¦ ÀÔ·ÂÇÑ´Ù.

D3DXHANDLE ÀǹÌ:
a). GetParameter[ByName|Element|BySemantic] À̳ª GetAnnotation[ByName]ÀÇÇØ
¹ÝȯµÈ °ªµéÀ» »ç¿ëÇÑ´Ù.
b). ¹®ÀÚ¿­À» ÀÇ¹Ì ÇÒ ¼öµµ ÀÖ´Ù.


Begin() : È°¼ºÈ­µÈ Å×Å©´ÐÀ» ½ÃÀÛÇÑ´Ù.

HRESULT Begin(  UINT* pPasses, DWORD Flags )
    ......
HRESULT End()

[out] pPasses : È°¼ºÈ­µÈ Å×Å©´ÐÀÇ Æнº ¼ö¸¦ ¸®ÅÏÇÑ´Ù.

[in] Flags : ÇöÀçÀÇ ÀåÄ¡ »óÅÂ¿Í ¼¼ÀÌ´õ »óŸ¦ ½ÃÀÛ½Ã(::Begin())¿¡
º¸°üÇß´Ù°¡ Á¾·á(::End())½Ã¿¡ »óŸ¦ º¹±¸ÇÒ °ÍÀÎÁö ³ªÅ¸³½´Ù.

D3DXFX_DONOTSAVESTATE :
ID3DXEffect::Begin() È£Ãâ½Ã¿¡ ÀåÄ¡ state¸¦ º¸°üÇÏÁö ¾Ê°í,
ID3DXEffect::End()½Ã¿¡ È£Ãâ½Ã¿¡ ÀåÄ¡ state¸¦ º¹¿øÇÏÁö ÇÏÁö ¾Ê´Â´Ù.

D3DXFX_DONOTSAVESHADERSTATE :
ID3DXEffect::Begin() È£Ãâ½Ã¿¡ ¼ÎÀÌ´õ state¸¦ º¸°üÇÏÁö ¾Ê°í
ID3DXEffect::End()½Ã¿¡ È£Ãâ½Ã¿¡ ¼ÎÀÌ´õ state¸¦ º¹¿øÇÏÁö ÇÏÁö ¾Ê´Â´Ù.


Begin() : È°¼ºÈ­µÈ Å×Å©´ÐÀÇ Æнº¸¦ ½ÃÀÛÇÑ´Ù.

HRESULT BeginPass(  UINT Pass)
    ......
HRESULT EndPass()

[in] pPasses : Å×Å©´Ð¾È¿¡ ÀÖ´Â Æнº¸¦ ÁöÁ¤ÇÑ´Ù.


SetTexture() : ÀÌÆåÆ®¿¡¼­ »ç¿ëµÉ ÅؽºÃĸ¦ ÁöÁ¤ÇÑ´Ù.
ºÎ¸ð Ŭ·¡½º ID3DXBaseEffectÀÇ ¸Þ½îµåÀÌ´Ù.

HRESULT SetTexture(
  D3DXHANDLE hParameter,
  LPDIRECT3DBASETEXTURE9 pTexture
)

[in] hParameter : ÀÌÆåÆ®(*.fx)¿¡ ÀÖ´Â ÅؽºÃÄ ÇÚµé
[in] pTexture : IDirect3DBaseTextureÀÇ ÇÚµé


CommitChanges() : BeginPass()¿Í EndPass() »çÀÌ ID3DXEffect::Setx~~()¿¡
ÀÇÇØ ÀÌÆåÆ® »óÅ°¡ ¹Ù²î¸é ÀÌ ¸Þ½îµå¸¦ È£Ãâ ÇÏ¿© µð¹ÙÀ̽º¿¡°Ô º¯È­¸¦ ¾Ë·ÁÁØ´Ù.

HRESULT CommitChanges()

 

¾Æ·¡´Â ID3DXEffect¸¦ ¾î¶»°Ô »ç¿ëÇÏ´ÂÁö °£´ÜÇÏ°Ô ¼³¸íÇÏ°í ÀÖ´Â GpgStudyÀÇ
zupet´ÔÀÇ ±ÛÀÌ´Ù.

zupet´ÔÀÇ ±Û : ID3DXEffect »ç¿ë¹æ¹ý

 

http://www.gpgstudy.com/forum/viewtopic.php?topic=19093

 

device->SetStreamSource(...)

device->SetVertexDeclaration(...)

device->SetIndices(...)

 

UINT pass;

if(SUCCEEDED(effect->Begin(&pass)))

{

    for(UINT i=0; i < pass; effect->BeginPass(i))

    {

        for(int j=0; j< numObject; ++j)

        {

            effect->SetTexture(objectList[i].m_texture);

            effect->CommitChanges();

            device->DrawIndexedPrimitive(...);

        }

    }

    effect->End();

}

ÀÌÆåÆ® ÀνºÅϽº°¡ °°Àº °æ¿ì SetTexture()¸¦ È£ÃâÈÄ CommitChanges()¸¦ ½ÇÇàÇÏ¿©,
ÅؽºÃÄ°¡ ¹Ù²ï°É Àû¿ë ½ÃŲ´Ù.


3. ÀÌÆåÆ® ÇØÁ¦

ID3DXEFFECT * pEffect;

 

pEffect->Release()

 

³¡.... ¿¹Á¦´Â ¾ø´Ù.
ÇÁ·¹ÀÓ¿÷¿¡ ID3DXEFFECTÀ» Ãß°¡Çϱâ À§ÇØ Áö±Ý±îÁö ¼³¸íÇß´Ù.
ÀÌÆåÆ®¸¦ Ãß°¡ÇÑ ÇÁ·¹ÀÓ¿÷Àº ¿©±â(chacter_animation/framework/ver04.html)ÀÖ´Ù.