\83\97ã\83­ã\82¸ã\82§ã\82¯ã\83\88/CTexture.h on 'feature/Fixing_DirectSound_memoryleak' - RSS feed" href="/view?p=dtxmania/dtxmania.git;a=rss;f=DTXViewer%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88/@FDK10%C3%A3%C2%83%C2%97%C3%A3%C2%83%C2%AD%C3%A3%C2%82%C2%B8%C3%A3%C2%82%C2%A7%C3%A3%C2%82%C2%AF%C3%A3%C2%83%C2%88/CTexture.h;h=refs/heads/feature/Fixing_DirectSound_memoryleak" type="application/rss+xml" /> \83\97ã\83­ã\82¸ã\82§ã\82¯ã\83\88/CTexture.h on 'feature/Fixing_DirectSound_memoryleak' - RSS feed (no merges)" href="/view?p=dtxmania/dtxmania.git;a=rss;f=DTXViewer%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88/@FDK10%C3%A3%C2%83%C2%97%C3%A3%C2%83%C2%AD%C3%A3%C2%82%C2%B8%C3%A3%C2%82%C2%A7%C3%A3%C2%82%C2%AF%C3%A3%C2%83%C2%88/CTexture.h;h=refs/heads/feature/Fixing_DirectSound_memoryleak;opt=--no-merges" type="application/rss+xml" /> \83\97ã\83­ã\82¸ã\82§ã\82¯ã\83\88/CTexture.h on 'feature/Fixing_DirectSound_memoryleak' - Atom feed" href="/view?p=dtxmania/dtxmania.git;a=atom;f=DTXViewer%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88/@FDK10%C3%A3%C2%83%C2%97%C3%A3%C2%83%C2%AD%C3%A3%C2%82%C2%B8%C3%A3%C2%82%C2%A7%C3%A3%C2%82%C2%AF%C3%A3%C2%83%C2%88/CTexture.h;h=refs/heads/feature/Fixing_DirectSound_memoryleak" type="application/atom+xml" /> \83\97ã\83­ã\82¸ã\82§ã\82¯ã\83\88/CTexture.h on 'feature/Fixing_DirectSound_memoryleak' - Atom feed (no merges)" href="/view?p=dtxmania/dtxmania.git;a=atom;f=DTXViewer%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88/@FDK10%C3%A3%C2%83%C2%97%C3%A3%C2%83%C2%AD%C3%A3%C2%82%C2%B8%C3%A3%C2%82%C2%A7%C3%A3%C2%82%C2%AF%C3%A3%C2%83%C2%88/CTexture.h;h=refs/heads/feature/Fixing_DirectSound_memoryleak;opt=--no-merges" type="application/atom+xml" />

OSDN Git Service

