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]; }
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; }