Color3{
float r, g, b;
}
The values are in the [0,1] range.
Heres what Im trying:
ID3D11Texture2D * CreateTextureFromRayTracedScene( ID3D11Device *pDXDevice_p){
if( m_pScene == NULL ) return NULL;
D3D11_TEXTURE2D_DESC desc;
memset(&desc, 0, sizeof(D3D11_TEXTURE2D_DESC));
desc.Format = DXGI_FORMAT::DXGI_FORMAT_R32G32B32_FLOAT;
desc.BindFlags = D3D10_BIND_SHADER_RESOURCE;
desc.Usage = D3D11_USAGE_DYNAMIC;
desc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
desc.Width = (UINT)m_pScene->m_res[0];
desc.Height = (UINT)m_pScene->m_res[1];
desc.SampleDesc.Count = 1;
desc.MipLevels = 1;
desc.ArraySize = 1;
D3D11_SUBRESOURCE_DATA texData;
texData.SysMemSlicePitch = 0;
texData.SysMemPitch = desc.Width * 4 * 3;// 32 bits(4 bytes) per channel, 3 channels.
texData.pSysMem = m_pTracedSceneIMG;
ID3D11Texture2D *pTex2D;
HRESULT hr = pDXDevice_p->CreateTexture2D( &desc, &texData, &pTex2D );
if( hr != S_OK ){
switch(hr){
case D3DERR_INVALIDCALL:
m_logger<<"D3DERR_INVALIDCALL creating texture"<<SZ_NEWLINE;
break;
case E_INVALIDARG:
m_logger<<"E_INVALIDARG creating texture"<<SZ_NEWLINE;
break;
case S_FALSE:
m_logger<<"S_FALSE creating texture"<<SZ_NEWLINE;
break;
case E_FAIL:
m_logger<<"E_FAIL creating texture"<<SZ_NEWLINE;
break;
}
return NULL;
}
return pTex2D;
}
Than I call:
ID3D11Texture2D *pTex = myRayTracer.CreateTextureFromRayTracedScene(AppFrame.GetDXDeviceReference());
D3DX11SaveTextureToFile( AppFrame.GetDXDeviceConextReference(), pTex, D3DX11_IFF_DDS, TEXT("rayTIMG.dds"));
pTex->Release();
Im trying with dds because with png notting is created, with dds a file is created, but my nvidia dds visualizer show it as 0x0 size, so, something is wrong here, and I dont know what is.
m_pTracedSceneIMG is for sure not empty, its an Color3[400x400] array, desc.width and height are also 400..
Gotta be a logical problem that Im not seeing.