// managertextured3d.h #ifndef _3DRENDERER_MANAGERTEXTURED3D_H_ #define _3DRENDERER_MANAGERTEXTURED3D_H_ // ºñµð¿À ¸Þ¸ð¸® Á¤º¸ ¾ò±âÀ§ÇÔ #include #include "managertexture.h" #include "managerd3d.h" #include //------------------------------------------------------------------------------ /** @class CManagerTextureD3D */ class CManagerTextureD3D : public CManagerTexture, public CManagerD3D { public: // »ý¼ºÀÚ/¼Ò¸êÀÚ CManagerTextureD3D(); virtual ~CManagerTextureD3D(); // »ý¼º/ÆÄ±« virtual BOOL Create( CDrawBase* pParentDraw, void* pParam ); virtual void Destroy(); // ÀåÄ¡ ¼Õ½Ç/º¹±¸½Ã virtual void OnLostDevice(); virtual void OnResetDevice(); // ÅØ½ºÃ³ ·Îµù virtual HANDLE LoadTexture( const char* lpszFilePath, DWORD dwLoadStyle = 0, float fTextureRate = -1.0f ); // ½ÇÁ¦ ·Îµù virtual BOOL LoadReally( HANDLE hHandle ); // ·ÎµùµÈ ¸ðµç ÅØ½ºÃ³ ¸®»çÀÌ¡ virtual BOOL ResizeAllTexture( BOOL bApplyUnitTextureRate = FALSE ); // ÅØ½ºÃ³ Lock/Unlock virtual void* LockTexture( HANDLE hTexture, long* plPitch, int* piNumComponents ); virtual void UnlockTexture( HANDLE hTexture ); // ÅØ½ºÃ³ ¹öÆÛ ¾ò±â (xxx: Tool only) virtual BOOL GetTextureBuffer( HANDLE hHandle, int* piOutBufferSize, BYTE** ppbyOutBuffer = NULL, int* piOutWidth = NULL, int* piOutHeight = NULL ); // ·»´õ¸µ Ÿ°Ù ¼³Á¤ virtual BOOL SetRenderTarget( HANDLE hTexture = INVALID_HANDLE_VALUE, BOOL bAutoViewportRestore = FALSE, RECT* prtViewport = NULL ); // ±íÀÌ/½ºÅÄ½Ç ¹öÆÛ ¼³Á¤ virtual BOOL SetDepthStencilSurface( HANDLE hTexture = INVALID_HANDLE_VALUE ); // ·»´õ¸µ ¿µ¿ª ¼³Á¤ virtual BOOL SetScissorRect( RECT* prt ); virtual void EnableScissorRect( BOOL bEnable ); // Ä®¶ó ºí·£µù Á¤º¸ ¼³Á¤ virtual void SetColorBlendingOp( UINT uiStage, ETEXTUREOP eTextureOp = ETOP_DEFAULT ); virtual void SetColorArg1( UINT uiStage, ETEXTUREARG eTextureArg = ETARG_DEFAULT ); virtual void SetColorArg2( UINT uiStage, ETEXTUREARG eTextureArg = ETARG_DEFAULT ); // ¾ËÆÄ ºí·£µù Á¤º¸ ¼³Á¤ virtual void SetAlphaBlendingOp( UINT uiStage, ETEXTUREOP eTextureOp = ETOP_DEFAULT ); virtual void SetAlphaArg1( UINT uiStage, ETEXTUREARG eTextureArg = ETARG_DEFAULT ); virtual void SetAlphaArg2( UINT uiStage, ETEXTUREARG eTextureArg = ETARG_DEFAULT ); // ÅØ½ºÃ³ ¿ä¼Ò ¼³Á¤ virtual void SetTFactor( WzColor wcColor ); virtual void EnableTextureFactor( BOOL bEnable, int iTextureStage = 0, BOOL bUsingAlpha = FALSE ); // ÅØ½ºÃ³ ÁÂÇ¥ À妽º ¼³Á¤ virtual void SetTexCoordIndex( DWORD dwValue, int iTextureStage = 0 ); // ÅØ½ºÃ³ º¯È¯ ¼³Á¤ virtual BOOL SetTextureTransform( ETTRANS eTexTrans, int iTextureStage = 0 ); virtual BOOL SetTextureTransform( WzMatrix* pTexMat, int iTextureStage = 0 ); // ¹üÇÁ ¸ÊÇÎ Çà·Ä ¼³Á¤ virtual BOOL SetBumpMappingMatrix( EBMMTX eBumpMtx, float fValue, int iTextureStage = 0 ); // ÅØ½ºÃ³ ÇÊÅÍ Àû¿ë ½ÃÀÛ/Á¾·á virtual void StartTextureFilter( BOOL bColor = TRUE, BOOL bAlpha = TRUE ); virtual void EndTextureFilter(); virtual void StartTextureFilterUsingAlpha(); virtual void EndTextureFilterUsingAlpha(); virtual void StartTextureFilter2X(); virtual void EndTextureFilter2X(); // ¹Ó¸Ê ¹ÙÀ̾ ¼³Á¤ virtual void SetMipmapBias( float fMipmapBias ); // ¸Þ¸ð¸® Á¤º¸ °»½Å virtual void UpdateMemoryInfo(); protected: // ÅØ½ºÃ³ ÆÄ±« virtual void DestroyTextureInfoPtr( St_TextureContainer* ptc ); // ÆÄÀÏ °æ·Î ¼öÁ¤/°Ë»ç BOOL ConvertFilePathAndCheck( const char* lpszFilePath, char* lpszConvPath ); // ÇØ´ç Á¤º¸¸¦ ÄÁÅ×À̳ʿ¡ Ãß°¡ HANDLE New_AddTexture( const char* lpszFilePath, DWORD dwLoadStyle, BOOL& bAlreadyExist, float fTextureRate = -1.0f ); // ½ÇÁ¦ ÅØ½ºÃ³ »ý¼º BOOL New_LoadTexture( St_TextureContainer* ptc ); // À̹ÌÁö ¹öÆÛ·ÎºÎÅÍ ÅØ½ºÃ³ »ý¼º BOOL New_CreateTexture( St_TextureContainer* ptc, const BYTE* pbyBuffer, int iBufferSize, int iWidth, int iHeight, int iNumComponents, int iImageWidth, int iImageHeight, PixFormat pixFormat = PF_UNKNOWN ); // À̹ÌÁö ¹öÆÛ·ÎºÎÅÍ ÅØ½ºÃ³ »ý¼º BOOL New_CreateTextureMT( St_TextureContainer* ptc, const BYTE* pbyBuffer, int iBufferSize, int iWidth, int iHeight, int iNumComponents, int iImageWidth, int iImageHeight, PixFormat pixFormat = PF_UNKNOWN ); // ÅØ½ºÃ³ »ý¼º virtual HANDLE GenerateTexture( const BYTE* pbyBuffer, int iWidth, int iHeight, int iNumComponents, int iImageWidth, int iImageHeight, const char* lpszFileName, DWORD dwLoadStyle = 0 ); // µ¥ÀÌŸ º¹»ç BOOL ConvertImageBlock( BYTE* pbyDstBuffer, D3DFORMAT d3dfmtDst, int iDstLPitch, const BYTE* pbySrcBuffer, D3DFORMAT d3dfmtSrc, int iSrcLPitchWidth, int iSrcWidth, int iSrcHeight ); BOOL ConvertBumpMap( St_TextureContainer* ptc ); // »ùÇøµ ¹æ½Ä ÃʱâÈ­ void InitSamplerState(); // ÅØ½ºÃ³ ¼³Á¤ virtual BOOL SetTextureInfo( St_TextureContainer* ptc, int iTextureStage = 0 ); // D3D Format ¾ò±â D3DFORMAT GetD3DFormatToTry( int iNumComponents ); // D3D Format ÄÄÆ÷³ÍÆ® ¼ö ¾ò±â int GetNumComponentOfD3DFormat( D3DFORMAT d3dfmt ); // ¸Þ¸ð¸® Á¤º¸ ÃʱâÈ­ void InitMemoryInfo(); private: // º¯¼ö ÃʱâÈ­ void InitVariables(); // ÇØÁ¦ void ReleaseContents(); protected: IDirect3DSurface9* m_pOldRenderTarget; IDirect3DSurface9* m_pOldDepthStencilSurface; DWORD m_dwMapping[MAX_TEXTURE_STAGE]; // ¸ÊÇÎÇÏ´Â ¹æ½Ä (ÇöÀç Àû¿ëµÈ °ÍÀÌ ¹«¾ùÀÎÁö¿¡ ´ëÇÑ Á¤º¸) BOOL m_bAutoGenMipmap; LPDIRECTDRAW7 m_lpDD; // ºñµð¿À ¸Þ¸ð¸® Á¤º¸ ¾ò±â }; #endif // _3DRENDERER_MANAGERTEXTURED3D_H_