--- /dev/null
+#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;