Closed walbourn closed 6 years ago
This issue was traced to the fact that ModelMeshPart
uses GraphicsMemory
for the VB/IB. This effectively means it uses "DYNAMIC" (GPU/CPU shared memory) rather than "STATIC" (GPU only accessible memory like VRAM) memory allocation. This works fine for PrimitiveBatch
, SpriteBatch
, Constant Buffers, etc. and simplifies the interface for GeometricPrimitive
.
Given that most use of Model
is for static rather than dynamic geometry, this issue should be fixed by making ModelMeshPart
use ID3D12Resource pointers for VB and IB instead. This will require breaking changes to the existing Model loading API since it will now require a device instance as well as a ResourceUploadBatch
to complete the transfer to GPU memory. This will also impact anyone doing their own custom loaders or drawing with the DirectX 12 version of Model
.
Another option is to create a parallel StaticModel
, StaticModelMesh
, and StaticModelPart
. Then there can be either an Optimize
method on the Model
class which converts to a StaticModel
, or you can have direct loading of` StaticModel
.
See this pull request.
You can optionally call model->LoadBuffers(device, uploadBatch);
to convert a model from a dynamic VB/IB to a static VB/IB for better performance.
The
Model
class renders a little slower than expected, which is particularly noticeable on Xbox One.