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

Revision 2236, 19.1 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
16#ifndef S3D_DRV_D3D9_ENG_H
17#define S3D_DRV_D3D9_ENG_H
18
19#include "drv_d3d9_param.h"
20#include "drv_d3d9_state.h"
21#include "drv_d3d9_batch.h"
22#include "drv_d3d9_vertdecl.h"
23#include "drv_d3d9_tex.h"
24#include "drv_d3d9_prog.h"
25#include "drv_d3d9_env.h"
26#include "drv_d3d9_ctx.h"
27#include "drv_d3d9_visib.h"
28#include "drv_d3d9_surfpool.h"
29
30#include "drv/interf/drv_gfx.h"
31#include "drv/interf/drv_ctx.h"
32#include "drv/interf/win32/drv_win32_ctx.h"
33#include "util/cont/util_idmgr.h"
34#include "util/base/util_init.h"
35#include "util/cont/util_tuple.h"
36#include "util/notif/util_multinotif.h"
37#include "general/general_env.h"
38
39//#include "GeoLodLibraryDLL.h"
40#include "shark_mesh_loader_model.h"
41
42
43///////////////////////////////////////////////////////////////////////////////
44
45/*@{ @declare{cpp.macro}{S3D_DRV_D3D9_ENG_CAP_D3D}{#define $}
46    D3D can be used.
47@}*/
48#define S3D_DRV_D3D9_ENG_CAP_D3D "d3d"
49
50/*@{ @declare{cpp.macro}{S3D_DRV_D3D9_ENG_CAP_D3D9}{#define $}
51    D3D9 can be used.
52@}*/
53#define S3D_DRV_D3D9_ENG_CAP_D3D9 "d3d9"
54
55///////////////////////////////////////////////////////////////////////////////
56
57#define S3D_DRV_D3D9_MAX_DEST_CNT 16
58
59///////////////////////////////////////////////////////////////////////////////
60
61template<> S3D_SYS_INLINE
62D3DXMATRIXA16 *s3d_UtilNew<D3DXMATRIXA16>()
63{
64    void *p = D3DXMATRIXA16::operator new(S3D_SYS_SIZEOFS(D3DXMATRIXA16));
65    return reinterpret_cast<D3DXMATRIXA16*>(p);
66}
67
68template<> S3D_SYS_INLINE
69void s3d_UtilDelete<D3DXMATRIXA16>(D3DXMATRIXA16 *p)
70{
71    D3DXMATRIXA16::operator delete(p);
72}
73
74template<> S3D_SYS_INLINE
75D3DXMATRIXA16 *s3d_UtilNewArray<D3DXMATRIXA16>(s3d_CSysIntps Cnt)
76{
77    void *p = D3DXMATRIXA16::operator new[](S3D_SYS_SIZEOFS(
78            D3DXMATRIXA16) * Cnt);
79    return reinterpret_cast<D3DXMATRIXA16*>(p);
80}
81
82template<> S3D_SYS_INLINE
83void s3d_UtilDeleteArray<D3DXMATRIXA16>(D3DXMATRIXA16 *p)
84{
85    D3DXMATRIXA16::operator delete[](p);
86}
87
88///////////////////////////////////////////////////////////////////////////////
89
90//@ Implementation of @ident{comp}{drv_d3d9.gfxmgr.gfxeng}.
91class s3d_CDrvD3d9GfxEngCLOD
92        : public s3d_CDrvGfxEng
93{
94public:
95        S3D_UTIL_RTTI_TABLE_DECLARE
96
97    //@ For a description of the parameters
98    // see @ident{comp}{drv_d3d9.gfxmgr.gfxeng}.
99    s3d_CDrvD3d9GfxEngCLOD(
100            s3d_CUtilMsgHandler *MsgHandler, s3d_CUtilStr_cr Info,
101            bool Bare, s3d_CCompSuppl *CompSuppl,
102            s3d_CUtilAtomMgr *AtomMgr, s3d_CUtilMemPool *MemPool,
103            s3d_CUtilStorageMgr *StorageMgr, s3d_CCompResMgr *ResMgr,
104            s3d_CCompSuppl *UnivProgSuppl,
105            s3d_CCompSuppl *UnivProgGivenSuppl,
106            s3d_CUtilSnkChunk *DefaultOutParam);
107
108    //@
109    ~s3d_CDrvD3d9GfxEngCLOD();
110
111    //@
112    void Done();
113
114    //@
115    s3d_CUtilStr GetDesc() const;
116
117    //@
118    s3d_CDrvGfxOutPtr CreateOut(
119            s3d_CUtilStr_cr Info, s3d_CDrvCtx *Ctx,
120            s3d_CUtilStr_cr Device, int Prop,
121            int Left, int Top, int Width, int Height,
122            int Depth, int Frequency, s3d_CUtilSnkChunk *Param);
123
124    //@
125    s3d_CDrvGfxOutPtr CreateOut(
126            s3d_CUtilStr_cr Info, s3d_CDrvCtx *Ctx,
127            s3d_CUtilStr_cr Device, int Prop,
128            int Left, int Top, int Width, int Height,
129            int Depth, int Frequency, s3d_CUtilRecogBase *Param);
130
131    //@
132    s3d_CDrvGfxOutPtr CreateOut(
133            s3d_CUtilStr_cr Info, s3d_CDrvCtx *Ctx,
134            s3d_CUtilStr_cr Device, int Prop,
135            int Left, int Top, int Width, int Height,
136            int Depth, int Frequency, s3d_CDrvD3d9Param *D3dParam);
137
138    //@
139    s3d_CUtilSnkChunkPtr GetDefaultOutParam();
140
141    //@
142    void RegisterNotifCtxChanged(
143            s3d_CUtilNotifRecip *Recip);
144
145    //@
146    void Alter(
147            s3d_CUtilStr_cr Info,
148            s3d_CUtilStr_cr Device, int Prop,
149            int Left, int Top, int Width, int Height,
150            int Depth, int Frequency, s3d_CUtilSnkChunk *Param);
151
152    //@
153    void Alter(
154            s3d_CUtilStr_cr Info,
155            s3d_CUtilStr_cr Device, int Prop,
156            int Left, int Top, int Width, int Height,
157            int Depth, int Frequency, s3d_CDrvD3d9Param *D3dParam);
158
159    //@
160    void UserFunc(s3d_CUtilCoStr Func);
161
162    //@
163    bool HasCap(
164            s3d_CSysIntps CapLen, const s3d_CSysChar *CapStart) const;
165
166    //@
167    s3d_CDrvGfxStat *GetStat();
168
169    //@
170    int GetSampCnt() const;
171
172    //@
173    void SnapTexSize(
174            int &Width, int &Height, int &Depth,
175            int TexProp, int SnapProp);
176
177    //@
178    s3d_CDrvGfxTexPtr CreateTexDirect(
179            s3d_CUtilStr_cr Info, int TexProp,
180            int Width, int Height, int Depth);
181
182    //@
183    s3d_CDrvGfxTexPtr CreateTexStream(
184            s3d_CUtilStr_cr Info, int TexProp,
185            s3d_CUtilStream *Stream);
186
187    //@
188    s3d_CDrvGfxTexPtr CreateTexVideo(
189            s3d_CUtilStr_cr Info, int TexProp,
190            s3d_CDrvVideoPlayer *VideoPlayer);
191
192    //@
193    s3d_CDrvGfxTexPtr CreateTexIdent(
194            s3d_CUtilStr_cr Info, int TexProp,
195            s3d_CUtilStr_cr Ident);
196
197    //@
198    s3d_CDrvGfxTexPtr CreateTexUser(
199            s3d_CUtilStr_cr Info, int TexProp,
200            s3d_CCompObj *UserObj);
201
202    //@
203    void SetSampTex(
204            int Samp, s3d_CDrvGfxTex *Tex);
205
206    //@
207    void SetSampTexElseNone(
208            int SampStart);
209
210    //@
211    void SetSampMode(
212            int Samp, int SampMode);
213
214    //@
215    s3d_CDrvGfxProgPtr CreateProg(
216            s3d_CUtilNotifGather *NotifGather,
217            s3d_CUtilSnkChunk *Desc);
218
219    //@
220    void GetMainSize(int &Width, int &Height) const;
221
222    //@
223    int GetMainColorAlphaBits() const;
224
225    //@
226    void SetGamma(
227            s3d_CUtilVec3f_cr Gamma);
228
229    //@
230    void Present();
231
232    //@
233    void GetCurTargetSize(int &Width, int &Height) const;
234
235    //@
236    void EndRender();
237
238    //@
239    void BeginRenderMain(
240            int DestProp,
241            s3d_CDrvGfxClearParam_cr ClearParam,
242            s3d_CDrvGfxOut *GfxOut);
243
244    //@
245    void EndRenderMain();
246
247    //@
248    void BeginRenderTex(
249            int DestProp,
250            s3d_CDrvGfxClearParam_cr ClearParam,
251            int Width, int Height,
252            s3d_CSysIntps DestCnt, const s3d_CDrvGfxDest *DestArray);
253
254    //@
255    void EndRenderTex();
256
257    //@
258    void CopyIntoTex(
259            int Width, int Height, int SrcX, int SrcY,
260            s3d_CSysIntps DestCnt, const s3d_CDrvGfxDest *DestArray);
261
262    //@
263    void StoreScreenshot();
264
265    //@
266    void SetViewRect(
267            s3d_CUtilTranslScale2f_cr ViewRect);
268
269    //@
270    void SetViewDepthRange(
271            float NegZ, float PosZ);
272
273    //@
274    void SetScissorRect(
275            int X, int Y, int Width, int Height);
276   
277    //@
278    void SetScissorNone();
279
280    //@
281    void SetCullMode(int Mode);
282
283    //@
284    void SetDepthTest(int Mode);
285
286    //@
287    void SetDepthWrite(bool Enabled);
288
289    //@
290    int GetStencilBits() const;
291
292    //@
293    void SetStencilMode(
294            int TestMask, int TestRef, int TestModeFront, int TestModeBack,
295            int WriteMask,
296            int OpFailFront, int OpDepthFailFront, int OpDepthPassFront,
297            int OpFailBack, int OpDepthFailBack, int OpDepthPassBack);
298
299    //@
300    void SetAlphaTest(
301            int Mode, float Ref);
302
303    //@
304    void SetBlendMode(
305            int ColSrcFac, int ColDestFac, int ColOp,
306            int AlphaSrcFac, int AlphaDestFac, int AlphaOp);
307
308    //@
309    void SetPaintMode(int Mode);
310
311    //@
312    void SetPaintExt(float Ext);
313
314    //@
315    void BeginVisib();
316
317    //@
318    s3d_CDrvGfxVisibPtr EndVisib();
319
320    //@
321    void SetFogNone();
322
323    //@
324    void SetFogExp(float Density, s3d_CUtilVec3f_cr Color);
325
326    //@
327    bool IsStereo() const;
328
329    //@
330    void SetStereoEyeOffset(s3d_CUtilVec3f_cr EyeOffset);
331
332    //@
333    void SetTransf(int Chan, int Slot, s3d_CUtilMat4x4f_cr Mat);
334
335    //@
336    void SetTransfIdentity(int Chan, int Slot);
337
338    //@
339    void SetClipPlane(s3d_CUtilVec4f_cr Plane);
340
341    //@
342    void SetDepthBias(
343            float BiasOverlay, float BiasOffs);
344
345    //@
346    void DisableLighting();
347
348    //@
349    void SetLightArray(
350            s3d_CSysIntps LightCnt, s3d_CDrvGfxLight **LightArray);
351
352    //@
353    void SetMtl(
354            s3d_CUtilVec3f_cr Ambient, s3d_CUtilVec3f_cr Diffuse,
355            s3d_CUtilVec3f_cr Specular, s3d_CUtilVec3f_cr Emissive,
356            float SpecExp, float Alpha);
357
358    //@
359    void SetColorAlpha(
360            s3d_CUtilVec4f_cr ColorAlpha);
361
362    //@
363    void GetPacketLimits(
364            int &MaxVertCnt, int &MaxPrimCnt, int Prim);
365
366    //@
367    s3d_CDrvGfxBatchPtr CreateBatch(
368            const s3d_CDrvGfxCharge *Charge);
369
370    //@
371    void ExecuteCharge(
372            const s3d_CDrvGfxCharge *Charge, s3d_CDrvGfxBatch *Batch,
373            s3d_CDrvGfxParam_cr GfxParam);
374
375        // NEW for GAMETOOLS
376        void ManipulateBatchForLODSTRIPS(s3d_CDrvGfxBatchPtr batch, Geometry::LodStripsLibrary *, float lod);
377        void GetViewPos(float &x, float &y, float &z);
378
379private:
380    s3d_CUtilMsgHandlerPtr m_MsgHandler;
381    s3d_CUtilStr m_Info;
382    s3d_CUtilAtomMgrPtr m_AtomMgr;
383    s3d_CUtilMemPoolPtr m_MemPool;
384    s3d_CCompResMgrPtr m_ResMgr;
385    s3d_CUtilStorageMgrPtr m_StorageMgr;
386    s3d_CCompSupplPtr m_UnivProgSuppl;
387    s3d_CCompSupplPtr m_UnivProgGivenSuppl;
388    s3d_CUtilSnkChunkPtr m_DefaultOutParam;
389
390    s3d_CDrvCtxPtr m_Ctx;
391
392    s3d_CUtilNotifMgr m_NotifMgrCtx;
393
394    s3d_CDrvWin32CtxInterf *m_CtxWin32;
395    HWND m_hWnd;
396
397    s3d_CDrvD3d9ParamPtr m_D3dParam;
398
399    int m_Prop;
400    int m_BufWidth;
401    int m_BufHeight;
402    int m_BufColorAlphaBits;
403    int m_BufDepthBits;
404    int m_BufStencilBits;
405    float m_BufDepthBiasScale;
406
407    // D3d device
408    s3d_CDrvD3d9Direct3d m_D3d;
409    s3d_CDrvD3d9Device m_D3dDev;
410    s3d_CDrvD3d9SwapChain m_SwapChain;
411
412    bool m_SWVertProc;
413    DWORD m_DevFlags;
414    D3DDEVTYPE m_DevType;
415    D3DFORMAT m_BackBufFmt;
416    D3DFORMAT m_DepthStencilFmt;
417    s3d_CDrvD3d9Surf m_MainSurfCol;
418    s3d_CDrvD3d9Surf m_MainSurfDepth;
419    void ResetDevice();
420
421    s3d_CDrvGfxStat m_Stat;
422    s3d_CSysInt32u m_FrmIdx;
423
424    // Render to tex
425    // Keep "locks" of color surfaces
426    s3d_CUtilPtrArray<s3d_CDrvD3d9SurfRT> m_CurSurfRTColArray;
427    // Keep "lock" of depth surface
428    s3d_CDrvD3d9SurfRTPtr m_CurSurfRTDepth;
429    s3d_CDrvD3d9SurfRTPoolMap m_SurfRTPoolMap;
430    s3d_CDrvD3d9SurfRTPtr FindSurfRT(
431            int Width, int Height,
432            D3DFORMAT Fmt, D3DMULTISAMPLE_TYPE MultiSampleType);
433    void BeginRenderTexStd(
434            int Width, int Height,
435            s3d_CSysIntps DestCnt, const s3d_CDrvGfxDest *DestArray);
436    void EndRenderTexStd();
437    void BeginRenderTexMSAA(
438            int Width, int Height,
439            s3d_CSysIntps DestCnt, const s3d_CDrvGfxDest *DestArray);
440    void EndRenderTexMSAA();
441    void UnbindTex(
442            s3d_CDrvD3d9TexObjBase *TexImpl);
443    void SetRenderTargetElseNone(
444            int Start);
445
446    int m_CurSurfColUsedCnt;
447    s3d_CSysIntps m_MaxSimRTCnt;
448    s3d_CDrvD3d9Surf m_CurSurfColArray[S3D_DRV_D3D9_MAX_SIM_RT_CNT];
449    s3d_CDrvD3d9Surf m_CurSurfDepth;
450    int m_DestProp;
451    s3d_CSysIntps m_DestCnt;
452    s3d_CDrvGfxDest m_DestArray[S3D_DRV_D3D9_MAX_DEST_CNT];
453
454    void InitRenderToTex();
455    void RestoreRenderTargets();
456
457    UINT m_Adapter;
458    s3d_CUtilStr m_AdapterDesc;
459    D3DCAPS9 m_DevCaps;
460    D3DPRESENT_PARAMETERS m_PresentParam;
461    bool m_UseMSAA;
462    D3DVIEWPORT9 m_Viewport;
463    RECT m_ScissorRect;
464    bool m_CurScissorEnabled;
465    void EnabledScissor(bool Enabled);
466
467    // State
468    s3d_CDrvD3d9StateMgr m_StateMgr;
469    s3d_CDrvD3d9StateBlk m_State;
470    void SetDefaultState();
471    int m_CullMode;
472    int m_DepthTestMode;
473    float m_DepthBiasOverlay;
474    float m_DepthBiasOffs;
475    int m_BlendColSrcFac;
476    int m_BlendColDestFac;
477    int m_BlendColOp;
478    int m_BlendAlphaSrcFac;
479    int m_BlendAlphaDestFac;
480    int m_BlendAlphaOp;
481    int m_PaintMode;
482    int m_StencilTestModeFront;
483    int m_StencilTestModeBack;
484    int m_StencilOpFailFront;
485    int m_StencilOpDepthFailFront;
486    int m_StencilOpDepthPassFront;
487    int m_StencilOpFailBack;
488    int m_StencilOpDepthFailBack;
489    int m_StencilOpDepthPassBack;
490    int m_AlphaTestMode;
491    float m_AlphaTestRef;
492    // Did previous ExecuteCharge use a FFP?
493    bool m_PrevUsedFFP;
494
495    // Projection matrix:
496    float m_MainProjOffsX;
497    float m_MainProjOffsY;
498    float m_CurProjOffsX;
499    float m_CurProjOffsY;
500    bool m_MatProjDirty;
501    D3DXMATRIXA16 m_MatProj;
502    //D3DXMATRIXA16 m_EffMatProj;
503    void CalcProjOffs(
504            float &ProjOffsX, float &ProjOffsY, int Width, int Height);
505    void SetProjOffs(
506            const float &ProjOffsX, const float &ProjOffsY);
507
508    // Texture:
509    // Maximum device texcoord count.
510    int m_MaxAttrCnt;
511    D3DTEXTURETRANSFORMFLAGS m_CurTexTransfFlagsArray[
512            S3D_DRV_D3D9_MAX_ATTR_CNT];
513    D3DTEXTUREOP m_CurTexOpArray[
514            S3D_DRV_D3D9_MAX_ATTR_CNT];
515    // Maximum device sampler count.
516    int m_MaxSampCnt;
517    // All entries of m_WantSampTexArray with index < m_SampMaxWantCnt
518    // have changes not yet reflected by m_CurSampTexArray and not yet
519    // committed to d3d state.
520    int m_SampMaxWantCnt;
521    s3d_CDrvD3d9TexObjBasePtr m_WantSampTexArray[S3D_DRV_D3D9_MAX_SAMPLER_CNT];
522    s3d_CDrvD3d9SampParam m_CurSampParamArray[S3D_DRV_D3D9_MAX_SAMPLER_CNT];
523    int m_SampModeArray[S3D_DRV_D3D9_MAX_SAMPLER_CNT];
524
525    s3d_CDrvD3d9TexMgrPtr m_TexMgr;
526    int m_MinLbTexWidth;
527    int m_MaxLbTexWidth;
528    int m_MinLbTexHeight;
529    int m_MaxLbTexHeight;
530    int m_MinLbVolTexExt;
531    int m_MaxLbVolTexExt;
532    D3DTEXTUREFILTERTYPE m_MaxFilterMinStd;
533    D3DTEXTUREFILTERTYPE m_MaxFilterMagStd;
534    D3DTEXTUREFILTERTYPE m_MaxFilterMinCube;
535    D3DTEXTUREFILTERTYPE m_MaxFilterMagCube;
536    D3DTEXTUREFILTERTYPE m_MaxFilterMinVol;
537    D3DTEXTUREFILTERTYPE m_MaxFilterMagVol;
538    D3DTEXTUREFILTERTYPE m_MaxFilterMipStd;
539    D3DTEXTUREFILTERTYPE m_MaxFilterMipCube;
540    D3DTEXTUREFILTERTYPE m_MaxFilterMipVol;
541    void InitTexturing();
542    void SetTexOpTransf(
543            int Attr, D3DTEXTUREOP Op, D3DTEXTURETRANSFORMFLAGS TransfFlag);
544    void UpdateSampParam(
545            s3d_CSysIntps Samp, const s3d_CDrvD3d9TexObjBase *Tex);
546    void AddrOfSampMode(
547            int SampMode, D3DTEXTUREADDRESS &AddrX,
548            D3DTEXTUREADDRESS &AddrY, D3DTEXTUREADDRESS &AddrZ);
549    void FilterOfSampMode(
550            int SampMode, const s3d_CDrvD3d9TexObjBase *Tex,
551            D3DTEXTUREFILTERTYPE &FilterMin, D3DTEXTUREFILTERTYPE &FilterMag,
552            D3DTEXTUREFILTERTYPE &FilterMip);
553
554    void Clear(
555            s3d_CDrvGfxClearParam_cr ClearParam);
556
557    // Bones
558    s3d_CUtilArray<D3DXMATRIXA16> m_MatBoneArray;
559    bool m_MatBoneDirty;
560
561    // Batch objects, vertex and index buffers:
562    s3d_CDrvD3d9BufMgrPtr m_BufMgr;
563    s3d_CDrvD3d9VertBufObjPtr m_CurVertBufObj;
564    s3d_CDrvD3d9IdxBufObjPtr m_CurIdxBufObj;
565    s3d_CDrvD3d9VertDecl m_CurVertDecl;
566    s3d_CDrvD3d9VertBuf m_CurVertBufDummyBlendWghIdx;
567    void SelectBuffers(
568            s3d_CDrvD3d9VertBufObj *VertBufObj,
569            s3d_CDrvD3d9IdxBufObj *IdxBufObj);
570    void SelectProg(
571            const s3d_CSysChar *Info, s3d_CDrvGfxProg *Prog,
572            const s3d_CSysChar *BufInfo, const s3d_CSysChar *BufDesc,
573            const s3d_CDrvD3d9VertDecl &VertDecl,
574            s3d_CDrvGfxParam_cr GfxParam);
575
576    void BeginDraw(
577            const s3d_CSysChar *Info, int VertBufFmtDecl, bool UseFFP);
578    void BeginDrawFFP(
579            const s3d_CSysChar *Info, int VertBufFmtDecl);
580    void EndDrawFFP(
581            const s3d_CSysChar *Info);
582    void BeginDrawProg(
583            const s3d_CSysChar *Info, int VertBufFmtDecl);
584    void EndDrawProg(
585            const s3d_CSysChar *Info);
586
587    void DrawIndexedBatchPacket(
588            D3DPRIMITIVETYPE D3dPrim,
589            s3d_CSysIntps PacketSubCnt, s3d_CDrvD3d9Packet *PacketSubArray,
590            s3d_CSysIntps VertexSubBase, s3d_CSysIntps IndexSubBase,
591            s3d_CSysIntps BoneIdxSubBase,
592            s3d_CSysIntps BoneIdxCnt, const s3d_CSysInt32u *BoneIdxData,
593            bool TrackDummyBlendTransf);
594    void DrawIndexedBatchPacketUP(
595            D3DPRIMITIVETYPE D3dPrim,
596            s3d_CSysIntps PacketSubCnt, s3d_CDrvD3d9Packet *PacketSubArray,
597            s3d_CSysIntps VertexSubBase,
598            const s3d_CSysIntm *VertData, int VertSize,
599            D3DFORMAT IdxFmt, const s3d_CSysIntm *IdxData,
600            s3d_CSysIntps BoneIdxSubBase,
601            s3d_CSysIntps BoneIdxCnt, const s3d_CSysInt32u *BoneIdxData,
602            bool TrackDummyBlendTransf);
603
604    s3d_CDrvD3d9ProgMgrPtr m_ProgMgr;
605    s3d_CDrvD3d9ParamBlk m_ParamBlk;
606    s3d_CDrvD3d9ParamBlkState m_ParamStateProg;
607    s3d_CDrvD3d9ParamBlkState m_ParamStateFFP;
608
609    s3d_CSysIntps m_MaxLightCnt;
610    bool m_LightingEnabled;
611    bool m_WantLighting;
612    s3d_CSysIntps m_WantLightCnt;
613    bool m_LightEnabledArray[S3D_DRV_D3D9_MAX_LIGHT_CNT];
614    bool m_LightDirtyArray[S3D_DRV_D3D9_MAX_LIGHT_CNT];
615    void InitLighting();
616    void EnabledLighting(bool Enabled);
617
618    bool m_HasNvDepthTex;
619    bool m_CanRenderDepth;
620    void InitDevCaps();
621
622    void Park();
623    void Unpark();
624
625    s3d_CDrvD3d9Env m_Env;
626    s3d_CDrvD3d9CtxPtr m_D3dCtx;
627
628    // Queries
629    s3d_CDrvD3d9QueryEvent m_FlushEvent;
630    s3d_CSysIntps m_IdxFlushCnt;
631
632    s3d_CDrvD3d9VisibMgrPtr m_VisibMgr;
633};
634
635S3D_DRV_PUBLIC_DECL S3D_UTIL_RTTI_TARGET_DECLARE(s3d_CDrvD3d9GfxEngCLOD)
636
637
638//@
639typedef s3d_CUtilPtr<s3d_CDrvD3d9GfxEngCLOD> s3d_CDrvD3d9GfxEngCLODPtr;
640
641///////////////////////////////////////////////////////////////////////////////
642
643class s3d_CDrvD3d9GfxOut: public s3d_CDrvGfxOut
644{
645public:
646    s3d_CDrvD3d9GfxOut(
647            s3d_CDrvD3d9GfxEngCLOD *GfxEng);
648
649    s3d_CUtilStr GetDesc();
650    void Alter(
651            s3d_CUtilStr_cr Info,
652            s3d_CUtilStr_cr Device, int Prop,
653            int Left, int Top, int Width, int Height, int Depth,
654            int Frequency, s3d_CUtilSnkChunk *Param);
655    void Alter(
656            s3d_CUtilStr_cr Info,
657            s3d_CUtilStr_cr Device, int Prop,
658            int Left, int Top, int Width, int Height, int Depth,
659            int Frequency, s3d_CDrvD3d9Param *D3dParam);
660    void Present();
661    void GetSize(int &Width, int &Height) const;
662    int GetColorAlphaBits() const;
663    void SetGamma(
664            s3d_CUtilVec3f_cr Gamma);
665
666private:
667    s3d_CDrvD3d9GfxEngCLODPtr m_GfxEng;
668};
669
670///////////////////////////////////////////////////////////////////////////////
671
672#endif
Note: See TracBrowser for help on using the repository browser.