OSDN Git Service

#xxxxx DTXViewerのプロジェクトを追加。
[dtxmania/dtxmania.git] / DTXViewerプロジェクト / @FDK10プロジェクト / CTexture.h
diff --git a/DTXViewerプロジェクト/@FDK10プロジェクト/CTexture.h b/DTXViewerプロジェクト/@FDK10プロジェクト/CTexture.h
new file mode 100644 (file)
index 0000000..1fb41e8
--- /dev/null
@@ -0,0 +1,145 @@
+#pragma once
+
+namespace FDK {
+       namespace Graphics {
+
+#define MAX_NUM_FORMATS                64              // \97ñ\8b\93\82·\82é\8dÅ\91å\82Ì\83s\83N\83Z\83\8b\83t\83H\81[\83}\83b\83g\90\94
+
+class CTexture
+{
+public:
+       // \8bó\83e\83N\83X\83`\83\83\8dì\90¬\82Ì\82½\82ß\82Ì\8f\89\8aú\90Ý\92è(1)\81B
+       // \82±\82±\82Å\82Í\83e\83N\83X\83`\83\83\82Ì \96¼\91O\81A\83T\83C\83Y\81A\94z\92u\8fê\8f\8a \82ð\93à\95\94\82É\8bL\89¯\82³\82¹\82é\82¾\82¯\82Å\81A\83f\83o\83C\83X\8aÖ\8cW\82Ì\8f\88\97\9d\82Í\88ê\90Ø\8ds\82í\82È\82¢\81B
+       HRESULT InitDeviceObjects( TCHAR* name, DWORD width, DWORD height, bool bSkipBlack=true );
+       
+       // \8bó\83e\83N\83X\83`\83\83\8dì\90¬\82Ì\82½\82ß\82Ì\8f\89\8aú\90Ý\92è(2)\81B
+       // \82±\82±\82Å\82Í\83e\83N\83X\83`\83\83\82Ì \96¼\91O\81A\83t\83@\83C\83\8b\96¼\81A\83T\83C\83Y\81A\94z\92u\8fê\8f\8a \82ð\93à\95\94\82É\8bL\89¯\82³\82¹\82é\82¾\82¯\82Å\81A\83f\83o\83C\83X\8aÖ\8cW\82Ì\8f\88\97\9d\82Í\88ê\90Ø\8ds\82í\82È\82¢\81B
+       // \81¦ width, height \82Å\8ew\92è\82µ\82½\83T\83C\83Y\82É\89æ\91\9c\82ª\8ag\91å\81^\8fk\8f¬\82³\82ê\82Ä\93Ç\82Ý\8d\9e\82Ü\82ê\82é\81B
+       // \81¦ width == 0 & height == 0 \82Ì\8fê\8d\87\82Í\81A\83t\83@\83C\83\8b\89æ\91\9c\82Ì\83T\83C\83Y\82É\82È\82é\81B
+       HRESULT InitDeviceObjectsFromFile( LPCTSTR name, LPCTSTR filename, DWORD width=0, DWORD height=0, bool bSkipBlack=true );
+
+       // \83\81\83\82\83\8a\83t\83@\83C\83\8b\82©\82ç\83e\83N\83X\83`\83\83\82ð\8dì\90¬\82·\82é\82½\82ß\82Ì\8f\89\8aú\90Ý\92è\81B
+       // \82±\82±\82Å\82Í\83e\83N\83X\83`\83\83\82Ì \96¼\91O\81A\83f\81[\83^\81A\83f\81[\83^\83T\83C\83Y\81A\83T\83C\83Y\81A\94z\92u\8fê\8f\8a \82ð\93à\95\94\82É\8bL\89¯\82³\82¹\82é\82¾\82¯\82Å\81A\83f\83o\83C\83X\8aÖ\8cW\82Ì\8f\88\97\9d\82Í\88ê\90Ø\8ds\82í\82È\82¢\81B
+       // \81¦ width, height \82Å\8ew\92è\82µ\82½\83T\83C\83Y\82É\89æ\91\9c\82ª\8ag\91å\81^\8fk\8f¬\82³\82ê\82Ä\93Ç\82Ý\8d\9e\82Ü\82ê\82é\81B
+       // \81¦ width == 0 & height == 0 \82Ì\8fê\8d\87\82Í\81A\83t\83@\83C\83\8b\89æ\91\9c\82Ì\83T\83C\83Y\82É\82È\82é\81B
+       HRESULT InitDeviceObjectsFromFileInMemory( TCHAR* name, BYTE* pData, DWORD dwDataSize, DWORD width=0, DWORD height=0, bool bSkipBlack=true );
+
+       // \83\8a\83\\81[\83X\82©\82ç\83e\83N\83X\83`\83\83\82ð\8dì\90¬\82·\82é\82½\82ß\82Ì\8f\89\8aú\90Ý\92è\81B
+       // \82±\82±\82Å\82Í\83e\83N\83X\83`\83\83\82Ì \96¼\91O\81A\83f\81[\83^\81A\83f\81[\83^\83T\83C\83Y\81A\83T\83C\83Y\81A\94z\92u\8fê\8f\8a \82ð\93à\95\94\82É\8bL\89¯\82³\82¹\82é\82¾\82¯\82Å\81A\83f\83o\83C\83X\8aÖ\8cW\82Ì\8f\88\97\9d\82Í\88ê\90Ø\8ds\82í\82È\82¢\81B
+       // \81¦ width, height \82Å\8ew\92è\82µ\82½\83T\83C\83Y\82É\89æ\91\9c\82ª\8ag\91å\81^\8fk\8f¬\82³\82ê\82Ä\93Ç\82Ý\8d\9e\82Ü\82ê\82é\81B
+       // \81¦ width == 0 & height == 0 \82Ì\8fê\8d\87\82Í\81A\83t\83@\83C\83\8b\89æ\91\9c\82Ì\83T\83C\83Y\82É\82È\82é\81B
+       HRESULT InitDeviceObjectsFromResource( TCHAR* name, LPCTSTR lpResourceName, LPCTSTR lpResourceType, DWORD width=0, DWORD height=0, bool bSkipBlack=true );
+
+       // \83e\83N\83X\83`\83\83\82Ì\93Ç\82Ý\8d\9e\82Ý\82Æ\8d\\92z\81B
+       // \81¦ width, height \82Å\8ew\92è\82µ\82½\83T\83C\83Y\82É\89æ\91\9c\82ª\8ag\91å\81^\8fk\8f¬\82³\82ê\82Ä\93Ç\82Ý\8d\9e\82Ü\82ê\82é\81B
+       HRESULT RestoreDeviceObjects();
+
+       HRESULT InvalidateDeviceObjects();              // \83e\83N\83X\83`\83\83\82Ì\96³\8cø\89»\81B
+       HRESULT DeleteDeviceObjects();                  // \83e\83N\83X\83`\83\83\82Ì\94j\8aü
+
+       HRESULT SetAlphaConst( int a );                                                                                                 // \8cÅ\92è\83¿\92l\82Ì\93o\98^(a = 0\81`255)
+       HRESULT AddBlendEnable( bool f=true )   { this->bUseAddBlend = f; return S_OK; }
+       HRESULT SetColorKey();                                                                                                                  // \8d\8fã\8b÷\82Ì\90F\82ð\83J\83\89\81[\83L\81[\82É\82·\82é\81B
+       HRESULT SetColorKey( DWORD dwColor );                                                                                   // \8ew\92è\90F\82ð\83J\83\89\81[\83L\81[\82É\90Ý\92è\82·\82é\81B
+       void    ColorKeyEnable( bool f=true )   { this->bColorKeyEnable = f; }                  // \83J\83\89\81[\83L\81[\82Ì ON/OFF\81Btrue \82Å ON\81B
+       HRESULT GetDC( HDC *phdc );                                                                                                             // \83f\83o\83C\83X\83R\83\93\83e\83L\83X\83g\82Ì\8eæ\93¾
+       HRESULT ReleaseDC( HDC &hdc );                                                                                                  // \83f\83o\83C\83X\83R\83\93\83e\83L\83X\83g\82Ì\89ð\95ú
+       HRESULT SetScale( float w, float h );                                                                                   // \83X\83P\81[\83\8b\82Ì\95Ï\8dX
+       void    GetScale( float* w, float* h ) { *w=this->fScaleW; *h=this->fScaleH; }  // \83X\83P\81[\83\8b\82Ì\8eæ\93¾
+
+       HRESULT Clear( LPRECT prc=NULL );                                                                                               // \83T\81[\83t\83F\83C\83X\82Ì\83N\83\8a\83A
+       HRESULT Draw( int x, int y, LPRECT pSrc=NULL );                                                                 // \82Q\82c\95`\89æ\81F\83o\83b\83N\83o\83b\83t\83@\82Ö\82Ì\8f\91\82«\8d\9e\82Ý\82µ\82©\83T\83|\81[\83g\82µ\82È\82¢
+       HRESULT Draw3D( int x, int y, LPRECT prcSrc, D3DXMATRIX *pMat );                                // \82R\82c\8bó\8aÔ\82Ö\82Ì\95`\89æ\81F\83o\83b\83N\83o\83b\83t\83@\82Ö\82Ì\8f\91\82«\8d\9e\82Ý\82µ\82©\83T\83|\81[\83g\82µ\82È\82¢
+
+       // \83e\83N\83X\83`\83\83\82Ö\82Ì\95\8e\9a\97ñ\82Ì\95`\89æ(1)
+       HRESULT Text( int x, int y, HFONT hFont, LPCTSTR str, COLORREF color=RGB(255,255,255) );
+       int             GetTextWidthDot( HFONT hFont, LPCTSTR str\95\8e\9a\97ñ );
+
+       // \83e\83N\83X\83`\83\83\82Ö\82Ì\95\8e\9a\97ñ\82Ì\95`\89æ(2)\83A\83\93\83`\83G\83C\83\8a\83A\83X\95t\82«
+       // \81¦\83t\83H\83\93\83g\82Í\96Ê\90Ï\82S\94{\82Ì\91å\82«\82³\82Ì\82à\82Ì\82ð\8ew\92è\82·\82é\82±\82Æ\81I
+       // \81¦\83A\83\8b\83t\83@\82Í\8fí\82É255\82È\82Ì\82Å\92\8d\88Ó\82·\82é\82±\82Æ\81I\81i\83X\83L\83b\83v\82³\82ê\82é\8d\95\95\94\95ª\82Í\8f\9c\82­\81j
+       HRESULT TextSharp( int x, int y, HFONT hFont, LPCTSTR str, COLORREF color=RGB(255,255,255) );
+
+       // \83e\83N\83X\83`\83\83\83T\81[\83t\83F\83C\83X\83T\83C\83Y\82Ì\8eæ\93¾
+       DWORD   GetSurfaceSize();
+
+       static void EnumTextureFormats();       // \83e\83N\83X\83`\83\83\83t\83H\81[\83}\83b\83g\83\8a\83X\83g\82Ì\8dì\90¬
+       static void BeginScene();                       // \95`\89æ\8aJ\8en
+       static void EndScene();                         // \95`\89æ\8fI\97¹
+
+       CTexture();
+       virtual ~CTexture();
+
+public:
+       LPDIRECTDRAWSURFACE7    pTexture;
+
+       int                             nAlphaConst;
+       bool                    bUseAddBlend;
+       bool                    bColorKeyEnable;
+       DWORD                   dwColorKey;
+       DWORD                   dwWidth;                // \83e\83N\83X\83`\83\83\82Ì\8eÀ\83T\83C\83Y
+       DWORD                   dwHeight;       
+       DWORD                   dwImageWidth;   // \93Ç\82Ý\8d\9e\82Ý\8c³\89æ\91\9c\82Ì\83T\83C\83Y
+       DWORD                   dwImageHeight;
+       float                   fScaleW;                // \89¡\95û\8cü\94{\97¦
+       float                   fScaleH;                // \8fc\95û\8cü\94{\97¦
+       tstring                 strTextureName;                                 // \83e\83N\83X\83`\83\83\96¼\81i\94C\88Ó\81j
+       tstring                 strFileName;                                    // \83t\83@\83C\83\8b\96¼\81i\83t\83@\83C\83\8b\90\90¬\82\82á\82È\82¢\82È\82ç "" \81j
+       bool                    bSkipBlack;             // \89æ\91\9c\8d\\92z\8e\9e(RestoreDevice\81`) \82É\81A\89æ\91\9c\82Ì\8d\95(0)\82ð\83X\83L\83b\83v\82·\82é\82©(BMP,JPEG\82Ì\82Ý\97L\8cø)
+       LPCTSTR                 lpResourceName;                                 // \83\8a\83\\81[\83X\96¼\81i\83\8a\83\\81[\83X\90\90¬\82\82á\82È\82¢\82È\82ç NULL\81j
+       LPCTSTR                 lpResourceType;                                 // \83\8a\83\\81[\83X\83^\83C\83v\81i\83\8a\83\\81[\83X\90\90¬\82\82á\82È\82¢\82È\82ç NULL\81j
+       BYTE*                   pData;                                                  // \83f\81[\83^\82Ö\82Ì\83|\83C\83\93\83^\81i\83\81\83\82\83\8a\82©\82ç\82Ì\90\90¬\82\82á\82È\82¢\82È\82çNULL\81j
+       DWORD                   dwDataSize;                                             // \83f\81[\83^\83T\83C\83Y\81i\83\81\83\82\83\8a\82©\82ç\82Ì\90\90¬\82\82á\82È\82¢\82È\82ç0\81j
+
+       static DDPIXELFORMAT    ddpfARGB8888;                           // A8R8G8B8 (32-bit) \83t\83H\81[\83}\83b\83g\81BdwSize = 0 \82È\82ç\8eg\82¦\82È\82¢\81B
+       static DDPIXELFORMAT    ddpfARGB4444;                           // A4R4G4B4 (16-bit) \83t\83H\81[\83}\83b\83g\81BdwSize = 0 \82È\82ç\8eg\82¦\82È\82¢\81B
+
+protected:
+       // \8bó\82Ì\83e\83N\83X\83`\83\83\82Ì\8dì\90¬
+       HRESULT Create();
+       
+       // \83\8c\83\93\83_\83\8a\83\93\83O\83X\83e\81[\83^\83X\82Ì\90Ý\92è
+       void    SetRenderStates();
+
+       // RGB-32bit \82Ì BITMAP \82©\82ç\83e\83N\83X\83`\83\83\82Ö\83R\83s\81[\82·\82é\81B
+       // \83e\83N\83X\83`\83\83\82Ì\83A\83\8b\83t\83@\82Í 0xFF \82Æ\82È\82é\81B
+       // \81@bSkipBlack ... true \82È\82ç\8d\95\90F\82Í\95`\89æ\82¹\82¸\83X\83L\83b\83v\82·\82é\81B
+       void    CopyFromBMP32( int x, int y, BITMAP* bmp, bool bSkipBlack=true );
+
+       // RGB-32bit \82Ì\82S\94{\96Ê\90Ï BITMAP \82©\82ç\83e\83N\83X\83`\83\83\82Ö\8fk\8f¬\83R\83s\81[\82·\82é\81B
+       // \8fk\8f¬\82Í\81A2x2\82Ì\82S\83h\83b\83g\81¨\82P\83h\83b\83g\95Ï\8a·\82Å\8ds\82í\82ê\82é\81B
+       // \82»\82ñ\82½\82ß\81A\83e\83N\83X\83`\83\83\82Ì\83A\83\8b\83t\83@\82Í 0%, 25%, 50%, 75%, 100% \82Ì\82T\8eí\97Þ\82Æ\82È\82é\81B
+       // \81@bSkipBlack ... true \82È\82ç\8d\95\90F\82Í\95`\89æ\82¹\82¸\83X\83L\83b\83v\82·\82é\81B
+       void    CopyFromBMP32x4( int x, int y, BITMAP* bmp, bool bSkipBlack=true );
+
+       // \83e\83N\83X\83`\83\83\82Ì\96¼\91O\81A\83t\83@\83C\83\8b\96¼\81A\83T\83C\83Y\81A\94z\92u\8fê\8f\8a\82ð\93à\95\94\82É\8bL\89¯\82·\82é\81B
+       // \82»\82Ì\91¼\82Ì\83p\83\89\83\81\81[\83^\82Í\83f\83t\83H\83\8b\83g\92l\82É\8f\89\8aú\89»\82·\82é\81B
+       void    InitParameters( LPCTSTR name, LPCTSTR fname, LPCTSTR lpResourceName, LPCTSTR lpResourceType, BYTE* pData, DWORD dwDataSize, DWORD width, DWORD height, bool bSkipBlack );
+
+       // \83t\83@\83C\83\8b\82©\82ç\82Ì\83e\83N\83X\83`\83\83\82Ì\8d\\92z\81B
+       // \81¦ width, height \82Å\8ew\92è\82µ\82½\83T\83C\83Y\82É\89æ\91\9c\82ª\8ag\91å\81^\8fk\8f¬\82³\82ê\82Ä\93Ç\82Ý\8d\9e\82Ü\82ê\82é\81B
+       HRESULT RestoreDeviceObjectsFromFile();
+
+       // \83\81\83\82\83\8a\83C\83\81\81[\83W\82©\82ç\82Ì\83e\83N\83X\83`\83\83\82Ì\93Ç\82Ý\8d\9e\82Ý\82Æ\8d\\92z
+       // \81¦ PNG \82Ì\82Ý\91Î\89\9e
+       // \81¦ width, height \82Å\8ew\92è\82µ\82½\83T\83C\83Y\82É\89æ\91\9c\82ª\8ag\91å\81^\8fk\8f¬\82³\82ê\82Ä\93Ç\82Ý\8d\9e\82Ü\82ê\82é\81B
+       HRESULT RestoreDeviceObjectsFromFileInMemory();
+
+       // \83\8a\83\\81[\83X\82©\82ç\82Ì\83e\83N\83X\83`\83\83\82Ì\93Ç\82Ý\8d\9e\82Ý\82Æ\8d\\92z
+       // \81¦ PNG \82Ì\82Ý\91Î\89\9e
+       // \81¦ width, height \82Å\8ew\92è\82µ\82½\83T\83C\83Y\82É\89æ\91\9c\82ª\8ag\91å\81^\8fk\8f¬\82³\82ê\82Ä\93Ç\82Ý\8d\9e\82Ü\82ê\82é\81B
+       HRESULT RestoreDeviceObjectsFromResource();
+
+       // DDS \82©\82ç\83e\83N\83X\83`\83\83\82ð\8d\\92z\82·\82é\81B
+       HRESULT RestoreFromDDS( DDSURFACEDESC2* pddsd, BYTE** ppimage );
+
+       DWORD   BitCount( DWORD dwNum );                // dwNum \82Ì\83r\83b\83g'1'\82Ì\90\94\82ð\90\94\82¦\82é\81B
+       DWORD   ShiftCount( DWORD dwNum );              // dwNum \82ÌLSB\82©\82ç0\82Ì\91±\82­\8cÂ\90\94\82ð\95Ô\82·\81B\81i\97á\81F0x0020 \81¨ 5\81j
+
+       void LostCheck();               // \83T\81[\83t\83F\83C\83X\82ª\83\8d\83X\83g\82µ\82Ä\82¢\82é\8fê\8d\87\82Í RestoreDeviceObjest() \82ð\8cÄ\82Ñ\8fo\82·\81B
+};
+
+       }//Graphics
+}//FDK
+
+using namespace FDK::Graphics;