• Advertisement
Sign in to follow this  

Problem with ID3D11Create Texture2D mipmap

This topic is 1911 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

I want to Create a Texture2D with mipmap?but it looks like failure?
my texture data is 24bit?R8G8A8??any sugguestion? thanks ?
[source lang="cpp"]
VInt iLevel = V_log((float)iSrcWidth)/V_log((float)2)+1;//iLevel = 7

//????????
D3D11_TEXTURE2D_DESC textureDesc = {0};
textureDesc.Width = 64;
textureDesc.Height = 64;
textureDesc.SampleDesc.Count = 1;
textureDesc.SampleDesc.Quality = 0;
textureDesc.Usage = D3D11_USAGE_DEFAULT;
textureDesc.CPUAccessFlags = 0;
textureDesc.BindFlags = D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_RENDER_TARGET;

textureDesc.MiscFlags = 0;
textureDesc.MipLevels = iLevel-1;
textureDesc.ArraySize = 1;

switch (uiBits)
{
//????32???
case 32:
case 24:
textureDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
break;
default:
break;
}

//????mipmap????
VInt iSrcWidthBits = iSrcWidth*4;
VInt iYoffset = 0;
VChar* pBuffer = (VChar*)CVMem::Allocate( iSrcWidthBits*iSrcHeight, __FILE__, __LINE__ );

if( pBuffer == V_NULL )
{
hTextrue.ReleaseAndGetAddressOf();
return 0;
}

D3D11_SUBRESOURCE_DATA* InitDataArray = new D3D11_SUBRESOURCE_DATA[iLevel-1];
D3D11_SUBRESOURCE_DATA Data;
//
// 32 16 8 4 2 1
for( VInt i = 0; i < iLevel/*-2*/; i++ ) // 0 32 48 56 60 62
{
VInt iWidthTextrue = iSrcWidth>>i;
VInt iHeightTextrue = iSrcHeight>>(i+1);
VInt iWidthBits = iWidthTextrue*4;

VChar* pBufferTmp = pBuffer;
VChar* pSrcBuffer = pData + iYoffset*iSrcWidthBits;
iYoffset = iYoffset + iHeightTextrue;
for( VInt y = 0; y < iHeightTextrue; y++ )
{
V_memcpy( pBufferTmp, pSrcBuffer, iWidthBits );
pBufferTmp += iWidthBits;
pSrcBuffer += iSrcWidthBits;
}

Data.pSysMem = pBuffer;
Data.SysMemPitch = iWidthBits ;////
Data.SysMemSlicePitch = 0;
InitDataArray = Data;
}



ThrowIfFailed(
m_d3dDevice->CreateTexture2D(
&textureDesc,
&Data,
&hTextrue)
);
[/source]

Share this post


Link to post
Share on other sites
Advertisement
Are you running with the debug device active? If so, what is the error message that you get on the debug output window?

Share this post


Link to post
Share on other sites

Are you running with the debug device active? If so, what is the error message that you get on the debug output window?

sorry?i dont know how to active on windows metro app?directx 11.1 / VS 2012?,could you tell me how?

Share this post


Link to post
Share on other sites
yeah?i got the message
what i want to know is
1.is this the correct way to create mipmap texture2d manually?
2.when i call drawindexed ?the ouptput window show one message ->
D3D11 WARNING: ID3D11DeviceContext::DrawIndexed: The Pixel Shader unit expects a Sampler to be set at Slot 0, but none is bound. This is perfectly valid, as a NULL Sampler maps to default Sampler state. However, the developer may not want to rely on the defaults. [ EXECUTION WARNING #352: DEVICE_DRAW_SAMPLER_NOT_SET]

Share this post


Link to post
Share on other sites
You create the device with the D3D11_CREATE_DEVICE_DEBUG flag, and then you can get a COM interface to the debug device. That should work in Metro style usage the same as it does in the native world. You can also check the HRESULT value that comes from the ID3D11Device::CreateTexture2D call, and that will tell you if you are successfully creating the texture object or not.

If it is being created properly, then you should be able to inspect the contents of the texture through Visual Studio (with the capabilities that used to be in PIX).

Share this post


Link to post
Share on other sites

You create the device with the D3D11_CREATE_DEVICE_DEBUG flag, and then you can get a COM interface to the debug device. That should work in Metro style usage the same as it does in the native world. You can also check the HRESULT value that comes from the ID3D11Device::CreateTexture2D call, and that will tell you if you are successfully creating the texture object or not.

If it is being created properly, then you should be able to inspect the contents of the texture through Visual Studio (with the capabilities that used to be in PIX).


thanks ,Jason
i checked HRESULT from ID3D11Device::CreateTexture2D ?CreateShaderResourceView
It returns S_OK
could you tell me how to "inspect the contents of the texture through Visual Studio" ? i'm really a new beginner
thanks again!

Share this post


Link to post
Share on other sites
Unfortunately I haven't had the opportunity to try this out in the Visual Studio graphics tools - I'm still using VS2010 at the moment, so I typically use PIX instead. You will have to search for some info on the tool, or perhaps someone else around here can provide some links about where to start looking...

Sorry I couldn't help more.

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement