|
@@ -33,8 +33,7 @@ GFXD3D11Cubemap::GFXD3D11Cubemap() : mTexture(NULL), mSRView(NULL), mDSView(NULL
|
|
|
mFaceFormat = GFXFormatR8G8B8A8;
|
|
|
for (U32 i = 0; i < CubeFaces; i++)
|
|
|
{
|
|
|
- for(U32 j=0; j < MaxMipMaps; j++)
|
|
|
- mRTView[i][j] = NULL;
|
|
|
+ mRTView[i] = NULL;
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -50,8 +49,7 @@ void GFXD3D11Cubemap::releaseSurfaces()
|
|
|
|
|
|
for (U32 i = 0; i < CubeFaces; i++)
|
|
|
{
|
|
|
- for (U32 j = 0; j < MaxMipMaps; j++)
|
|
|
- SAFE_RELEASE(mRTView[i][j]);
|
|
|
+ SAFE_RELEASE(mRTView[i]);
|
|
|
}
|
|
|
|
|
|
SAFE_RELEASE(mDSView);
|
|
@@ -212,16 +210,16 @@ void GFXD3D11Cubemap::initStatic(DDSFile *dds)
|
|
|
|
|
|
void GFXD3D11Cubemap::initDynamic(U32 texSize, GFXFormat faceFormat, U32 mipLevels)
|
|
|
{
|
|
|
- if(!mDynamic)
|
|
|
- GFXTextureManager::addEventDelegate(this, &GFXD3D11Cubemap::_onTextureEvent);
|
|
|
+ if (!mDynamic)
|
|
|
+ GFXTextureManager::addEventDelegate(this, &GFXD3D11Cubemap::_onTextureEvent);
|
|
|
|
|
|
- mDynamic = true;
|
|
|
- mTexSize = texSize;
|
|
|
- mFaceFormat = faceFormat;
|
|
|
- if (!mipLevels)
|
|
|
- mAutoGenMips = true;
|
|
|
+ mDynamic = true;
|
|
|
+ mTexSize = texSize;
|
|
|
+ mFaceFormat = faceFormat;
|
|
|
+ if (!mipLevels)
|
|
|
+ mAutoGenMips = true;
|
|
|
|
|
|
- mMipMapLevels = mipLevels;
|
|
|
+ mMipMapLevels = mipLevels;
|
|
|
|
|
|
bool compressed = ImageUtil::isCompressedFormat(mFaceFormat);
|
|
|
|
|
@@ -233,36 +231,30 @@ void GFXD3D11Cubemap::initDynamic(U32 texSize, GFXFormat faceFormat, U32 mipLeve
|
|
|
miscFlags |= D3D11_RESOURCE_MISC_GENERATE_MIPS;
|
|
|
}
|
|
|
|
|
|
- D3D11_TEXTURE2D_DESC desc;
|
|
|
+ D3D11_TEXTURE2D_DESC desc;
|
|
|
|
|
|
- desc.Width = mTexSize;
|
|
|
- desc.Height = mTexSize;
|
|
|
- desc.MipLevels = mMipMapLevels;
|
|
|
- desc.ArraySize = 6;
|
|
|
- desc.Format = GFXD3D11TextureFormat[mFaceFormat];
|
|
|
- desc.SampleDesc.Count = 1;
|
|
|
- desc.SampleDesc.Quality = 0;
|
|
|
- desc.Usage = D3D11_USAGE_DEFAULT;
|
|
|
+ desc.Width = mTexSize;
|
|
|
+ desc.Height = mTexSize;
|
|
|
+ desc.MipLevels = mMipMapLevels;
|
|
|
+ desc.ArraySize = 6;
|
|
|
+ desc.Format = GFXD3D11TextureFormat[mFaceFormat];
|
|
|
+ desc.SampleDesc.Count = 1;
|
|
|
+ desc.SampleDesc.Quality = 0;
|
|
|
+ desc.Usage = D3D11_USAGE_DEFAULT;
|
|
|
desc.BindFlags = bindFlags;
|
|
|
- desc.CPUAccessFlags = 0;
|
|
|
+ desc.CPUAccessFlags = 0;
|
|
|
desc.MiscFlags = miscFlags;
|
|
|
|
|
|
|
|
|
- HRESULT hr = D3D11DEVICE->CreateTexture2D(&desc, NULL, &mTexture);
|
|
|
-
|
|
|
- D3D11_SHADER_RESOURCE_VIEW_DESC SMViewDesc;
|
|
|
- SMViewDesc.Format = GFXD3D11TextureFormat[mFaceFormat];
|
|
|
- SMViewDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURECUBE;
|
|
|
- SMViewDesc.TextureCube.MipLevels = mAutoGenMips ? -1 : mMipMapLevels;
|
|
|
- SMViewDesc.TextureCube.MostDetailedMip = 0;
|
|
|
-
|
|
|
- hr = D3D11DEVICE->CreateShaderResourceView(mTexture, &SMViewDesc, &mSRView);
|
|
|
+ HRESULT hr = D3D11DEVICE->CreateTexture2D(&desc, NULL, &mTexture);
|
|
|
|
|
|
+ D3D11_SHADER_RESOURCE_VIEW_DESC SMViewDesc;
|
|
|
+ SMViewDesc.Format = GFXD3D11TextureFormat[mFaceFormat];
|
|
|
+ SMViewDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURECUBE;
|
|
|
+ SMViewDesc.TextureCube.MipLevels = -1;
|
|
|
+ SMViewDesc.TextureCube.MostDetailedMip = 0;
|
|
|
|
|
|
- if(FAILED(hr))
|
|
|
- {
|
|
|
- AssertFatal(false, "GFXD3D11Cubemap::initDynamic - CreateTexture2D call failure");
|
|
|
- }
|
|
|
+ hr = D3D11DEVICE->CreateShaderResourceView(mTexture, &SMViewDesc, &mSRView);
|
|
|
|
|
|
//Generate mips
|
|
|
if (mAutoGenMips && !compressed)
|
|
@@ -274,62 +266,37 @@ void GFXD3D11Cubemap::initDynamic(U32 texSize, GFXFormat faceFormat, U32 mipLeve
|
|
|
mMipMapLevels = viewDesc.TextureCube.MipLevels;
|
|
|
}
|
|
|
|
|
|
- D3D11_RENDER_TARGET_VIEW_DESC viewDesc;
|
|
|
- viewDesc.Format = desc.Format;
|
|
|
- viewDesc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2DARRAY;
|
|
|
- viewDesc.Texture2DArray.ArraySize = 1;
|
|
|
|
|
|
+ if (FAILED(hr))
|
|
|
+ {
|
|
|
+ AssertFatal(false, "GFXD3D11Cubemap::initDynamic - CreateTexture2D call failure");
|
|
|
+ }
|
|
|
+
|
|
|
+ D3D11_RENDER_TARGET_VIEW_DESC viewDesc;
|
|
|
+ viewDesc.Format = desc.Format;
|
|
|
+ viewDesc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2DARRAY;
|
|
|
+ viewDesc.Texture2DArray.ArraySize = 1;
|
|
|
+ viewDesc.Texture2DArray.MipSlice = 0;
|
|
|
for (U32 i = 0; i < CubeFaces; i++)
|
|
|
{
|
|
|
- viewDesc.Texture2DArray.FirstArraySlice = i;
|
|
|
- for (U32 j = 0; j < mMipMapLevels; j++)
|
|
|
- {
|
|
|
- viewDesc.Texture2DArray.MipSlice = j;
|
|
|
- hr = D3D11DEVICE->CreateRenderTargetView(mTexture, &viewDesc, &mRTView[i][j]);
|
|
|
+ viewDesc.Texture2DArray.FirstArraySlice = i;
|
|
|
+ hr = D3D11DEVICE->CreateRenderTargetView(mTexture, &viewDesc, &mRTView[i]);
|
|
|
|
|
|
- if (FAILED(hr))
|
|
|
- {
|
|
|
- AssertFatal(false, "GFXD3D11Cubemap::initDynamic - CreateRenderTargetView call failure");
|
|
|
- }
|
|
|
+ if (FAILED(hr))
|
|
|
+ {
|
|
|
+ AssertFatal(false, "GFXD3D11Cubemap::initDynamic - CreateRenderTargetView call failure");
|
|
|
}
|
|
|
}
|
|
|
+}
|
|
|
|
|
|
- D3D11_TEXTURE2D_DESC depthTexDesc;
|
|
|
- depthTexDesc.Width = mTexSize;
|
|
|
- depthTexDesc.Height = mTexSize;
|
|
|
- depthTexDesc.MipLevels = 1;
|
|
|
- depthTexDesc.ArraySize = 1;
|
|
|
- depthTexDesc.SampleDesc.Count = 1;
|
|
|
- depthTexDesc.SampleDesc.Quality = 0;
|
|
|
- depthTexDesc.Format = DXGI_FORMAT_D32_FLOAT;
|
|
|
- depthTexDesc.Usage = D3D11_USAGE_DEFAULT;
|
|
|
- depthTexDesc.BindFlags = D3D11_BIND_DEPTH_STENCIL;
|
|
|
- depthTexDesc.CPUAccessFlags = 0;
|
|
|
- depthTexDesc.MiscFlags = 0;
|
|
|
-
|
|
|
- ID3D11Texture2D* depthTex = 0;
|
|
|
- hr = D3D11DEVICE->CreateTexture2D(&depthTexDesc, 0, &depthTex);
|
|
|
-
|
|
|
- if(FAILED(hr))
|
|
|
- {
|
|
|
- AssertFatal(false, "GFXD3D11Cubemap::initDynamic - CreateTexture2D for depth stencil call failure");
|
|
|
- }
|
|
|
-
|
|
|
- // Create the depth stencil view for the entire cube
|
|
|
- D3D11_DEPTH_STENCIL_VIEW_DESC dsvDesc;
|
|
|
- dsvDesc.Format = depthTexDesc.Format; //The format must match the depth texture we created above
|
|
|
- dsvDesc.Flags = 0;
|
|
|
- dsvDesc.ViewDimension = D3D11_DSV_DIMENSION_TEXTURE2D;
|
|
|
- dsvDesc.Texture2D.MipSlice = 0;
|
|
|
- hr = D3D11DEVICE->CreateDepthStencilView(depthTex, &dsvDesc, &mDSView);
|
|
|
-
|
|
|
- if(FAILED(hr))
|
|
|
- {
|
|
|
- AssertFatal(false, "GFXD3D11Cubemap::initDynamic - CreateDepthStencilView call failure");
|
|
|
- }
|
|
|
-
|
|
|
- SAFE_RELEASE(depthTex);
|
|
|
-
|
|
|
+void GFXD3D11Cubemap::generateMipMaps()
|
|
|
+{
|
|
|
+ //Generate mips
|
|
|
+ D3D11DEVICECONTEXT->GenerateMips(mSRView);
|
|
|
+ //get mip level count
|
|
|
+ D3D11_SHADER_RESOURCE_VIEW_DESC viewDesc;
|
|
|
+ mSRView->GetDesc(&viewDesc);
|
|
|
+ mMipMapLevels = viewDesc.TextureCube.MipLevels;
|
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
@@ -359,11 +326,11 @@ ID3D11ShaderResourceView* GFXD3D11Cubemap::getSRView()
|
|
|
return mSRView;
|
|
|
}
|
|
|
|
|
|
-ID3D11RenderTargetView* GFXD3D11Cubemap::getRTView(U32 faceIdx, U32 mipIndex)
|
|
|
+ID3D11RenderTargetView* GFXD3D11Cubemap::getRTView(U32 faceIdx)
|
|
|
{
|
|
|
AssertFatal(faceIdx < CubeFaces, "GFXD3D11Cubemap::getRTView - face index out of bounds");
|
|
|
|
|
|
- return mRTView[faceIdx][mipIndex];
|
|
|
+ return mRTView[faceIdx];
|
|
|
}
|
|
|
|
|
|
ID3D11DepthStencilView* GFXD3D11Cubemap::getDSView()
|