DirectSoundでClone()するとメモリリークする問題修正の途中版。WAVデータ実体への参照カウンタを実装済み。
[dtxmania/dtxmania.git] / DTXViewerプロジェクト / @FDK10ã\83\97ã\83­ã\82¸ã\82§ã\82¯ã\83\88 / CTexture.h
1 #pragma once
2
3 namespace FDK {
4         namespace Graphics {
5
6 #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
7
8 class CTexture
9 {
10 public:
11         // \8bó\83e\83N\83X\83`\83\83\8dì\90¬\82Ì\82½\82ß\82Ì\8f\89\8aú\90Ý\92è(1)\81B
12         // \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
13         HRESULT InitDeviceObjects( TCHAR* name, DWORD width, DWORD height, bool bSkipBlack=true );
14         
15         // \8bó\83e\83N\83X\83`\83\83\8dì\90¬\82Ì\82½\82ß\82Ì\8f\89\8aú\90Ý\92è(2)\81B
16         // \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
17         // \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
18         // \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
19         HRESULT InitDeviceObjectsFromFile( LPCTSTR name, LPCTSTR filename, DWORD width=0, DWORD height=0, bool bSkipBlack=true );
20
21         // \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
22         // \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
23         // \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
24         // \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
25         HRESULT InitDeviceObjectsFromFileInMemory( TCHAR* name, BYTE* pData, DWORD dwDataSize, DWORD width=0, DWORD height=0, bool bSkipBlack=true );
26
27         // \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
28         // \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
29         // \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
30         // \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
31         HRESULT InitDeviceObjectsFromResource( TCHAR* name, LPCTSTR lpResourceName, LPCTSTR lpResourceType, DWORD width=0, DWORD height=0, bool bSkipBlack=true );
32
33         // \83e\83N\83X\83`\83\83\82Ì\93Ç\82Ý\8d\9e\82Ý\82Æ\8d\\92z\81B
34         // \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
35         HRESULT RestoreDeviceObjects();
36
37         HRESULT InvalidateDeviceObjects();              // \83e\83N\83X\83`\83\83\82Ì\96³\8cø\89»\81B
38         HRESULT DeleteDeviceObjects();                  // \83e\83N\83X\83`\83\83\82Ì\94j\8aü
39
40         HRESULT SetAlphaConst( int a );                                                                                                 // \8cÅ\92è\83¿\92l\82Ì\93o\98^(a = 0\81`255)
41         HRESULT AddBlendEnable( bool f=true )   { this->bUseAddBlend = f; return S_OK; }
42         HRESULT SetColorKey();                                                                                                                  // \8d\8fã\8b÷\82Ì\90F\82ð\83J\83\89\81[\83L\81[\82É\82·\82é\81B
43         HRESULT SetColorKey( DWORD dwColor );                                                                                   // \8ew\92è\90F\82ð\83J\83\89\81[\83L\81[\82É\90Ý\92è\82·\82é\81B
44         void    ColorKeyEnable( bool f=true )   { this->bColorKeyEnable = f; }                  // \83J\83\89\81[\83L\81[\82Ì ON/OFF\81Btrue \82Å ON\81B
45         HRESULT GetDC( HDC *phdc );                                                                                                             // \83f\83o\83C\83X\83R\83\93\83e\83L\83X\83g\82Ì\8eæ\93¾
46         HRESULT ReleaseDC( HDC &hdc );                                                                                                  // \83f\83o\83C\83X\83R\83\93\83e\83L\83X\83g\82Ì\89ð\95ú
47         HRESULT SetScale( float w, float h );                                                                                   // \83X\83P\81[\83\8b\82Ì\95Ï\8dX
48         void    GetScale( float* w, float* h ) { *w=this->fScaleW; *h=this->fScaleH; }  // \83X\83P\81[\83\8b\82Ì\8eæ\93¾
49
50         HRESULT Clear( LPRECT prc=NULL );                                                                                               // \83T\81[\83t\83F\83C\83X\82Ì\83N\83\8a\83A
51         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¢
52         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¢
53
54         // \83e\83N\83X\83`\83\83\82Ö\82Ì\95\8e\9a\97ñ\82Ì\95`\89æ(1)
55         HRESULT Text( int x, int y, HFONT hFont, LPCTSTR str, COLORREF color=RGB(255,255,255) );
56         int             GetTextWidthDot( HFONT hFont, LPCTSTR str\95\8e\9a\97ñ );
57
58         // \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«
59         // \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
60         // \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
61         HRESULT TextSharp( int x, int y, HFONT hFont, LPCTSTR str, COLORREF color=RGB(255,255,255) );
62
63         // \83e\83N\83X\83`\83\83\83T\81[\83t\83F\83C\83X\83T\83C\83Y\82Ì\8eæ\93¾
64         DWORD   GetSurfaceSize();
65
66         static void EnumTextureFormats();       // \83e\83N\83X\83`\83\83\83t\83H\81[\83}\83b\83g\83\8a\83X\83g\82Ì\8dì\90¬
67         static void BeginScene();                       // \95`\89æ\8aJ\8en
68         static void EndScene();                         // \95`\89æ\8fI\97¹
69
70         CTexture();
71         virtual ~CTexture();
72
73 public:
74         LPDIRECTDRAWSURFACE7    pTexture;
75
76         int                             nAlphaConst;
77         bool                    bUseAddBlend;
78         bool                    bColorKeyEnable;
79         DWORD                   dwColorKey;
80         DWORD                   dwWidth;                // \83e\83N\83X\83`\83\83\82Ì\8eÀ\83T\83C\83Y
81         DWORD                   dwHeight;       
82         DWORD                   dwImageWidth;   // \93Ç\82Ý\8d\9e\82Ý\8c³\89æ\91\9c\82Ì\83T\83C\83Y
83         DWORD                   dwImageHeight;
84         float                   fScaleW;                // \89¡\95û\8cü\94{\97¦
85         float                   fScaleH;                // \8fc\95û\8cü\94{\97¦
86         tstring                 strTextureName;                                 // \83e\83N\83X\83`\83\83\96¼\81i\94C\88Ó\81j
87         tstring                 strFileName;                                    // \83t\83@\83C\83\8b\96¼\81i\83t\83@\83C\83\8b\90\90¬\82\82á\82È\82¢\82È\82ç "" \81j
88         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ø)
89         LPCTSTR                 lpResourceName;                                 // \83\8a\83\\81[\83X\96¼\81i\83\8a\83\\81[\83X\90\90¬\82\82á\82È\82¢\82È\82ç NULL\81j
90         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
91         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
92         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
93
94         static DDPIXELFORMAT    ddpfARGB8888;                           // A8R8G8B8 (32-bit) \83t\83H\81[\83}\83b\83g\81BdwSize = 0 \82È\82ç\8eg\82¦\82È\82¢\81B
95         static DDPIXELFORMAT    ddpfARGB4444;                           // A4R4G4B4 (16-bit) \83t\83H\81[\83}\83b\83g\81BdwSize = 0 \82È\82ç\8eg\82¦\82È\82¢\81B
96
97 protected:
98         // \8bó\82Ì\83e\83N\83X\83`\83\83\82Ì\8dì\90¬
99         HRESULT Create();
100         
101         // \83\8c\83\93\83_\83\8a\83\93\83O\83X\83e\81[\83^\83X\82Ì\90Ý\92è
102         void    SetRenderStates();
103
104         // RGB-32bit \82Ì BITMAP \82©\82ç\83e\83N\83X\83`\83\83\82Ö\83R\83s\81[\82·\82é\81B
105         // \83e\83N\83X\83`\83\83\82Ì\83A\83\8b\83t\83@\82Í 0xFF \82Æ\82È\82é\81B
106         // \81@bSkipBlack ... true \82È\82ç\8d\95\90F\82Í\95`\89æ\82¹\82¸\83X\83L\83b\83v\82·\82é\81B
107         void    CopyFromBMP32( int x, int y, BITMAP* bmp, bool bSkipBlack=true );
108
109         // 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
110         // \8fk\8f¬\82Í\81A2x2\82Ì\82S\83h\83b\83g\81¨\82P\83h\83b\83g\95Ï\8a·\82Å\8ds\82í\82ê\82é\81B
111         // \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
112         // \81@bSkipBlack ... true \82È\82ç\8d\95\90F\82Í\95`\89æ\82¹\82¸\83X\83L\83b\83v\82·\82é\81B
113         void    CopyFromBMP32x4( int x, int y, BITMAP* bmp, bool bSkipBlack=true );
114
115         // \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
116         // \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
117         void    InitParameters( LPCTSTR name, LPCTSTR fname, LPCTSTR lpResourceName, LPCTSTR lpResourceType, BYTE* pData, DWORD dwDataSize, DWORD width, DWORD height, bool bSkipBlack );
118
119         // \83t\83@\83C\83\8b\82©\82ç\82Ì\83e\83N\83X\83`\83\83\82Ì\8d\\92z\81B
120         // \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
121         HRESULT RestoreDeviceObjectsFromFile();
122
123         // \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
124         // \81¦ PNG \82Ì\82Ý\91Î\89\9e
125         // \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
126         HRESULT RestoreDeviceObjectsFromFileInMemory();
127
128         // \83\8a\83\\81[\83X\82©\82ç\82Ì\83e\83N\83X\83`\83\83\82Ì\93Ç\82Ý\8d\9e\82Ý\82Æ\8d\\92z
129         // \81¦ PNG \82Ì\82Ý\91Î\89\9e
130         // \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
131         HRESULT RestoreDeviceObjectsFromResource();
132
133         // DDS \82©\82ç\83e\83N\83X\83`\83\83\82ð\8d\\92z\82·\82é\81B
134         HRESULT RestoreFromDDS( DDSURFACEDESC2* pddsd, BYTE** ppimage );
135
136         DWORD   BitCount( DWORD dwNum );                // dwNum \82Ì\83r\83b\83g'1'\82Ì\90\94\82ð\90\94\82¦\82é\81B
137         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
138
139         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
140 };
141
142         }//Graphics
143 }//FDK
144
145 using namespace FDK::Graphics;