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

Method DX11TextureCubeArray

GTE/Graphics/DX11/DX11TextureCubeArray.cpp:12–96  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

10using namespace gte;
11
12DX11TextureCubeArray::DX11TextureCubeArray(ID3D11Device* device, TextureCubeArray const* textureCubeArray)
13 :
14 DX11TextureArray(textureCubeArray)
15{
16 // Specify the texture description. TODO: Support texture cube RTs?
17 D3D11_TEXTURE2D_DESC desc;
18 desc.Width = textureCubeArray->GetLength();
19 desc.Height = textureCubeArray->GetLength();
20 desc.MipLevels = textureCubeArray->GetNumLevels();
21 desc.ArraySize = textureCubeArray->GetNumItems();
22 desc.Format = static_cast<DXGI_FORMAT>(textureCubeArray->GetFormat());
23 desc.SampleDesc.Count = 1;
24 desc.SampleDesc.Quality = 0;
25 desc.BindFlags = D3D11_BIND_SHADER_RESOURCE;
26 desc.MiscFlags = D3D11_RESOURCE_MISC_TEXTURECUBE;
27 uint32_t usage = textureCubeArray->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 // DX11 does not allow a cube map to be a dynamic-update resource.
36 desc.Usage = D3D11_USAGE_DEFAULT;
37 desc.CPUAccessFlags = D3D11_CPU_ACCESS_NONE;
38 }
39 else // usage == Resource::Usage::SHADER_OUTPUT
40 {
41 desc.Usage = D3D11_USAGE_DEFAULT;
42 desc.BindFlags |= D3D11_BIND_UNORDERED_ACCESS;
43 desc.CPUAccessFlags = D3D11_CPU_ACCESS_NONE;
44 }
45
46 if (textureCubeArray->WantAutogenerateMipmaps())
47 {
48 desc.Usage = D3D11_USAGE_DEFAULT;
49 desc.BindFlags |= D3D11_BIND_RENDER_TARGET;
50 desc.CPUAccessFlags = D3D11_CPU_ACCESS_NONE;
51 desc.MiscFlags |= D3D11_RESOURCE_MISC_GENERATE_MIPS;
52 }
53
54 // Create the texture.
55 ID3D11Texture2D* dxTexture = nullptr;
56 if (textureCubeArray->GetData())
57 {
58 uint32_t const numSubresources = textureCubeArray->GetNumSubresources();
59 std::vector<D3D11_SUBRESOURCE_DATA> data(numSubresources);
60 for (uint32_t index = 0; index < numSubresources; ++index)
61 {
62 auto sr = textureCubeArray->GetSubresource(index);
63 data[index].pSysMem = sr.data;
64 data[index].SysMemPitch = sr.rowPitch;
65 data[index].SysMemSlicePitch = 0;
66 }
67 DX11Log(device->CreateTexture2D(&desc, &data[0], &dxTexture));
68 }
69 else

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