[2236] | 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
|
---|