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

Method DX11Texture1Array

GTE/Graphics/DX11/DX11Texture1Array.cpp:12–92  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

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

Callers

nothing calls this directly

Calls 10

GetNumLevelsMethod · 0.80
GetNumItemsMethod · 0.80
GetNumSubresourcesMethod · 0.80
GetSubresourceMethod · 0.80
GetLengthMethod · 0.45
GetFormatMethod · 0.45
GetUsageMethod · 0.45
GetDataMethod · 0.45
GetCopyMethod · 0.45

Tested by

no test coverage detected