source: GTP/trunk/App/Demos/Geom/Shark3D/src/drv_d3d9_tex.h @ 2236

Revision 2236, 10.2 KB checked in by gumbau, 17 years ago (diff)
Line 
1///////////////////////////////////////////////////////////////////////////////
2//
3//      ##  ######
4//       ######  ###
5//  ## ###############        Shark 3D Engine (www.shark3d.com)
6//   ########## # # #
7//    ########                Copyright (c) 1996-2006 Spinor GmbH.
8//   ######### # # #          All rights reserved.
9//  ##   ##########
10//      ##
11//
12///////////////////////////////////////////////////////////////////////////////
13
14//@cpp
15#ifndef S3D_DRV_D3D9_TEX_H
16#define S3D_DRV_D3D9_TEX_H
17
18#include "drv_d3d9_types.h"
19#include "drv_d3d9_ctx.h"
20#include "drv_d3d9_env.h"
21#include "drv/interf/drv_video.h"
22#include "util/base/util_ptr.h"
23#include "util/cont/util_list.h"
24
25///////////////////////////////////////////////////////////////////////////////
26
27//@
28struct s3d_CDrvD3d9TexFmt
29{
30    D3DFORMAT m_FmtCol;
31    D3DFORMAT m_FmtDepth;
32    bool m_CanFilter;
33    bool m_CanMultiSample;
34    DWORD m_Usage;
35    bool m_SRGBRead;
36    bool m_SRGBWrite;
37    D3DTEXTUREFILTERTYPE m_FilterMipGen;
38};
39
40///////////////////////////////////////////////////////////////////////////////
41
42//@
43struct s3d_CDrvD3d9SampParam
44{
45    D3DTEXTUREFILTERTYPE m_FilterMin;
46    D3DTEXTUREFILTERTYPE m_FilterMag;
47    D3DTEXTUREFILTERTYPE m_FilterMip;
48    D3DTEXTUREADDRESS m_AddrX;
49    D3DTEXTUREADDRESS m_AddrY;
50    D3DTEXTUREADDRESS m_AddrZ;
51    BOOL m_SRGBTex;
52};
53
54///////////////////////////////////////////////////////////////////////////////
55
56class s3d_CDrvD3d9TexMgr;
57class s3d_CDrvD3d9TexObjBase;
58
59//@
60typedef s3d_CUtilList<s3d_CDrvD3d9TexObjBase*> s3d_CDrvD3d9TexList;
61
62///////////////////////////////////////////////////////////////////////////////
63
64class s3d_CDrvD3d9TexMgr;
65
66//@
67typedef s3d_CUtilPtr<s3d_CDrvD3d9TexMgr> s3d_CDrvD3d9TexMgrPtr;
68
69///////////////////////////////////////////////////////////////////////////////
70
71
72//@
73class s3d_CDrvD3d9TexObjBase
74        : public s3d_CDrvGfxTex
75{
76public:
77    s3d_CDrvD3d9TexObjBase();
78    virtual ~s3d_CDrvD3d9TexObjBase();
79
80    int m_Prop;
81    int m_Width;
82    int m_Height;
83    int m_Depth;
84    D3DPOOL m_Pool;
85    s3d_CDrvD3d9TexFmt m_TexFmt;
86    s3d_CDrvD3d9BaseTex m_BaseTex;
87
88    s3d_CDrvD3d9TexList::CNode m_Node;
89    s3d_CDrvD3d9CtxPtr m_D3dCtx;
90
91    void LoadData(
92            int Part, int Mipmap,
93            int Width, int Height, int Depth,
94            const s3d_CDrvGfxPixel *Data);
95
96    void LoadUser(
97            s3d_CCompObj *UserObj);
98    void GetSize(
99            int &Width, int &Height, int &Depth) const;
100    int GetTexProp() const;
101
102    virtual void AllocTex() = 0;
103
104    virtual HRESULT D3dLoadData(
105            int Part, int Mipmap, int Width, int Height, int Depth,
106            const s3d_CDrvGfxPixel *SrcData) = 0;
107   
108    virtual HRESULT D3dLoadData(
109            int Part, int Mipmap, int Width, int Height, int Depth,
110            LPDIRECT3DSURFACE9 SrcSurf) = 0;
111
112    virtual HRESULT GetRenderTarget(
113            s3d_CDrvD3d9Surf &DestSurf, const s3d_CDrvGfxDest *GfxDest) = 0;
114
115    virtual bool IsVideoTex();
116    virtual void UpdateToFrm(s3d_CSysInt32u FrmIdx);
117
118    virtual void Park() = 0;
119    virtual void Unpark() = 0;
120};
121
122S3D_UTIL_RECOG_DECLAREINFO(s3d_CDrvD3d9TexObjBase);
123
124//@
125typedef s3d_CUtilPtr<s3d_CDrvD3d9TexObjBase> s3d_CDrvD3d9TexObjBasePtr;
126
127//@
128typedef s3d_CUtilPtrArray<s3d_CDrvD3d9TexObjBase> s3d_CDrvD3d9TexObjBaseArray;
129
130///////////////////////////////////////////////////////////////////////////////
131
132//@
133class s3d_CDrvD3d9TexObj
134        : public s3d_CDrvD3d9TexObjBase
135{
136public:
137    s3d_CDrvD3d9TexObj(
138            s3d_CDrvD3d9Ctx *D3dCtx,
139            int TexProp, int Width, int Height,
140            const s3d_CDrvD3d9TexFmt &TexFmt, D3DPOOL Pool);
141    s3d_CDrvD3d9TexObj(
142            s3d_CDrvD3d9Ctx *D3dCtx,
143            int TexProp, int Width, int Height,
144            const s3d_CDrvD3d9TexFmt &TexFmt, D3DPOOL Pool,
145            LPDIRECT3DTEXTURE9 D3dTex);
146
147private:
148    s3d_CDrvD3d9Tex m_D3dTex;
149
150    void AllocTex();
151   
152    HRESULT D3dLoadData(
153            int Part, int Mipmap, int Width, int Height, int Depth,
154            const s3d_CDrvGfxPixel *Data);
155    HRESULT D3dLoadData(
156            int Part, int Mipmap, int Width, int Height, int Depth,
157            LPDIRECT3DSURFACE9 SrcSurf);
158    HRESULT GetRenderTarget(
159            s3d_CDrvD3d9Surf &DestSurf, const s3d_CDrvGfxDest *GfxDest);
160
161    void Park();
162    void Unpark();
163};
164
165//@
166typedef s3d_CUtilPtr<s3d_CDrvD3d9TexObj> s3d_CDrvD3d9TexObjPtr;
167
168///////////////////////////////////////////////////////////////////////////////
169
170//@
171class s3d_CDrvD3d9TexCubeObj
172        : public s3d_CDrvD3d9TexObjBase
173{
174public:
175    s3d_CDrvD3d9TexCubeObj(
176            s3d_CDrvD3d9Ctx *D3dCtx,
177            int TexProp, int Width, int Height,
178            const s3d_CDrvD3d9TexFmt &TexFmt, D3DPOOL Pool);
179    s3d_CDrvD3d9TexCubeObj(
180            s3d_CDrvD3d9Ctx *D3dCtx,
181            int TexProp, int Width, int Height,
182            const s3d_CDrvD3d9TexFmt &TexFmt, D3DPOOL Pool,
183            LPDIRECT3DCUBETEXTURE9 D3dCubeTex);
184
185private:
186    s3d_CDrvD3d9CubeTex m_D3dCubeTex;
187   
188    void AllocTex();
189   
190    HRESULT D3dLoadData(
191            int Part, int Mipmap, int Width, int Height, int Depth,
192            const s3d_CDrvGfxPixel *Data);
193    HRESULT D3dLoadData(
194            int Part, int Mipmap, int Width, int Height, int Depth,
195            LPDIRECT3DSURFACE9 SrcSurf);
196    HRESULT GetRenderTarget(
197            s3d_CDrvD3d9Surf &DestSurf, const s3d_CDrvGfxDest *Dest);
198
199    void Park();
200    void Unpark();
201};
202
203//@
204typedef s3d_CUtilPtr<s3d_CDrvD3d9TexCubeObj> s3d_CDrvD3d9TexCubeObjPtr;
205
206///////////////////////////////////////////////////////////////////////////////
207
208//@
209class s3d_CDrvD3d9TexVolObj
210        : public s3d_CDrvD3d9TexObjBase
211{
212public:
213    s3d_CDrvD3d9TexVolObj(
214            s3d_CDrvD3d9Ctx *D3dCtx,
215            int TexProp, int Width, int Height, int Depth,
216            const s3d_CDrvD3d9TexFmt &TexFmt, D3DPOOL Pool,
217            LPDIRECT3DVOLUMETEXTURE9 D3dVolTex);
218
219    void AllocTex();
220
221    HRESULT D3dLoadData(
222            int Part, int Mipmap, int Width, int Height, int Depth,
223            const s3d_CDrvGfxPixel *SrcData);
224   
225    HRESULT D3dLoadData(
226            int Part, int Mipmap, int Width, int Height, int Depth,
227            LPDIRECT3DSURFACE9 SrcSurf);
228
229    HRESULT GetRenderTarget(
230            s3d_CDrvD3d9Surf &DestSurf, const s3d_CDrvGfxDest *GfxDest);
231
232    bool IsVideoTex();
233    void UpdateToFrm(s3d_CSysInt32u FrmIdx);
234
235    void Park();
236    void Unpark();
237
238private:
239    s3d_CDrvD3d9VolTex m_D3dVolTex;
240};
241
242//@
243typedef s3d_CUtilPtr<s3d_CDrvD3d9TexVolObj> s3d_CDrvD3d9TexVolObjPtr;
244
245///////////////////////////////////////////////////////////////////////////////
246
247//@
248class s3d_CDrvD3d9TexObjVideo
249        : public s3d_CDrvD3d9TexObjBase
250{
251public:
252    s3d_CDrvD3d9TexObjVideo(
253            s3d_CDrvD3d9Ctx *D3dCtx, s3d_CDrvVideoPlayer *VideoPlayer,
254            int TexProp, bool NeedSnap,
255            const s3d_CDrvD3d9TexFmt &TexFmt, D3DPOOL Pool);
256
257private:
258    s3d_CDrvD3d9Tex m_D3dTex;
259    s3d_CDrvVideoPlayerPtr m_VideoPlayer;
260
261    bool m_NeedSnap;
262    int m_VideoWidth;
263    int m_VideoHeight;
264    s3d_CSysInt32u m_LastFrmIdx;
265   
266    void AllocTex();
267
268    HRESULT D3dLoadData(
269            int Part, int Mipmap, int Width, int Height, int Depth,
270            const s3d_CDrvGfxPixel *Data);
271    HRESULT D3dLoadData(
272            int Part, int Mipmap, int Width, int Height, int Depth,
273            LPDIRECT3DSURFACE9 SrcSurf);
274   
275    HRESULT GetRenderTarget(
276            s3d_CDrvD3d9Surf &DestSurf, const s3d_CDrvGfxDest *GfxDest);
277   
278    bool IsVideoTex();
279    void UpdateToFrm(
280            s3d_CSysInt32u FrmIdx);
281    void Park();
282    void Unpark();
283
284    void SetVideoSize(
285            int VideoWidth, int VideoHeight);
286    void SnapVideoSize(
287            int &Width, int &Height);
288    static int CalcVideoFormat(
289            s3d_CDrvVideoPlayer *VideoPlayer);
290};
291
292//@
293typedef s3d_CUtilPtr<s3d_CDrvD3d9TexObjVideo> s3d_CDrvD3d9TexObjVideoPtr;
294
295///////////////////////////////////////////////////////////////////////////////
296
297//@
298class s3d_CDrvD3d9TexMgr
299        : public s3d_CUtilPtrBase
300{
301public:
302    s3d_CDrvD3d9TexMgr(
303            s3d_CDrvD3d9Ctx *D3dCtx);
304    ~s3d_CDrvD3d9TexMgr();
305
306    s3d_CDrvGfxTexPtr CreateTexDirect(
307            s3d_CUtilStr_cr Info, int TexProp,
308            int Width, int Height, int Depth);
309    s3d_CDrvGfxTexPtr CreateTexStream(
310            s3d_CUtilStr_cr Info, int TexProp,
311            s3d_CUtilStream *Stream);
312    s3d_CDrvGfxTexPtr CreateTexVideo(
313            s3d_CUtilStr_cr Info, int TexProp,
314            s3d_CDrvVideoPlayer *VideoPlayer);
315
316    void Park();
317    void Unpark();
318
319public:
320    s3d_CDrvD3d9CtxPtr m_D3dCtx;
321    D3DCAPS9 m_DevCaps;
322    D3DDISPLAYMODE m_AdapterMode;
323    s3d_CDrvD3d9TexList m_TexList;
324
325    s3d_CDrvD3d9TexObjBasePtr CreateTexDirectFmt(
326            s3d_CUtilStr_cr Info,
327            int TexProp, const s3d_CDrvD3d9TexFmt &TexFmt,
328            int Width, int Height, int Depth, s3d_CDrvVideoPlayer
329                    *VideoPlayer);
330
331    void FindTexFmt(
332            s3d_CDrvD3d9TexFmt &TexFmt, int TexProp);
333    s3d_CUtilMap<int, s3d_CDrvD3d9TexFmt> m_PropFmtMap;
334
335    void FmtOfTexProp(
336            int TexProp, s3d_CDrvD3d9TexFmt &TexFmt);
337
338public:
339    static D3DCUBEMAP_FACES GetFaceOfPart(int Part);
340    static int CompCntOfTexProp(
341            int TexProp);
342    static int BitsPerCompCntOfTexProp(
343            int TexProp);
344    static void s3d_CDrvD3d9TexMgr::CopyTexData2D(
345            s3d_CSysIntm *&DestData, s3d_CSysIntps Stride,
346            int Width, int Height, const s3d_CDrvGfxPixel *SrcData);
347};
348
349///////////////////////////////////////////////////////////////////////////////
350// Definitions
351
352S3D_SYS_INLINE
353void s3d_CDrvD3d9TexObjBase::LoadUser(
354        s3d_CCompObj *UserObj)
355{
356}
357
358S3D_SYS_INLINE
359void s3d_CDrvD3d9TexObjBase::GetSize(
360        int &Width, int &Height, int &Depth) const
361{
362    Width = m_Width;
363    Height = m_Height;
364    Depth = m_Depth;
365}
366
367S3D_SYS_INLINE
368int s3d_CDrvD3d9TexObjBase::GetTexProp() const
369{
370    return m_Prop;
371}
372
373///////////////////////////////////////////////////////////////////////////////
374
375#endif
Note: See TracBrowser for help on using the repository browser.