für meine ShadowMap Generierung von Punktlichtquellen möchte ich eine Textur verwenden, die ich mit dem Flag D3D11_RESOURCE_MISC_TEXTURECUBE erstelle. Davon erstelle ich mir 6 DepthStencilView für jeden Face, 6 SRV für je ein Face sowie ein SRV für das binden als TextureCube. Die Erstellung funktioniert ohne Fehler, jedoch bleibt der Inhalt der Textur leer beim Zeichnen. Hat einer eine Idee ob bei der Erstellung semantisch etwas schief geht?
Code: Alles auswählen
// Create texture object
D3D11_TEXTURE2D_DESC tex2DDesc = {0};
tex2DDesc.Width = width;
tex2DDesc.Height = height;
tex2DDesc.Format = DXGI_FORMAT_R32_TYPELESS;
tex2DDesc.BindFlags = D3D11_BIND_DEPTH_STENCIL | D3D11_BIND_SHADER_RESOURCE;
tex2DDesc.MiscFlags = D3D11_RESOURCE_MISC_TEXTURECUBE;
tex2DDesc.ArraySize = 6;
tex2DDesc.MipLevels = 1;
tex2DDesc.Usage = D3D11_USAGE_DEFAULT;
tex2DDesc.SampleDesc.Count = 1;
HRESULT hr = device->CreateTexture2D(&tex2DDesc, nullptr, cubeTexture.rebind());
assert(hr == S_OK);
// Create cube shader resource view
D3D11_SHADER_RESOURCE_VIEW_DESC srvDesc;
ZeroMemory(&srvDesc, sizeof(D3D11_SHADER_RESOURCE_VIEW_DESC));
srvDesc.Format = DXGI_FORMAT_R32_FLOAT;
srvDesc.TextureCube.MipLevels = 1;
srvDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURECUBE;
hr = device->CreateShaderResourceView(cubeTexture, &srvDesc, srv[6].rebind());
assert(hr == S_OK);
// Create face shader resource views
srvDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2DARRAY;
srvDesc.Texture2DArray.MipLevels = 1;
srvDesc.Texture2DArray.ArraySize = 1;
for(unsigned i = 0; i < 6; ++i) {
srvDesc.Texture2DArray.FirstArraySlice = i;
hr = device->CreateShaderResourceView(cubeTexture, &srvDesc, srv[i].rebind());
assert(hr == S_OK);
}
// Create depth stencil views
D3D11_DEPTH_STENCIL_VIEW_DESC dsvDesc;
ZeroMemory(&dsvDesc, sizeof(D3D11_RENDER_TARGET_VIEW_DESC));
dsvDesc.Format = DXGI_FORMAT_D32_FLOAT;
dsvDesc.ViewDimension = D3D11_DSV_DIMENSION_TEXTURE2DARRAY;
dsvDesc.Texture2DArray.ArraySize = 1;
for(unsigned i = 0; i < 6; ++i) {
dsvDesc.Texture2DArray.FirstArraySlice = i;
hr = device->CreateDepthStencilView(cubeTexture, &dsvDesc, dsvFace[i].rebind());
assert(hr == S_OK);
}
MfG
RazorX