Hello.
In a scene i need to use a cubemap, and i've got some troubles about it.
At first i created a render target array in this way
__forceinline void MakeCubeMap()
{
ID3D10Texture2D *text;
D3D10_TEXTURE2D_DESC desc;
desc.ArraySize = 6;
desc.BindFlags = D3D10_BIND_RENDER_TARGET | D3D10_BIND_SHADER_RESOURCE;
desc.CPUAccessFlags = 0;
desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
desc.Usage = D3D10_USAGE_DEFAULT;
desc.Height = 150;
desc.Width = 150;
desc.MiscFlags = D3D10_RESOURCE_MISC_TEXTURECUBE;
desc.SampleDesc.Count = 1;
desc.SampleDesc.Quality = 0;
desc.MipLevels = 1;
device->CreateTexture2D(&desc,NULL,&text);
D3D10_RENDER_TARGET_VIEW_DESC dsc;
dsc.Format = desc.Format;
dsc.ViewDimension = D3D10_RTV_DIMENSION_TEXTURE2DARRAY;
dsc.Texture2DArray.ArraySize = desc.ArraySize;
dsc.Texture2DArray.FirstArraySlice = 0;
dsc.Texture2DArray.MipSlice = 0;
device->CreateRenderTargetView(text,&dsc,&CubeMapRT);
D3D10_SHADER_RESOURCE_VIEW_DESC ds;
ds.Format = desc.Format;
ds.ViewDimension = D3D10_SRV_DIMENSION_TEXTURECUBE;
ds.Texture2DArray.ArraySize = dsc.Texture2DArray.ArraySize;
ds.Texture2DArray.MostDetailedMip = 0;
ds.Texture2DArray.FirstArraySlice = 0;
ds.Texture2DArray.MipLevels = 1;
device->CreateShaderResourceView(text,&ds,&CubeMapSR);
text->Release();
desc.Format = DXGI_FORMAT_D32_FLOAT;
desc.BindFlags = D3D10_BIND_DEPTH_STENCIL;
device->CreateTexture2D(&desc,NULL,&text);
D3D10_DEPTH_STENCIL_VIEW_DESC d;
d.Format = desc.Format;
d.ViewDimension = D3D10_DSV_DIMENSION_TEXTURE2DARRAY;
d.Texture2DArray.ArraySize = 6;
d.Texture2DArray.FirstArraySlice = 0;
d.Texture2DArray.MipSlice = 0;
device->CreateDepthStencilView(text,&d,&CubeMapDS);
text->Release();
}
Ok and now? I've only to set it as render target and draw on it via geometry shader.
I wrote this
__forceinline void CubeMapRendering()
{
D3D10_VIEWPORT vp;
vp.Height = vp.Width = 150;
vp.TopLeftX = vp.TopLeftY = 0;
vp.MinDepth = 0.0f;
vp.MaxDepth = 1.0f;
float color[4] = { 0.0f, 1.0f, 0.0f, 0.0f };
device->ClearRenderTargetView(CubeMapRT,color);
device->ClearDepthStencilView(CubeMapDS,D3D10_CLEAR_DEPTH,1.0f,0);
device->OMSetRenderTargets(1,&CubeMapRT,CubeMapDS);
device->RSSetViewports(1,&vp);
shader->GetVariableByIndex(1)->AsMatrix()->SetMatrix((float*)&geometry->Matrix);
device->IASetInputLayout(geometry->Layout);
geometry->Mesh->CommitToDevice();
for (UINT i = 0; i < geometry->MatNum; i++)
{
shader->GetVariableByIndex(7)->AsShaderResource()->SetResource(geometry->Textures);
shader->GetTechniqueByIndex(0)->GetPassByIndex(2)->Apply(0);
geometry->Mesh->DrawSubset(i);
}
//Set the cubemap and restore default values.
shader->GetVariableByIndex(10)->AsShaderResource()->SetResource(CubeMapSR);
vp.Height = 600;
vp.Width = 800;
device->OMSetRenderTargets(1,&RenderTarget,depthstencil);
device->RSSetViewports(1,&vp);
}
It's enough?
PIX shows me the render target cleared without nothing (it's green).
Have i done all? Have i miss something?