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

Method DX11Texture2Array

GTE/Graphics/DX11/DX11Texture2Array.cpp:12–95  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

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

Callers

nothing calls this directly

Calls 11

GetNumLevelsMethod · 0.80
GetNumItemsMethod · 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