示例#1
0
ID3D11ShaderResourceView* CD3DTexture::GetShaderResource(DXGI_FORMAT format /* = DXGI_FORMAT_UNKNOWN */)
{
  if (!m_texture)
    return nullptr;

  if (format == DXGI_FORMAT_UNKNOWN)
    format = m_format;

  if (!g_Windowing.IsFormatSupport(format, D3D11_FORMAT_SUPPORT_SHADER_SAMPLE)
    && !g_Windowing.IsFormatSupport(format, D3D11_FORMAT_SUPPORT_SHADER_LOAD))
    return nullptr;

  if (!m_views[format])
  {
    ID3D11ShaderResourceView* pView = nullptr;
    CD3D11_SHADER_RESOURCE_VIEW_DESC cSRVDesc(D3D11_SRV_DIMENSION_TEXTURE2D, format);
    HRESULT hr = g_Windowing.Get3D11Device()->CreateShaderResourceView(m_texture, &cSRVDesc, &pView);
    if (FAILED(hr))
    {
      CLog::Log(LOGWARNING, __FUNCTION__ " - cannot create texture view.");
      SAFE_RELEASE(pView);
    }
    else
    {
      m_views.insert_or_assign(format, pView);
    }
  }

  return m_views[format];
}
示例#2
0
ID3D11ShaderResourceView* CD3DTexture::GetShaderResource()
{
  if (!m_texture)
    return nullptr;

  if (!m_textureView) 
  {
    CD3D11_SHADER_RESOURCE_VIEW_DESC cSRVDesc(D3D11_SRV_DIMENSION_TEXTURE2D);
    HRESULT hr = g_Windowing.Get3D11Device()->CreateShaderResourceView(m_texture, &cSRVDesc, &m_textureView);

    if (FAILED(hr))
    {
      CLog::Log(LOGWARNING, __FUNCTION__ " - cannot create texture view.");
      SAFE_RELEASE(m_textureView);
    }
  }

  return m_textureView;
}