MCPcopy Create free account
hub / github.com/davideberly/GeometricTools / DX11Texture3

Method DX11Texture3

GTE/Graphics/DX11/DX11Texture3.cpp:12–93  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

10using namespace gte;
11
12DX11Texture3::DX11Texture3(ID3D11Device* device, Texture3 const* texture)
13 :
14 DX11TextureSingle(texture)
15{
16 // Specify the texture description.
17 D3D11_TEXTURE3D_DESC desc;
18 desc.Width = texture->GetWidth();
19 desc.Height = texture->GetHeight();
20 desc.Depth = texture->GetThickness();
21 desc.MipLevels = texture->GetNumLevels();
22 desc.Format = static_cast<DXGI_FORMAT>(texture->GetFormat());
23 desc.BindFlags = D3D11_BIND_SHADER_RESOURCE;
24 desc.MiscFlags = D3D11_RESOURCE_MISC_NONE;
25 uint32_t usage = texture->GetUsage();
26 if (usage == Resource::Usage::IMMUTABLE)
27 {
28 desc.Usage = D3D11_USAGE_IMMUTABLE;
29 desc.CPUAccessFlags = D3D11_CPU_ACCESS_NONE;
30 }
31 else if (usage == Resource::Usage::DYNAMIC_UPDATE)
32 {
33 desc.Usage = D3D11_USAGE_DYNAMIC;
34 desc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
35 }
36 else // usage == Resource::Usage::SHADER_OUTPUT
37 {
38 desc.Usage = D3D11_USAGE_DEFAULT;
39 desc.BindFlags |= D3D11_BIND_UNORDERED_ACCESS;
40 desc.CPUAccessFlags = D3D11_CPU_ACCESS_NONE;
41 }
42
43 if (texture->WantAutogenerateMipmaps())
44 {
45 desc.Usage = D3D11_USAGE_DEFAULT;
46 desc.BindFlags |= D3D11_BIND_RENDER_TARGET;
47 desc.CPUAccessFlags = D3D11_CPU_ACCESS_NONE;
48 desc.MiscFlags |= D3D11_RESOURCE_MISC_GENERATE_MIPS;
49 }
50
51 // Create the texture.
52 ID3D11Texture3D* dxTexture = nullptr;
53 if (texture->GetData())
54 {
55 uint32_t const numSubresources = texture->GetNumSubresources();
56 std::vector<D3D11_SUBRESOURCE_DATA> data(numSubresources);
57 for (uint32_t index = 0; index < numSubresources; ++index)
58 {
59 auto sr = texture->GetSubresource(index);
60 data[index].pSysMem = sr.data;
61 data[index].SysMemPitch = sr.rowPitch;
62 data[index].SysMemSlicePitch = sr.slicePitch;
63 }
64 DX11Log(device->CreateTexture3D(&desc, &data[0], &dxTexture));
65 }
66 else
67 {
68 DX11Log(device->CreateTexture3D(&desc, nullptr, &dxTexture));
69 }

Callers

nothing calls this directly

Calls 11

GetThicknessMethod · 0.80
GetNumLevelsMethod · 0.80
GetNumSubresourcesMethod · 0.80
GetSubresourceMethod · 0.80
GetWidthMethod · 0.45
GetHeightMethod · 0.45
GetFormatMethod · 0.45
GetUsageMethod · 0.45
GetDataMethod · 0.45
GetCopyMethod · 0.45

Tested by

no test coverage detected