[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 | #ifndef S3D_DRV_D3D9_BUF_H
|
---|
| 16 | #define S3D_DRV_D3D9_BUF_H
|
---|
| 17 |
|
---|
| 18 | #include "drv_d3d9_types.h"
|
---|
| 19 | #include "drv_d3d9_vertdecl.h"
|
---|
| 20 | #include "drv_d3d9_param.h"
|
---|
| 21 | #include "drv_d3d9_progmgr.h"
|
---|
| 22 | #include "drv_d3d9_env.h"
|
---|
| 23 | #include "util/cont/util_deque.h"
|
---|
| 24 |
|
---|
| 25 | ///////////////////////////////////////////////////////////////////////////////
|
---|
| 26 |
|
---|
| 27 | //@
|
---|
| 28 | struct s3d_CDrvD3d9VertBufDesc
|
---|
| 29 | {
|
---|
| 30 | s3d_CDrvGfxAttr *m_PointAttr;
|
---|
| 31 | s3d_CDrvGfxAttr *m_ColorAlphaAttr;
|
---|
| 32 | s3d_CDrvGfxAttr *m_NormalAttr;
|
---|
| 33 | s3d_CDrvGfxAttr *m_BoneWghAttr;
|
---|
| 34 | s3d_CDrvGfxAttr *m_BoneSubscrAttr;
|
---|
| 35 | s3d_CDrvGfxAttr *m_TexAttrArray[S3D_DRV_D3D9_MAX_ATTR_CNT];
|
---|
| 36 |
|
---|
| 37 | s3d_CSysIntps m_VertElemCnt;
|
---|
| 38 | D3DVERTEXELEMENT9 m_VertElemArray[S3D_DRV_D3D9_MAX_VERTELEM_CNT];
|
---|
| 39 | s3d_CSysIntps m_VertSize;
|
---|
| 40 |
|
---|
| 41 | int m_VertBufFmtDecl;
|
---|
| 42 |
|
---|
| 43 | s3d_CDrvD3d9VertBufDesc();
|
---|
| 44 | void Reset();
|
---|
| 45 |
|
---|
| 46 | //@
|
---|
| 47 | enum CDecl
|
---|
| 48 | {
|
---|
| 49 | //@
|
---|
| 50 | Decl_Generic = (1 << 0),
|
---|
| 51 |
|
---|
| 52 | //@
|
---|
| 53 | Decl_Point = (1 << 1),
|
---|
| 54 |
|
---|
| 55 | //@
|
---|
| 56 | Decl_ColorAlpha = (1 << 2),
|
---|
| 57 |
|
---|
| 58 | //@
|
---|
| 59 | Decl_Normal = (1 << 3),
|
---|
| 60 |
|
---|
| 61 | //@
|
---|
| 62 | Decl_BoneWgh = (1 << 4),
|
---|
| 63 |
|
---|
| 64 | //@
|
---|
| 65 | Decl_BoneSubscr = (1 << 5),
|
---|
| 66 |
|
---|
| 67 | //@
|
---|
| 68 | Decl_DummyBoneWgh = (1 << 6),
|
---|
| 69 |
|
---|
| 70 | //@
|
---|
| 71 | Decl_DummyBoneSubscr = (1 << 7),
|
---|
| 72 | };
|
---|
| 73 |
|
---|
| 74 | };
|
---|
| 75 |
|
---|
| 76 | //@
|
---|
| 77 | typedef const s3d_CDrvD3d9VertBufDesc &s3d_CDrvD3d9VertBufDesc_cr;
|
---|
| 78 |
|
---|
| 79 | ///////////////////////////////////////////////////////////////////////////////
|
---|
| 80 |
|
---|
| 81 | class s3d_CDrvD3d9DummyWghBank
|
---|
| 82 | : public s3d_CDrvBank
|
---|
| 83 | {
|
---|
| 84 | public:
|
---|
| 85 | s3d_CDrvD3d9DummyWghBank();
|
---|
| 86 |
|
---|
| 87 | void Fetch(
|
---|
| 88 | s3d_CUtilMsgHandler *MsgHandler, const s3d_CSysChar *Info,
|
---|
| 89 | s3d_CDrvBankContent &BankContent);
|
---|
| 90 |
|
---|
| 91 | s3d_CUtilPtrBase *GetOwner(
|
---|
| 92 | s3d_CUtilMsgHandler *MsgHandler, const s3d_CSysChar *Info);
|
---|
| 93 |
|
---|
| 94 | private:
|
---|
| 95 | float m_Data[4];
|
---|
| 96 | };
|
---|
| 97 |
|
---|
| 98 | ///////////////////////////////////////////////////////////////////////////////
|
---|
| 99 |
|
---|
| 100 | struct s3d_CDrvD3d9DummyWghAttr
|
---|
| 101 | : public s3d_CDrvGfxAttr
|
---|
| 102 | {
|
---|
| 103 | s3d_CDrvD3d9DummyWghAttr();
|
---|
| 104 |
|
---|
| 105 | s3d_CDrvD3d9DummyWghBank m_DummyWghBank;
|
---|
| 106 | };
|
---|
| 107 |
|
---|
| 108 | ///////////////////////////////////////////////////////////////////////////////
|
---|
| 109 |
|
---|
| 110 | class s3d_CDrvD3d9DummySubscrBank
|
---|
| 111 | : public s3d_CDrvBank
|
---|
| 112 | {
|
---|
| 113 | public:
|
---|
| 114 | s3d_CDrvD3d9DummySubscrBank();
|
---|
| 115 |
|
---|
| 116 | void Fetch(
|
---|
| 117 | s3d_CUtilMsgHandler *MsgHandler, const s3d_CSysChar *Info,
|
---|
| 118 | s3d_CDrvBankContent &BankContent);
|
---|
| 119 |
|
---|
| 120 | s3d_CUtilPtrBase *GetOwner(
|
---|
| 121 | s3d_CUtilMsgHandler *MsgHandler, const s3d_CSysChar *Info);
|
---|
| 122 | private:
|
---|
| 123 | s3d_CSysInt32u m_Data[4];
|
---|
| 124 | };
|
---|
| 125 |
|
---|
| 126 | ///////////////////////////////////////////////////////////////////////////////
|
---|
| 127 |
|
---|
| 128 | struct s3d_CDrvD3d9DummySubscrAttr
|
---|
| 129 | : public s3d_CDrvGfxAttr
|
---|
| 130 | {
|
---|
| 131 | s3d_CDrvD3d9DummySubscrAttr();
|
---|
| 132 |
|
---|
| 133 | s3d_CDrvD3d9DummySubscrBank m_DummySubscrBank;
|
---|
| 134 | };
|
---|
| 135 |
|
---|
| 136 | ///////////////////////////////////////////////////////////////////////////////
|
---|
| 137 |
|
---|
| 138 | //@
|
---|
| 139 | struct s3d_CDrvD3d9VertBufObj
|
---|
| 140 | : public s3d_CUtilPtrBase
|
---|
| 141 | {
|
---|
| 142 | s3d_CUtilStr m_MainInfo;
|
---|
| 143 | s3d_CDrvD3d9VertBuf m_VertBuf;
|
---|
| 144 | s3d_CSysIntps m_BufSize;
|
---|
| 145 | s3d_CSysIntps m_VertSize;
|
---|
| 146 | s3d_CDrvD3d9VertDecl m_VertDecl;
|
---|
| 147 | int m_VertBufFmtDecl;
|
---|
| 148 |
|
---|
| 149 | DWORD m_Usage;
|
---|
| 150 | D3DPOOL m_Pool;
|
---|
| 151 |
|
---|
| 152 | s3d_CUtilMsgHandlerPtr m_ReportMsgHandler;
|
---|
| 153 | ~s3d_CDrvD3d9VertBufObj();
|
---|
| 154 |
|
---|
| 155 | void Reset();
|
---|
| 156 | };
|
---|
| 157 |
|
---|
| 158 | //@
|
---|
| 159 | typedef s3d_CUtilPtr<s3d_CDrvD3d9VertBufObj> s3d_CDrvD3d9VertBufObjPtr;
|
---|
| 160 |
|
---|
| 161 | ///////////////////////////////////////////////////////////////////////////////
|
---|
| 162 |
|
---|
| 163 | //@
|
---|
| 164 | struct s3d_CDrvD3d9VertBufAttr
|
---|
| 165 | {
|
---|
| 166 | bool m_BankDyn;
|
---|
| 167 | s3d_CDrvSigPtr m_BankSig;
|
---|
| 168 | int m_Chan;
|
---|
| 169 | int m_Slot;
|
---|
| 170 | };
|
---|
| 171 |
|
---|
| 172 | ///////////////////////////////////////////////////////////////////////////////
|
---|
| 173 |
|
---|
| 174 | //@
|
---|
| 175 | struct s3d_CDrvD3d9VertBufObjBatch
|
---|
| 176 | : public s3d_CDrvD3d9VertBufObj
|
---|
| 177 | {
|
---|
| 178 | s3d_CDrvD3d9VertBufObjBatch();
|
---|
| 179 | ~s3d_CDrvD3d9VertBufObjBatch();
|
---|
| 180 |
|
---|
| 181 | s3d_CUtilStr m_MainInfo;
|
---|
| 182 | bool m_Complete;
|
---|
| 183 |
|
---|
| 184 | s3d_CDrvSigPtr m_TopolSig;
|
---|
| 185 | s3d_CSysIntps m_AttrCnt;
|
---|
| 186 | s3d_CUtilOwnArray<s3d_CDrvD3d9VertBufAttr> m_AttrArray;
|
---|
| 187 | s3d_CUtilTree<s3d_CDrvD3d9VertBufObjBatch *>::CNode m_Node;
|
---|
| 188 | };
|
---|
| 189 |
|
---|
| 190 | //@
|
---|
| 191 | typedef s3d_CUtilPtr<s3d_CDrvD3d9VertBufObjBatch>
|
---|
| 192 | s3d_CDrvD3d9VertBufObjBatchPtr;
|
---|
| 193 |
|
---|
| 194 | //@
|
---|
| 195 | typedef s3d_CUtilTree<s3d_CDrvD3d9VertBufObjBatch *>
|
---|
| 196 | s3d_CDrvD3d9VertBufObjBatchTree;
|
---|
| 197 |
|
---|
| 198 |
|
---|
| 199 | ///////////////////////////////////////////////////////////////////////////////
|
---|
| 200 |
|
---|
| 201 | //@
|
---|
| 202 | struct s3d_CDrvD3d9VertBufObjBatchRef
|
---|
| 203 | {
|
---|
| 204 | s3d_CDrvSig *m_TopolSig;
|
---|
| 205 | s3d_CDrvGfxAttr *m_AttrArray;
|
---|
| 206 | s3d_CSysIntps m_AttrCnt;
|
---|
| 207 |
|
---|
| 208 | static int Compare(
|
---|
| 209 | const s3d_CDrvD3d9VertBufObjBatch *VertBufObj,
|
---|
| 210 | const s3d_CDrvD3d9VertBufObjBatchRef &Ref);
|
---|
| 211 | };
|
---|
| 212 |
|
---|
| 213 | //@
|
---|
| 214 | bool operator==(
|
---|
| 215 | const s3d_CDrvD3d9VertBufObjBatch *VertBufObj,
|
---|
| 216 | const s3d_CDrvD3d9VertBufObjBatchRef &Ref);
|
---|
| 217 |
|
---|
| 218 | //@
|
---|
| 219 | bool operator<(
|
---|
| 220 | const s3d_CDrvD3d9VertBufObjBatch *VertBufObj,
|
---|
| 221 | const s3d_CDrvD3d9VertBufObjBatchRef &Ref);
|
---|
| 222 |
|
---|
| 223 | ///////////////////////////////////////////////////////////////////////////////
|
---|
| 224 |
|
---|
| 225 | //@
|
---|
| 226 | struct s3d_CDrvD3d9Packet
|
---|
| 227 | {
|
---|
| 228 | s3d_CSysInt32u m_VertCnt;
|
---|
| 229 | s3d_CSysInt32u m_IdxCnt;
|
---|
| 230 | s3d_CSysInt32u m_PrimCnt;
|
---|
| 231 | s3d_CSysInt32u m_BoneIdxCnt;
|
---|
| 232 | };
|
---|
| 233 |
|
---|
| 234 | ///////////////////////////////////////////////////////////////////////////////
|
---|
| 235 |
|
---|
| 236 | //@
|
---|
| 237 | struct s3d_CDrvD3d9IdxBufObj
|
---|
| 238 | : public s3d_CUtilPtrBase
|
---|
| 239 | {
|
---|
| 240 | s3d_CDrvD3d9IdxBuf m_IdxBuf;
|
---|
| 241 | s3d_CSysIntps m_IdxCnt;
|
---|
| 242 | s3d_CSysIntps m_BufSize;
|
---|
| 243 |
|
---|
| 244 | D3DFORMAT m_Fmt;
|
---|
| 245 | D3DPRIMITIVETYPE m_D3dPrim;
|
---|
| 246 | DWORD m_Usage;
|
---|
| 247 | D3DPOOL m_Pool;
|
---|
| 248 |
|
---|
| 249 | s3d_CUtilMsgHandlerPtr m_ReportMsgHandler;
|
---|
| 250 | ~s3d_CDrvD3d9IdxBufObj();
|
---|
| 251 | void Reset();
|
---|
| 252 | };
|
---|
| 253 |
|
---|
| 254 | //@
|
---|
| 255 | typedef s3d_CUtilPtr<s3d_CDrvD3d9IdxBufObj> s3d_CDrvD3d9IdxBufObjPtr;
|
---|
| 256 |
|
---|
| 257 | ///////////////////////////////////////////////////////////////////////////////
|
---|
| 258 |
|
---|
| 259 | //@
|
---|
| 260 | struct s3d_CDrvD3d9IdxBufObjBatch
|
---|
| 261 | : public s3d_CDrvD3d9IdxBufObj
|
---|
| 262 | {
|
---|
| 263 | s3d_CDrvD3d9IdxBufObjBatch();
|
---|
| 264 | ~s3d_CDrvD3d9IdxBufObjBatch();
|
---|
| 265 |
|
---|
| 266 | s3d_CSysIntps m_BoneIdxCnt;
|
---|
| 267 | s3d_CUtilOwnArray<s3d_CSysInt32u> m_BoneIdxArray;
|
---|
| 268 |
|
---|
| 269 | s3d_CSysIntps m_PacketCnt;
|
---|
| 270 | s3d_CUtilOwnArray<s3d_CDrvD3d9Packet> m_PacketArray;
|
---|
| 271 |
|
---|
| 272 | s3d_CDrvSigPtr m_TopolSig;
|
---|
| 273 | s3d_CUtilTree<s3d_CDrvD3d9IdxBufObjBatch *>::CNode m_Node;
|
---|
| 274 | };
|
---|
| 275 |
|
---|
| 276 | //@
|
---|
| 277 | typedef s3d_CUtilPtr<s3d_CDrvD3d9IdxBufObjBatch> s3d_CDrvD3d9IdxBufObjBatchPtr;
|
---|
| 278 |
|
---|
| 279 | //@
|
---|
| 280 | typedef s3d_CUtilTree<s3d_CDrvD3d9IdxBufObjBatch *>
|
---|
| 281 | s3d_CDrvD3d9IdxBufObjBatchTree;
|
---|
| 282 |
|
---|
| 283 | ///////////////////////////////////////////////////////////////////////////////
|
---|
| 284 |
|
---|
| 285 | //@
|
---|
| 286 | struct s3d_CDrvD3d9IdxBufObjBatchRef
|
---|
| 287 | {
|
---|
| 288 | s3d_CDrvSig *m_TopolSig;
|
---|
| 289 |
|
---|
| 290 | static int Compare(
|
---|
| 291 | const s3d_CDrvD3d9IdxBufObjBatch *IdxBufObj,
|
---|
| 292 | const s3d_CDrvD3d9IdxBufObjBatchRef &Ref);
|
---|
| 293 | };
|
---|
| 294 |
|
---|
| 295 | //@
|
---|
| 296 | bool operator==(
|
---|
| 297 | const s3d_CDrvD3d9IdxBufObjBatch *IdxBufObj,
|
---|
| 298 | const s3d_CDrvD3d9IdxBufObjBatchRef &Ref);
|
---|
| 299 |
|
---|
| 300 | //@
|
---|
| 301 | bool operator<(
|
---|
| 302 | const s3d_CDrvD3d9IdxBufObjBatch *IdxBufObj,
|
---|
| 303 | const s3d_CDrvD3d9IdxBufObjBatchRef &Ref);
|
---|
| 304 |
|
---|
| 305 | ///////////////////////////////////////////////////////////////////////////////
|
---|
| 306 |
|
---|
| 307 | //@
|
---|
| 308 | struct s3d_CDrvD3d9BufMgrVertBuf
|
---|
| 309 | {
|
---|
| 310 | s3d_CDrvD3d9VertBuf m_VertBuf;
|
---|
| 311 | s3d_CSysIntps m_UsedSize;
|
---|
| 312 |
|
---|
| 313 | s3d_CDrvD3d9BufMgrVertBuf();
|
---|
| 314 | void Reset();
|
---|
| 315 | };
|
---|
| 316 |
|
---|
| 317 | ///////////////////////////////////////////////////////////////////////////////
|
---|
| 318 |
|
---|
| 319 | //@
|
---|
| 320 | struct s3d_CDrvD3d9IdxBufMem
|
---|
| 321 | {
|
---|
| 322 | const s3d_CSysIntm *m_Data;
|
---|
| 323 | D3DFORMAT m_Fmt;
|
---|
| 324 | D3DPRIMITIVETYPE m_Prim;
|
---|
| 325 | };
|
---|
| 326 |
|
---|
| 327 | ///////////////////////////////////////////////////////////////////////////////
|
---|
| 328 |
|
---|
| 329 | //@
|
---|
| 330 | struct s3d_CDrvD3d9VertBufMem
|
---|
| 331 | {
|
---|
| 332 | const s3d_CSysIntm *m_Data;
|
---|
| 333 | s3d_CDrvD3d9VertDecl m_VertDecl;
|
---|
| 334 | s3d_CSysIntps m_VertSize;
|
---|
| 335 | int m_VertBufFmtDecl;
|
---|
| 336 | };
|
---|
| 337 |
|
---|
| 338 | ///////////////////////////////////////////////////////////////////////////////
|
---|
| 339 |
|
---|
| 340 | //@
|
---|
| 341 | class s3d_CDrvD3d9BufMgr
|
---|
| 342 | : public s3d_CUtilPtrBase
|
---|
| 343 | {
|
---|
| 344 | public:
|
---|
| 345 | s3d_CDrvD3d9BufMgr(
|
---|
| 346 | s3d_CUtilMsgHandler *MsgHandler, s3d_CDrvD3d9ProgMgr *ProgMgr,
|
---|
| 347 | s3d_CDrvD3d9Env &Env, s3d_CDrvD3d9Param *D3dParam,
|
---|
| 348 | s3d_CSysIntps VertIdxLimit, LPDIRECT3DDEVICE9 D3dDev);
|
---|
| 349 | ~s3d_CDrvD3d9BufMgr();
|
---|
| 350 |
|
---|
| 351 | // Vertex buffer
|
---|
| 352 | s3d_CDrvD3d9VertBufObjBatchPtr CreateVertBufObjStatic(
|
---|
| 353 | const s3d_CDrvGfxCharge *Charge, s3d_CDrvD3d9ProgMgr *ProgMgr,
|
---|
| 354 | bool SWVertProc);
|
---|
| 355 | s3d_CDrvD3d9VertBufObjPtr FetchVertBufObjDyn(
|
---|
| 356 | s3d_CUtilMemPool *MemPool, const s3d_CDrvGfxCharge *Charge,
|
---|
| 357 | s3d_CDrvD3d9ProgMgr *ProgMgr, bool SWVertProc);
|
---|
| 358 | const s3d_CSysIntm *CheckVertBufDirectPointFloat3(
|
---|
| 359 | const s3d_CDrvGfxCharge *Charge,
|
---|
| 360 | s3d_CDrvD3d9VertBufDesc_cr VertBufDesc);
|
---|
| 361 | void FetchVertBufMemDyn(
|
---|
| 362 | s3d_CUtilMemPool *MemPool, const s3d_CDrvGfxCharge *Charge,
|
---|
| 363 | s3d_CDrvD3d9ProgMgr *ProgMgr, s3d_CDrvD3d9VertBufMem &VertBuf);
|
---|
| 364 |
|
---|
| 365 | // Index buffer
|
---|
| 366 | s3d_CDrvD3d9IdxBufObjBatchPtr CreateIdxBufObjStatic(
|
---|
| 367 | const s3d_CDrvGfxCharge *Charge, DWORD Usage, D3DPOOL Pool);
|
---|
| 368 | s3d_CDrvD3d9IdxBufObjPtr FetchIdxBufObjDyn(
|
---|
| 369 | s3d_CUtilMemPool *MemPool, const s3d_CDrvGfxCharge *Charge,
|
---|
| 370 | s3d_CUtilMemPoolArray<s3d_CSysInt32u> &BoneIdxArray,
|
---|
| 371 | DWORD Usage, D3DPOOL Pool);
|
---|
| 372 | void FetchIdxBufMemDyn(
|
---|
| 373 | s3d_CUtilMemPool *MemPool, const s3d_CDrvGfxCharge *Charge,
|
---|
| 374 | s3d_CDrvD3d9IdxBufMem &IdxBuf,
|
---|
| 375 | s3d_CUtilMemPoolArray<s3d_CSysInt32u> &BoneIdxArray);
|
---|
| 376 |
|
---|
| 377 | // Packet data
|
---|
| 378 | void LoadBatchPacketData(
|
---|
| 379 | const s3d_CDrvGfxCharge *Charge,
|
---|
| 380 | s3d_CSysIntps PacketCnt, s3d_CDrvD3d9Packet *PacketArray,
|
---|
| 381 | s3d_CSysIntps PacketSubBase);
|
---|
| 382 |
|
---|
| 383 | void Park();
|
---|
| 384 | void Unpark();
|
---|
| 385 |
|
---|
| 386 | const s3d_CDrvD3d9VertBuf &GetVertBufDummyBlendWghIdx() const;
|
---|
| 387 |
|
---|
| 388 | private:
|
---|
| 389 | s3d_CUtilMsgHandlerPtr m_MsgHandler;
|
---|
| 390 | s3d_CDrvD3d9VertBufObjPtr m_VertBufDyn;
|
---|
| 391 | s3d_CDrvD3d9VertBufObjBatchTree m_VertBufTree;
|
---|
| 392 | s3d_CDrvD3d9IdxBufObjPtr m_IdxBufDyn;
|
---|
| 393 | s3d_CDrvD3d9IdxBufObjBatchTree m_IdxBufTree;
|
---|
| 394 | s3d_CDrvD3d9BufMgrVertBuf m_VertBufDummyWghIdx;
|
---|
| 395 | s3d_CUtilMap<s3d_CDrvD3d9VertElemObjKey, s3d_CDrvD3d9VertDecl>
|
---|
| 396 | m_VertDeclMap;
|
---|
| 397 | s3d_CDrvD3d9ProgMgrPtr m_ProgMgr;
|
---|
| 398 | s3d_CDrvD3d9Device m_D3dDev;
|
---|
| 399 | s3d_CDrvD3d9Env *m_Env;
|
---|
| 400 | s3d_CDrvD3d9ParamPtr m_D3dParam;
|
---|
| 401 |
|
---|
| 402 | s3d_CSysIntps m_VertIdxLimit;
|
---|
| 403 | bool m_PreferIdxBuf32;
|
---|
| 404 |
|
---|
| 405 | // Vertex declaration
|
---|
| 406 | void FindVertDecl(
|
---|
| 407 | s3d_CDrvD3d9VertBufDesc VertBufFmt,
|
---|
| 408 | s3d_CDrvD3d9VertDecl &VertDecl);
|
---|
| 409 |
|
---|
| 410 | // Vertex buffer
|
---|
| 411 | s3d_CDrvD3d9VertBufObjBatchPtr AllocVertBufObj(
|
---|
| 412 | const s3d_CDrvGfxCharge *Charge,
|
---|
| 413 | const s3d_CDrvD3d9VertBufDesc &VertBufFmt,
|
---|
| 414 | LPDIRECT3DVERTEXDECLARATION9 VertDecl, bool SWVertProc);
|
---|
| 415 | void LoadVertBuf(
|
---|
| 416 | const s3d_CDrvGfxCharge *Charge, s3d_CDrvD3d9VertBufObj *VertBuf,
|
---|
| 417 | const s3d_CDrvD3d9VertBufDesc &VertBufDesc,
|
---|
| 418 | s3d_CSysIntps DestStartOffs, s3d_CSysIntps DestVertBase,
|
---|
| 419 | s3d_CSysIntps VertBase, s3d_CSysIntps VertCnt,
|
---|
| 420 | bool DynOnly, bool Discard);
|
---|
| 421 | void LoadVertBufData(
|
---|
| 422 | const s3d_CDrvGfxCharge *Charge,
|
---|
| 423 | const s3d_CDrvD3d9VertBufDesc &VertBufDesc, s3d_CSysIntm *Dest,
|
---|
| 424 | s3d_CSysIntps VertBase, s3d_CSysIntps VertCnt, bool DynOnly);
|
---|
| 425 | void CalcVertBufDesc(
|
---|
| 426 | const s3d_CDrvGfxCharge *Charge,
|
---|
| 427 | s3d_CDrvD3d9VertBufDesc &VertBufDesc);
|
---|
| 428 |
|
---|
| 429 | // Index buffer
|
---|
| 430 | s3d_CDrvD3d9IdxBufObjBatchPtr AllocIdxBufObj(
|
---|
| 431 | const s3d_CDrvGfxCharge *Charge,
|
---|
| 432 | D3DFORMAT Fmt, DWORD Usage, D3DPOOL Pool);
|
---|
| 433 | void LoadIdxBuf(
|
---|
| 434 | const s3d_CDrvGfxCharge *Charge, s3d_CDrvD3d9IdxBufObj *IdxBuf,
|
---|
| 435 | s3d_CSysIntps DestIdxBase, s3d_CSysIntps VertOffset,
|
---|
| 436 | s3d_CSysIntps IdxBase, bool Discard);
|
---|
| 437 | void LoadIdxBufData(
|
---|
| 438 | const s3d_CDrvGfxCharge *Charge, D3DFORMAT Fmt, s3d_CSysIntm
|
---|
| 439 | *Dest,
|
---|
| 440 | s3d_CSysIntps IdxCnt, s3d_CSysIntps DestIdxBase,
|
---|
| 441 | s3d_CSysIntps VertOffset, s3d_CSysIntps IdxBase);
|
---|
| 442 |
|
---|
| 443 | D3DFORMAT CalcIdxBufFmtOfCnt(
|
---|
| 444 | const s3d_CSysChar *Info, s3d_CSysIntps Cnt, bool Prefer32);
|
---|
| 445 | s3d_CSysIntps CalcSizeOfFmtCnt(
|
---|
| 446 | D3DFORMAT IndexBufFmt, s3d_CSysIntps Cnt);
|
---|
| 447 | s3d_CSysIntps CalcCntOfFmtSize(
|
---|
| 448 | D3DFORMAT IndexBufFmt, s3d_CSysIntps Size);
|
---|
| 449 |
|
---|
| 450 | void CheckAllocDummyBuffers(
|
---|
| 451 | const s3d_CDrvGfxCharge* Charge, int VertBufFmtDecl, bool
|
---|
| 452 | SWVertProc);
|
---|
| 453 | void CreateDummyVertBuf(
|
---|
| 454 | DWORD Usage, D3DPOOL Pool);
|
---|
| 455 |
|
---|
| 456 | void Reset();
|
---|
| 457 | void FreeDynBuffers();
|
---|
| 458 | };
|
---|
| 459 |
|
---|
| 460 | //@
|
---|
| 461 | typedef s3d_CUtilPtr<s3d_CDrvD3d9BufMgr> s3d_CDrvD3d9BufMgrPtr;
|
---|
| 462 |
|
---|
| 463 | ///////////////////////////////////////////////////////////////////////////////
|
---|
| 464 |
|
---|
| 465 | //@
|
---|
| 466 | struct s3d_CDrvD3d9BufInitUtil
|
---|
| 467 | {
|
---|
| 468 | //@
|
---|
| 469 | static void InitFloatX2ToFloat32X2(
|
---|
| 470 | s3d_CSysIntm *pDest, s3d_CSysIntps VertexSize,
|
---|
| 471 | const s3d_CSysIntm *pSrc, s3d_CSysIntps Cnt,
|
---|
| 472 | s3d_CSysIntps Stride);
|
---|
| 473 | //@
|
---|
| 474 | static void InitFloatX3ToFloat32X3(
|
---|
| 475 | s3d_CSysIntm *pDest, s3d_CSysIntps VertexSize,
|
---|
| 476 | const s3d_CSysIntm *pSrc, s3d_CSysIntps Cnt,
|
---|
| 477 | s3d_CSysIntps Stride);
|
---|
| 478 | //@
|
---|
| 479 | static void InitFloatX4ToFloat32X4(
|
---|
| 480 | s3d_CSysIntm *pDest, s3d_CSysIntps VertexSize,
|
---|
| 481 | const s3d_CSysIntm *pSrc, s3d_CSysIntps Cnt,
|
---|
| 482 | s3d_CSysIntps Stride);
|
---|
| 483 | //@
|
---|
| 484 | static void InitFloatX3ToColor(
|
---|
| 485 | s3d_CSysIntm *pDest, s3d_CSysIntps VertexSize,
|
---|
| 486 | const s3d_CSysIntm *pSrc, s3d_CSysIntps Cnt,
|
---|
| 487 | s3d_CSysIntps Stride);
|
---|
| 488 | //@
|
---|
| 489 | static void InitFloatX4ToColor(
|
---|
| 490 | s3d_CSysIntm *pDest, s3d_CSysIntps VertexSize,
|
---|
| 491 | const s3d_CSysIntm *pSrc, s3d_CSysIntps Cnt,
|
---|
| 492 | s3d_CSysIntps Stride);
|
---|
| 493 | //@
|
---|
| 494 | static void InitIntX4ToInt8uX4(
|
---|
| 495 | s3d_CSysIntm *pDest, s3d_CSysIntps VertexSize,
|
---|
| 496 | const s3d_CSysIntm *pSrc, s3d_CSysIntps Cnt,
|
---|
| 497 | s3d_CSysIntps Stride);
|
---|
| 498 | //@
|
---|
| 499 | // Compress float[-1..1] to int[0..255]
|
---|
| 500 | // e.g. normals
|
---|
| 501 | static void InitFloatX3ToInt8uX4(
|
---|
| 502 | s3d_CSysIntm *pDest, s3d_CSysIntps VertexSize,
|
---|
| 503 | const s3d_CSysIntm *pSrc, s3d_CSysIntps Cnt,
|
---|
| 504 | s3d_CSysIntps Stride);
|
---|
| 505 | //@
|
---|
| 506 | // Compress float[0..1] to int[0..255]
|
---|
| 507 | // e.g. blendweights
|
---|
| 508 | static void InitFloatX4ToInt8uX4(
|
---|
| 509 | s3d_CSysIntm *pDest, s3d_CSysIntps VertexSize,
|
---|
| 510 | const s3d_CSysIntm *pSrc, s3d_CSysIntps Cnt,
|
---|
| 511 | s3d_CSysIntps Stride);
|
---|
| 512 |
|
---|
| 513 | //@
|
---|
| 514 | static void VertFormatError(
|
---|
| 515 | s3d_CUtilMsgHandler *MsgHandler, const s3d_CDrvGfxCharge *Charge);
|
---|
| 516 | };
|
---|
| 517 |
|
---|
| 518 | ///////////////////////////////////////////////////////////////////////////////
|
---|
| 519 | // Implementations:
|
---|
| 520 | ///////////////////////////////////////////////////////////////////////////////
|
---|
| 521 |
|
---|
| 522 | S3D_SYS_INLINE
|
---|
| 523 | s3d_CDrvD3d9DummyWghBank::s3d_CDrvD3d9DummyWghBank()
|
---|
| 524 | {
|
---|
| 525 | m_Data[0] = 1;
|
---|
| 526 | m_Data[1] = 0;
|
---|
| 527 | m_Data[2] = 0;
|
---|
| 528 | m_Data[3] = 0;
|
---|
| 529 | }
|
---|
| 530 |
|
---|
| 531 | S3D_SYS_INLINE
|
---|
| 532 | void s3d_CDrvD3d9DummyWghBank::Fetch(
|
---|
| 533 | s3d_CUtilMsgHandler *MsgHandler, const s3d_CSysChar *Info,
|
---|
| 534 | s3d_CDrvBankContent &BankContent)
|
---|
| 535 | {
|
---|
| 536 | BankContent.m_Cnt = 1;
|
---|
| 537 | BankContent.m_Data = reinterpret_cast<s3d_CSysIntm*>(&m_Data);
|
---|
| 538 | BankContent.m_Stride = 0;
|
---|
| 539 | BankContent.m_TypeDesc = s3d_DrvDataGetTypeDesc<s3d_CDrvFloat32X4>();
|
---|
| 540 | }
|
---|
| 541 |
|
---|
| 542 | S3D_SYS_INLINE
|
---|
| 543 | s3d_CUtilPtrBase *s3d_CDrvD3d9DummyWghBank::GetOwner(
|
---|
| 544 | s3d_CUtilMsgHandler *MsgHandler, const s3d_CSysChar *Info)
|
---|
| 545 | {
|
---|
| 546 | return 0;
|
---|
| 547 | }
|
---|
| 548 |
|
---|
| 549 | ///////////////////////////////////////////////////////////////////////////////
|
---|
| 550 |
|
---|
| 551 | S3D_SYS_INLINE
|
---|
| 552 | s3d_CDrvD3d9DummyWghAttr::s3d_CDrvD3d9DummyWghAttr()
|
---|
| 553 | {
|
---|
| 554 | m_Bank = &m_DummyWghBank;
|
---|
| 555 | m_BankDyn = false;
|
---|
| 556 | m_BankSig = 0;
|
---|
| 557 | m_Chan = s3d_CDrvGfxEng::AttrChan_BoneWgh;
|
---|
| 558 | m_Slot = 0;
|
---|
| 559 | }
|
---|
| 560 |
|
---|
| 561 | ///////////////////////////////////////////////////////////////////////////////
|
---|
| 562 |
|
---|
| 563 | S3D_SYS_INLINE
|
---|
| 564 | s3d_CDrvD3d9DummySubscrBank::s3d_CDrvD3d9DummySubscrBank()
|
---|
| 565 | {
|
---|
| 566 | m_Data[0] = 0;
|
---|
| 567 | m_Data[1] = 1;
|
---|
| 568 | m_Data[2] = 2;
|
---|
| 569 | m_Data[3] = 3;
|
---|
| 570 | }
|
---|
| 571 |
|
---|
| 572 | S3D_SYS_INLINE
|
---|
| 573 | void s3d_CDrvD3d9DummySubscrBank::Fetch(
|
---|
| 574 | s3d_CUtilMsgHandler *MsgHandler, const s3d_CSysChar *Info,
|
---|
| 575 | s3d_CDrvBankContent &BankContent)
|
---|
| 576 | {
|
---|
| 577 | BankContent.m_Cnt = 1;
|
---|
| 578 | BankContent.m_Data = reinterpret_cast<s3d_CSysIntm*>(&m_Data);
|
---|
| 579 | BankContent.m_Stride = 0;
|
---|
| 580 | BankContent.m_TypeDesc = s3d_DrvDataGetTypeDesc<s3d_CDrvInt32uX4>();
|
---|
| 581 | }
|
---|
| 582 |
|
---|
| 583 | S3D_SYS_INLINE
|
---|
| 584 | s3d_CUtilPtrBase *s3d_CDrvD3d9DummySubscrBank::GetOwner(
|
---|
| 585 | s3d_CUtilMsgHandler *MsgHandler, const s3d_CSysChar *Info)
|
---|
| 586 | {
|
---|
| 587 | return 0;
|
---|
| 588 | }
|
---|
| 589 |
|
---|
| 590 | ///////////////////////////////////////////////////////////////////////////////
|
---|
| 591 |
|
---|
| 592 | S3D_SYS_INLINE
|
---|
| 593 | s3d_CDrvD3d9DummySubscrAttr::s3d_CDrvD3d9DummySubscrAttr()
|
---|
| 594 | {
|
---|
| 595 | m_Bank = &m_DummySubscrBank;
|
---|
| 596 | m_BankDyn = false;
|
---|
| 597 | m_BankSig = 0;
|
---|
| 598 | m_Chan = s3d_CDrvGfxEng::AttrChan_BoneSubscr;
|
---|
| 599 | m_Slot = 0;
|
---|
| 600 | }
|
---|
| 601 |
|
---|
| 602 | ///////////////////////////////////////////////////////////////////////////////
|
---|
| 603 |
|
---|
| 604 | S3D_SYS_INLINE
|
---|
| 605 | s3d_CDrvD3d9VertBufDesc::s3d_CDrvD3d9VertBufDesc()
|
---|
| 606 | {
|
---|
| 607 | Reset();
|
---|
| 608 | }
|
---|
| 609 |
|
---|
| 610 | S3D_SYS_INLINE
|
---|
| 611 | void s3d_CDrvD3d9VertBufDesc::Reset()
|
---|
| 612 | {
|
---|
| 613 | m_PointAttr = 0;
|
---|
| 614 | m_ColorAlphaAttr = 0;
|
---|
| 615 | m_NormalAttr = 0;
|
---|
| 616 | m_BoneWghAttr = 0;
|
---|
| 617 | m_BoneSubscrAttr = 0;
|
---|
| 618 | int iTex = 0;
|
---|
| 619 | for(iTex = 0; iTex < S3D_DRV_D3D9_MAX_ATTR_CNT; iTex++)
|
---|
| 620 | m_TexAttrArray[iTex] = 0;
|
---|
| 621 |
|
---|
| 622 | m_VertElemCnt = 0;
|
---|
| 623 | s3d_SysMemset(m_VertElemArray, 0, S3D_SYS_SIZEOFS(m_VertElemArray));
|
---|
| 624 | m_VertSize = 0;
|
---|
| 625 | m_VertBufFmtDecl = 0;
|
---|
| 626 | }
|
---|
| 627 |
|
---|
| 628 | ///////////////////////////////////////////////////////////////////////////////
|
---|
| 629 |
|
---|
| 630 | S3D_SYS_INLINE
|
---|
| 631 | s3d_CDrvD3d9BufMgrVertBuf::s3d_CDrvD3d9BufMgrVertBuf()
|
---|
| 632 | {
|
---|
| 633 | Reset();
|
---|
| 634 | }
|
---|
| 635 |
|
---|
| 636 | S3D_SYS_INLINE
|
---|
| 637 | void s3d_CDrvD3d9BufMgrVertBuf::Reset()
|
---|
| 638 | {
|
---|
| 639 | m_VertBuf = 0;
|
---|
| 640 | m_UsedSize = 0;
|
---|
| 641 | }
|
---|
| 642 |
|
---|
| 643 | ///////////////////////////////////////////////////////////////////////////////
|
---|
| 644 |
|
---|
| 645 | S3D_SYS_INLINE
|
---|
| 646 | const s3d_CDrvD3d9VertBuf &s3d_CDrvD3d9BufMgr::GetVertBufDummyBlendWghIdx()
|
---|
| 647 | const
|
---|
| 648 | {
|
---|
| 649 | return m_VertBufDummyWghIdx.m_VertBuf;
|
---|
| 650 | }
|
---|
| 651 |
|
---|
| 652 | ///////////////////////////////////////////////////////////////////////////////
|
---|
| 653 |
|
---|
| 654 | #endif
|
---|