When I read a bmp file with a alpha channel(32 bit .bmp file) using D3DX11CreateShaderResourceViewFromFile, I am not getting the alpha values at all. It works fine if I use .dds file instead of bmp. Any suggestions??
Here is my image reading code-
HRESULT hr = D3DX11CreateShaderResourceViewFromFile(device,fileName, NULL, NULL, textureShaderResourceView, NULL);
if( FAILED( hr ) )
return false;
return true;
Thanks
D3DX11CreateShaderResourceViewFromFile and 32 bit .bmp files
I wonder how you create ".bmp" files with 4 channels. I suggest you stick with DDS or PNG, they work fine.
Edit: OK, I guess photoshop can do that. Maybe DirectX loaders can't.
Maybe try passing in a filled load info struct (3rd param)? Set the load info format to DXGI_FORMAT_R8G8B8A8_UNORM or a 16-bit RGBA (just for a test) a see if that helps.
Edit: OK, I guess photoshop can do that. Maybe DirectX loaders can't.
Maybe try passing in a filled load info struct (3rd param)? Set the load info format to DXGI_FORMAT_R8G8B8A8_UNORM or a 16-bit RGBA (just for a test) a see if that helps.
Thanks pcmaster for replying. Yea, I used photoshop to put alpha channel in the bmp file. I am gonna try passing in the 3rd param (D3DX11_IMAGE_LOAD_INFO) once I get home. Lets see what happens.
It seems like neither D3DX11CreateShaderResourceViewFromFile nor D3DX11CreateTextureFromFile can read 32bit .bmp file correctly. Other formats like PNG and DDS with alpha channel works perfectly. I tried two methods but both failed to load alpha channel of 32bit bitmap correctly.
/////////////////////////////////////////////
//First method
/////////////////////////////////////////////
ID3D11Texture2D * pTexture2D = NULL;
ID3D11ShaderResourceView *pSRView = NULL;
D3D11_SHADER_RESOURCE_VIEW_DESC srvDesc;
D3D11_TEXTURE2D_DESC desc;
// Load the texture and initialize an ID3D11Texture2D object.
D3DX11CreateTextureFromFile(pDevice,szFileName, NULL, NULL, (ID3D11Resource**)(&pTexture2D), NULL );
// Get a texture description to determine the texture
// format of the loaded texture.
pTexture2D->GetDesc( &desc );
// Fill in the D3D11_SHADER_RESOURCE_VIEW_DESC structure.
srvDesc.Format = desc.Format;
srvDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2D;
srvDesc.Texture2D.MostDetailedMip = 0;
srvDesc.Texture2D.MipLevels = desc.MipLevels;
// Create the shader resource view.
HRESULT hr = pDevice->CreateShaderResourceView( pTexture2D, &srvDesc, &srvData);
////////////////////////////////////////////////////
////////////////////////////////////////////////////
//second method
////////////////////////////////////////////////////
D3DX11_IMAGE_LOAD_INFO imageLoadInfo;
imageLoadInfo.Width = D3DX11_DEFAULT;
imageLoadInfo.Height = D3DX11_DEFAULT;
imageLoadInfo.Depth = D3DX11_DEFAULT;
imageLoadInfo.FirstMipLevel = D3DX11_DEFAULT;
imageLoadInfo.MipLevels = D3DX11_DEFAULT;
imageLoadInfo.Usage = (D3D11_USAGE) D3DX11_DEFAULT;
imageLoadInfo.BindFlags = D3DX11_DEFAULT;
imageLoadInfo.CpuAccessFlags = D3DX11_DEFAULT;
imageLoadInfo.MiscFlags = D3DX11_DEFAULT;
imageLoadInfo.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
imageLoadInfo.Filter = D3DX11_DEFAULT;
imageLoadInfo.MipFilter = D3DX11_DEFAULT;
imageLoadInfo.pSrcInfo = NULL;
//Load the resource
HRESULT hr = D3DX11CreateShaderResourceViewFromFile(pDevice,szFileName, &imageLoadInfo, NULL, &srvData, NULL);
////////////////////////////////////////////////////
/////////////////////////////////////////////
//First method
/////////////////////////////////////////////
ID3D11Texture2D * pTexture2D = NULL;
ID3D11ShaderResourceView *pSRView = NULL;
D3D11_SHADER_RESOURCE_VIEW_DESC srvDesc;
D3D11_TEXTURE2D_DESC desc;
// Load the texture and initialize an ID3D11Texture2D object.
D3DX11CreateTextureFromFile(pDevice,szFileName, NULL, NULL, (ID3D11Resource**)(&pTexture2D), NULL );
// Get a texture description to determine the texture
// format of the loaded texture.
pTexture2D->GetDesc( &desc );
// Fill in the D3D11_SHADER_RESOURCE_VIEW_DESC structure.
srvDesc.Format = desc.Format;
srvDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2D;
srvDesc.Texture2D.MostDetailedMip = 0;
srvDesc.Texture2D.MipLevels = desc.MipLevels;
// Create the shader resource view.
HRESULT hr = pDevice->CreateShaderResourceView( pTexture2D, &srvDesc, &srvData);
////////////////////////////////////////////////////
////////////////////////////////////////////////////
//second method
////////////////////////////////////////////////////
D3DX11_IMAGE_LOAD_INFO imageLoadInfo;
imageLoadInfo.Width = D3DX11_DEFAULT;
imageLoadInfo.Height = D3DX11_DEFAULT;
imageLoadInfo.Depth = D3DX11_DEFAULT;
imageLoadInfo.FirstMipLevel = D3DX11_DEFAULT;
imageLoadInfo.MipLevels = D3DX11_DEFAULT;
imageLoadInfo.Usage = (D3D11_USAGE) D3DX11_DEFAULT;
imageLoadInfo.BindFlags = D3DX11_DEFAULT;
imageLoadInfo.CpuAccessFlags = D3DX11_DEFAULT;
imageLoadInfo.MiscFlags = D3DX11_DEFAULT;
imageLoadInfo.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
imageLoadInfo.Filter = D3DX11_DEFAULT;
imageLoadInfo.MipFilter = D3DX11_DEFAULT;
imageLoadInfo.pSrcInfo = NULL;
//Load the resource
HRESULT hr = D3DX11CreateShaderResourceViewFromFile(pDevice,szFileName, &imageLoadInfo, NULL, &srvData, NULL);
////////////////////////////////////////////////////
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement