Jump to content

  • Log In with Google      Sign In   
  • Create Account

We need your feedback on a survey! Each completed response supports our community and gives you a chance to win a $25 Amazon gift card!


Problem with ID3D11Create Texture2D mipmap


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
6 replies to this topic

#1 1096   Members   -  Reputation: 104

Like
0Likes
Like

Posted 25 October 2012 - 02:08 AM

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[i] = Data; } ThrowIfFailed( m_d3dDevice->CreateTexture2D( &textureDesc, &Data, &hTextrue) );[/source]

Sponsor:

#2 Jason Z   Crossbones+   -  Reputation: 5454

Like
0Likes
Like

Posted 25 October 2012 - 04:53 AM

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

#3 1096   Members   -  Reputation: 104

Like
0Likes
Like

Posted 25 October 2012 - 06:45 AM

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?

#4 1096   Members   -  Reputation: 104

Like
0Likes
Like

Posted 25 October 2012 - 09:19 PM

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]

#5 Jason Z   Crossbones+   -  Reputation: 5454

Like
0Likes
Like

Posted 26 October 2012 - 04:02 PM

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).

#6 1096   Members   -  Reputation: 104

Like
0Likes
Like

Posted 28 October 2012 - 01:30 AM

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!

#7 Jason Z   Crossbones+   -  Reputation: 5454

Like
0Likes
Like

Posted 30 October 2012 - 08:05 PM

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.




Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS