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 |
|
---|
61 | template<> S3D_SYS_INLINE
|
---|
62 | D3DXMATRIXA16 *s3d_UtilNew<D3DXMATRIXA16>()
|
---|
63 | {
|
---|
64 | void *p = D3DXMATRIXA16::operator new(S3D_SYS_SIZEOFS(D3DXMATRIXA16));
|
---|
65 | return reinterpret_cast<D3DXMATRIXA16*>(p);
|
---|
66 | }
|
---|
67 |
|
---|
68 | template<> S3D_SYS_INLINE
|
---|
69 | void s3d_UtilDelete<D3DXMATRIXA16>(D3DXMATRIXA16 *p)
|
---|
70 | {
|
---|
71 | D3DXMATRIXA16::operator delete(p);
|
---|
72 | }
|
---|
73 |
|
---|
74 | template<> S3D_SYS_INLINE
|
---|
75 | D3DXMATRIXA16 *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 |
|
---|
82 | template<> S3D_SYS_INLINE
|
---|
83 | void s3d_UtilDeleteArray<D3DXMATRIXA16>(D3DXMATRIXA16 *p)
|
---|
84 | {
|
---|
85 | D3DXMATRIXA16::operator delete[](p);
|
---|
86 | }
|
---|
87 |
|
---|
88 | ///////////////////////////////////////////////////////////////////////////////
|
---|
89 |
|
---|
90 | //@ Implementation of @ident{comp}{drv_d3d9.gfxmgr.gfxeng}.
|
---|
91 | class s3d_CDrvD3d9GfxEngCLOD
|
---|
92 | : public s3d_CDrvGfxEng
|
---|
93 | {
|
---|
94 | public:
|
---|
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 |
|
---|
379 | private:
|
---|
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 |
|
---|
635 | S3D_DRV_PUBLIC_DECL S3D_UTIL_RTTI_TARGET_DECLARE(s3d_CDrvD3d9GfxEngCLOD)
|
---|
636 |
|
---|
637 |
|
---|
638 | //@
|
---|
639 | typedef s3d_CUtilPtr<s3d_CDrvD3d9GfxEngCLOD> s3d_CDrvD3d9GfxEngCLODPtr;
|
---|
640 |
|
---|
641 | ///////////////////////////////////////////////////////////////////////////////
|
---|
642 |
|
---|
643 | class s3d_CDrvD3d9GfxOut: public s3d_CDrvGfxOut
|
---|
644 | {
|
---|
645 | public:
|
---|
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 |
|
---|
666 | private:
|
---|
667 | s3d_CDrvD3d9GfxEngCLODPtr m_GfxEng;
|
---|
668 | };
|
---|
669 |
|
---|
670 | ///////////////////////////////////////////////////////////////////////////////
|
---|
671 |
|
---|
672 | #endif
|
---|