OSDN Git Service

#xxxxx DTXViewerのプロジェクトを追加。
[dtxmania/dtxmania.git] / DTXViewerプロジェクト / @FDK10プロジェクト / CSurface.h
diff --git a/DTXViewerプロジェクト/@FDK10プロジェクト/CSurface.h b/DTXViewerプロジェクト/@FDK10プロジェクト/CSurface.h
new file mode 100644 (file)
index 0000000..eed4094
--- /dev/null
@@ -0,0 +1,174 @@
+#pragma once
+
+#include "CD3DApplication.h"
+#include "FDKError.h"
+
+namespace FDK {
+       namespace Graphics {
+               
+enum LOADPLACE {
+       LOADTO_VIDEO,                           // VIDEO MEMORY \82É\8dì\90¬\82µ\81A\8e¸\94s\82µ\82½\82ç\83G\83\89\81[\81B
+       LOADTO_SYSTEM,                          // SYSTEM MEMORY \82É\8dì\90¬\82µ\81A\8e¸\94s\82µ\82½\82ç\83G\83\89\81[\81B
+       LOADTO_VIDEO_OR_SYSTEM,         // VIDEO MEMORY \82É\8dì\90¬\82µ\81A\8e¸\94s\82µ\82½\82ç SYSTEM MEMORY \82É\8dì\90¬\82µ\81A\82³\82ç\82É\8e¸\94s\82µ\82½\82ç\83G\83\89\81[\81B
+       LOADTO_NULL
+
+       // \92\8d\88Ó\81F
+       // (1) \83T\81[\83t\83F\83C\83X\82à\82È\82é\82×\82­ VIDEO \82É\8dì\82é\82×\82«\81iLOADTO_SYSTEM \82ð\8eg\82¤\82Æ\95\\8e¦\82ª\83N\83\\8fd\82½\82­\82È\82é\83O\83\89\83{\82ª\82 \82é\81iATI ALL-IN-WONDER128\82È\82Ç\81j\81j\82¾\82ª\81A
+       //     \83T\81[\83t\83F\83C\83X\82É\82Í\83e\83N\83X\83`\83\83\82Ì\82æ\82¤\82È\8e©\93®\8aÇ\97\9d\8b@\94\\82Í\82È\82¢\82½\82ß\81A\82 \82Ü\82è VIDEO \82ð\90è\97L\82·\82é\82Æ\83e\83N\83X\83`\83\83\82Ì\8a\88\97p\82Å\82«\82é VIDEO \82ª\8c¸\82é\82Ì\82Å
+       // \81@\81@\83o\83\89\83\93\83X\82ð\8dl\82¦\82é\82±\82Æ\81B
+       // \81@\81@\83r\83f\83I\83\81\83\82\83\8a\82ª\91«\82ç\82È\82¢\8fê\8d\87\81A\83e\83N\83X\83`\83\83\82Í\82»\82Ì\8ec\82è\8f­\82È\82¢\97Ì\88æ\82Å\82Ü\82í\82³\82È\82¯\82ê\82Î\82È\82ç\82È\82­\82È\82é\81B
+       // (2) CSurface \82Ö Blt \82·\82é\82½\82ß\82Ì\83T\81[\83t\83F\83C\83X\82Í\95K\82¸ LOADTO_VIDEO \82Å\8dì\90¬\82·\82é\82±\82Æ\81B(SYSTEM\95s\89Â)
+};
+
+class CSurface
+{
+public:
+       // \8bó\83T\81[\83t\83F\83C\83X\8dì\90¬\82Ì\82½\82ß\82Ì\8f\89\8aú\90Ý\92è(1)\81B
+       // \82±\82±\82Å\82Í\83T\81[\83t\83F\83C\83X\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
+       void InitDeviceObjects( LPCTSTR name, DWORD width, DWORD height, LOADPLACE place=LOADTO_VIDEO_OR_SYSTEM, LPDDPIXELFORMAT pFormat=NULL );
+
+       // \8bó\83T\81[\83t\83F\83C\83X\8dì\90¬\82Ì\82½\82ß\82Ì\8f\89\8aú\90Ý\92è(2)\81B
+       // \82±\82±\82Å\82Í\83T\81[\83t\83F\83C\83X\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
+       void InitDeviceObjectsFromFile( LPCTSTR name, LPCTSTR filename, DWORD width=0, DWORD height=0, LOADPLACE place=LOADTO_VIDEO_OR_SYSTEM, LPDDPIXELFORMAT pFormat=NULL );
+
+       // \83\81\83\82\83\8a\83t\83@\83C\83\8b\82©\82ç\83T\81[\83t\83F\83C\83X\82ð\8dì\90¬\82·\82é\82½\82ß\82Ì\8f\89\8aú\90Ý\92è\81B
+       // \82±\82±\82Å\82Í\83T\81[\83t\83F\83C\83X\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
+       void InitDeviceObjectsFromMemory( LPCTSTR name, BYTE* pData, DWORD dwDataSize, DWORD width=0, DWORD height=0, LOADPLACE place=LOADTO_VIDEO_OR_SYSTEM, LPDDPIXELFORMAT pFormat=NULL );
+
+       // \83\8a\83\\81[\83X\82©\82ç\83T\81[\83t\83F\83C\83X\82ð\8dì\90¬\82·\82é\82½\82ß\82Ì\8f\89\8aú\90Ý\92è\81B
+       // \82±\82±\82Å\82Í\83T\81[\83t\83F\83C\83X\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
+       void InitDeviceObjectsFromResource( LPCTSTR name, LPCTSTR lpResourceName, LPCTSTR lpResourceType, DWORD width=0, DWORD height=0, LOADPLACE place=LOADTO_VIDEO_OR_SYSTEM, LPDDPIXELFORMAT pFormat=NULL );
+
+       // \83T\81[\83t\83F\83C\83X\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();              // \83T\81[\83t\83F\83C\83X\82Ì\96³\8cø\89»\81i\93à\95\94\8fó\91Ô\82Í\88Û\8e\9d\81j
+       HRESULT DeleteDeviceObjects();                  // \83T\81[\83t\83F\83C\83X\82Ì\94j\8aü
+
+       void    SetAlphaConst( int a );                 // \8cÅ\92è\83¿\92l\82Ì\93o\98^\81ia = 0\81`255\81j
+       HRESULT SetColorKey();                                  // \8d\8fã\8b÷\82Ì\90F\82ð\83J\83\89\81[\83L\81[\82É\90Ý\92è\82·\82é
+       HRESULT SetColorKey( DWORD dwColor );   // \8ew\92è\90F\82ð\83J\83\89\81[\83L\81[\82É\90Ý\92è\82·\82é
+       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 Clear( LPRECT prc=NULL );               // \83T\81[\83t\83F\83C\83X\82Ì\83N\83\8a\83A
+       
+       // \8ew\92è\83T\81[\83t\83F\83C\83X\82Ö\82Ì\95`\89æ(1)
+       // Appx: CTexture::m_pTexture \82Ö\95`\89æ\82·\82é\8fê\8d\87\82Í\81ACSurface \82Í LOADTO_VIDEO \82Å\82 \82é\82±\82Æ\81B
+       // \81@\81@\81@(Blt \82Í\93¯\82\83t\83H\81[\83}\83b\83g\82Å\82È\82¢\82Æ\93]\91\97\82Å\82«\82È\82¢\82Á\82Û\82¢\81BDD_OK \82Í\95Ô\82·\82ª\81B\81j
+       HRESULT Draw( LPDIRECTDRAWSURFACE7 pDest, int x, int y, LPCRECT pSrc=NULL );
+       
+       // \8ew\92è\83T\81[\83t\83F\83C\83X\82Ö\82Ì\95`\89æ(2)
+       // Appx: CTexture::m_pTexture \82Ö\95`\89æ\82·\82é\8fê\8d\87\82Í\81ACSurface \82Í LOADTO_VIDEO \82Å\82 \82é\82±\82Æ\81B
+       // \81@\81@\81@(Blt \82Í\93¯\82\83t\83H\81[\83}\83b\83g\82Å\82È\82¢\82Æ\93]\91\97\82Å\82«\82È\82¢\82Á\82Û\82¢\81BDD_OK \82Í\95Ô\82·\82ª\81B\81j
+       HRESULT Draw( int x, int y, LPCRECT pSrc=NULL ) {
+               return Draw( CD3DApplication::pddsBackBuffer, x, y, pSrc );
+       }
+       
+       // \8ew\92è\83T\81[\83t\83F\83C\83X\82Ö\82Ì\95`\89æ(3)
+       // Appx: CTexture::m_pTexture \82Ö\95`\89æ\82·\82é\8fê\8d\87\82Í\81ACSurface \82Í LOADTO_VIDEO \82Å\82 \82é\82±\82Æ\81B
+       // \81@\81@\81@(Blt \82Í\93¯\82\83t\83H\81[\83}\83b\83g\82Å\82È\82¢\82Æ\93]\91\97\82Å\82«\82È\82¢\82Á\82Û\82¢\81BDD_OK \82Í\95Ô\82·\82ª\81B\81j
+       HRESULT Draw( CSurface *pDest, int x, int y, LPRECT pSrc=NULL ) {
+               return Draw( pDest->pSurface, x, y, pSrc );
+       }
+       
+       // m_nAlphaConst(<255) \82ð\94½\89f\82³\82¹\82½\95`\89æ\81i\83\\83t\83g\8f\88\97\9d\81j\81B
+       // \93]\91\97\90æ\82ª\83A\83\8b\83t\83@\82ð\8e\9d\82Â\8fê\8d\87\81i\83e\83N\83X\83`\83\83\82È\82Ç\81j\81A\93]\91\97\90æ\82Ì\83A\83\8b\83t\83@\82Í
+       // \8fí\82É\8dÅ\91å\92l\82Æ\82È\82è\81A\90F\92l\82Ì\95û\82Å m_nAlphaConst \82ª\94½\89f\82³\82ê\82é\81B
+       // \82½\82¾\82µ\93]\91\97\90æ\82ª 24bit \82Ì\8fê\8d\87\82Í\81A\83A\83\8b\83t\83@\82ð\8e\9d\82Á\82Ä\82¢\82Ä\82à\83T\83|\81[\83g\82Í\82µ\82È\82¢\81B
+       HRESULT BlendDraw( LPDIRECTDRAWSURFACE7 pDest, int x, int y, LPCRECT pSrc=NULL );
+
+       // \83T\81[\83t\83F\83C\83X\82Ö\82Ì\95\8e\9a\97ñ\95`\89æ(1)
+       HRESULT Text( int x, int y, HFONT hFont, LPCTSTR str, COLORREF color=RGB(255,255,255) );
+
+       // \83T\81[\83t\83F\83C\83X\82Ö\82Ì\95\8e\9a\97ñ\95`\89æ(2)
+       HRESULT Text( int x, int y, HFONT hFont, tstring &str, COLORREF color=RGB(255,255,255) ) {
+               return Text(x,y,hFont,str.c_str(),color);
+       }
+       // \83T\81[\83t\83F\83C\83X\82Ö\82Ì\95\8e\9a\97ñ\95`\89æ\82É\95K\97v\82È\95\9d\81i\83h\83b\83g\81j\82ð\95Ô\82·
+       int     GetTextWidthDot( HFONT hFont, LPCTSTR str\95\8e\9a\97ñ );
+
+       // \83T\81[\83t\83F\83C\83X\82Ö\82Ì\95\8e\9a\97ñ\95`\89æ(3)\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
+       HRESULT TextSharp( int x, int y, HFONT hFont, LPCTSTR str, COLORREF color=RGB(255,255,255) );
+
+       // \83T\81[\83t\83F\83C\83X\83T\83C\83Y\82Ì\8eæ\93¾
+       DWORD GetSurfaceSize();
+
+       CSurface();
+       virtual ~CSurface();
+
+public:
+       LPDIRECTDRAWSURFACE7    pSurface;
+
+       int                             nAlphaConst;                    // \83A\83\8b\83t\83@\92l\81i\92è\90\94 0\81`255\81j
+       DWORD                   dwWidth;                                // \83T\81[\83t\83F\83C\83X\82Ì\95\9d
+       DWORD                   dwHeight;                               // \83T\81[\83t\83F\83C\83X\82Ì\8d\82\82³
+       LOADPLACE               place;                                  // \83T\81[\83t\83F\83C\83X\82Ì\94z\92u\8fê\8f\8a
+       bool                    bColorKeyEnable;                // \83J\83\89\81[\83L\81[\82ª\97L\8cø\82È\82ç true
+       DWORD                   dwColorKey;                             // \83J\83\89\81[\83L\81[(32bit)
+       tstring                 strSurfaceName;                 // \83T\81[\83t\83F\83C\83X\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
+       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
+       DDPIXELFORMAT   ddpfReference;                  // Create\8e\9e\82Ì\83\8a\83t\83@\83\8c\83\93\83X\83t\83H\81[\83}\83b\83g
+
+protected:
+       // \83T\81[\83t\83F\83C\83X\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, LOADPLACE place, LPDDPIXELFORMAT pFormat );
+
+       // \83t\83@\83C\83\8b\82©\82ç\82Ì\83T\81[\83t\83F\83C\83X\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 RestoreDeviceObjectsFromFile();
+
+       // \83\81\83\82\83\8a\83C\83\81\81[\83W\82©\82ç\82Ì\83T\81[\83t\83F\83C\83X\82Ì\93Ç\82Ý\8d\9e\82Ý\82Æ\8d\\92z\81B
+       // \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Ì\83T\81[\83t\83F\83C\83X\82Ì\93Ç\82Ý\8d\9e\82Ý\82Æ\8d\\92z\81B
+       // \81¦ PNG \82Ì\82Ý\91Î\89\9e\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 RestoreDeviceObjectsFromResource();
+
+       // \83r\83b\83g\83}\83b\83v hBitmap \82©\82ç\83T\81[\83t\83F\83C\83X\82ð\8d\\92z\82·\82é\81B
+       HRESULT RestoreFromBitmap( HBITMAP hBitmap );
+
+       // JPEG/PNG \83f\81[\83^\82©\82ç\83T\81[\83t\83F\83C\83X\82ð\8d\\92z\82·\82é\81B
+       HRESULT RestoreFromBitmap( BITMAPINFO* pbinfo, BYTE* pbdata );
+
+       // \8bó\82Ì\83T\81[\83t\83F\83C\83X\82Ì\8dì\90¬\81G
+       // \83T\83C\83Y\81im_dwWidth \81~ m_dwHeight\81j\82Ì\8bó\82Ì\83T\81[\83t\83F\83C\83X\82ð\8dì\90¬\82·\82é\81B
+       HRESULT Create();
+
+       void    BlendDraw16to16( LPDDSURFACEDESC2 pddsdSrc, LPCRECT prcSrc, LPDDSURFACEDESC2 pddsdDst, int x, int y );
+       void    BlendDraw16to24( LPDDSURFACEDESC2 pddsdSrc, LPCRECT prcSrc, LPDDSURFACEDESC2 pddsdDst, int x, int y );
+       void    BlendDraw16to32( LPDDSURFACEDESC2 pddsdSrc, LPCRECT prcSrc, LPDDSURFACEDESC2 pddsdDst, int x, int y );
+       void    BlendDraw24to16( LPDDSURFACEDESC2 pddsdSrc, LPCRECT prcSrc, LPDDSURFACEDESC2 pddsdDst, int x, int y );
+       void    BlendDraw24to24( LPDDSURFACEDESC2 pddsdSrc, LPCRECT prcSrc, LPDDSURFACEDESC2 pddsdDst, int x, int y );
+       void    BlendDraw24to32( LPDDSURFACEDESC2 pddsdSrc, LPCRECT prcSrc, LPDDSURFACEDESC2 pddsdDst, int x, int y );
+       void    BlendDraw32to16( LPDDSURFACEDESC2 pddsdSrc, LPCRECT prcSrc, LPDDSURFACEDESC2 pddsdDst, int x, int y );
+       void    BlendDraw32to24( LPDDSURFACEDESC2 pddsdSrc, LPCRECT prcSrc, LPDDSURFACEDESC2 pddsdDst, int x, int y );
+       void    BlendDraw32to32( LPDDSURFACEDESC2 pddsdSrc, LPCRECT prcSrc, LPDDSURFACEDESC2 pddsdDst, int x, int y );
+       void    CopyFromBMP32x4( int x, int y, BITMAP* bmp, bool bSkipBlack );
+
+       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ç RestoreDeviceObject()\82ð\8cÄ\82Ñ\8fo\82·\81B
+};
+
+       }//Graphics
+}//FDK
+
+using namespace FDK::Graphics;