GteDX11ConstantBuffer.cpp
Go to the documentation of this file.
1 // David Eberly, Geometric Tools, Redmond WA 98052
2 // Copyright (c) 1998-2017
3 // Distributed under the Boost Software License, Version 1.0.
4 // http://www.boost.org/LICENSE_1_0.txt
5 // http://www.geometrictools.com/License/Boost/LICENSE_1_0.txt
6 // File Version: 3.0.0 (2016/06/19)
7 
8 #include <GTEnginePCH.h>
10 using namespace gte;
11 
12 DX11ConstantBuffer::DX11ConstantBuffer(ID3D11Device* device, ConstantBuffer const* cbuffer)
13  :
14  DX11Buffer(cbuffer)
15 {
16  // Specify the buffer description.
17  D3D11_BUFFER_DESC desc;
18  desc.ByteWidth = cbuffer->GetNumBytes();
19  desc.BindFlags = D3D11_BIND_CONSTANT_BUFFER;
20  desc.MiscFlags = D3D11_RESOURCE_MISC_NONE;
21  desc.StructureByteStride = 0;
22  Resource::Usage usage = cbuffer->GetUsage();
23  if (usage == Resource::IMMUTABLE)
24  {
25  desc.Usage = D3D11_USAGE_IMMUTABLE;
26  desc.CPUAccessFlags = D3D11_CPU_ACCESS_NONE;
27  }
28  else if (usage == Resource::DYNAMIC_UPDATE)
29  {
30  desc.Usage = D3D11_USAGE_DYNAMIC;
31  desc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
32  }
33  else
34  {
35  desc.Usage = D3D11_USAGE_DEFAULT;
36  desc.CPUAccessFlags = D3D11_CPU_ACCESS_NONE;
37  }
38 
39  // Create the buffer.
40  ID3D11Buffer* buffer = nullptr;
41  HRESULT hr;
42  if (cbuffer->GetData())
43  {
44  D3D11_SUBRESOURCE_DATA data;
45  data.pSysMem = cbuffer->GetData();
46  data.SysMemPitch = 0;
47  data.SysMemSlicePitch = 0;
48  hr = device->CreateBuffer(&desc, &data, &buffer);
49  }
50  else
51  {
52  hr = device->CreateBuffer(&desc, nullptr, &buffer);
53  }
54  CHECK_HR_RETURN_NONE("Failed to create constant buffer");
55  mDXObject = buffer;
56 
57  // Create a staging buffer if requested.
58  if (cbuffer->GetCopyType() != Resource::COPY_NONE)
59  {
60  CreateStaging(device, desc);
61  }
62 }
63 
64 std::shared_ptr<GEObject> DX11ConstantBuffer::Create(void* device, GraphicsObject const* object)
65 {
66  if (object->GetType() == GT_CONSTANT_BUFFER)
67  {
68  return std::make_shared<DX11ConstantBuffer>(
69  reinterpret_cast<ID3D11Device*>(device),
70  static_cast<ConstantBuffer const*>(object));
71  }
72 
73  LogError("Invalid object type.");
74  return nullptr;
75 }
DYNAMIC_UPDATE
Definition: GteResource.h:42
COPY_NONE
Definition: GteResource.h:55
#define D3D11_RESOURCE_MISC_NONE
#define CHECK_HR_RETURN_NONE(msg)
IMMUTABLE
Definition: GteResource.h:42
static std::shared_ptr< GEObject > Create(void *device, GraphicsObject const *object)
Usage GetUsage() const
Definition: GteResource.h:126
GraphicsObjectType GetType() const
#define LogError(message)
Definition: GteLogger.h:92
GLboolean * data
Definition: glcorearb.h:126
ID3D11DeviceChild * mDXObject
unsigned int GetNumBytes() const
Definition: GteResource.h:116
void CreateStaging(ID3D11Device *device, D3D11_BUFFER_DESC const &bf)
char const * GetData() const
Definition: GteResource.h:151
GLsizeiptr const void GLenum usage
Definition: glcorearb.h:659
#define D3D11_CPU_ACCESS_NONE
GT_CONSTANT_BUFFER
CopyType GetCopyType() const
Definition: GteResource.h:136
GLuint buffer
Definition: glcorearb.h:655
DX11ConstantBuffer(ID3D11Device *device, ConstantBuffer const *cbuffer)


geometric_tools_engine
Author(s): Yijiang Huang
autogenerated on Thu Jul 18 2019 03:59:59