本文整理汇总了C++中Texture::GetSubresource方法的典型用法代码示例。如果您正苦于以下问题:C++ Texture::GetSubresource方法的具体用法?C++ Texture::GetSubresource怎么用?C++ Texture::GetSubresource使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Texture
的用法示例。
在下文中一共展示了Texture::GetSubresource方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: if
//----------------------------------------------------------------------------
bool DX11Texture::CopyCpuToGpu(ID3D11DeviceContext* context,
unsigned int sri)
{
Texture* texture = GetTexture();
if (sri >= texture->GetNumSubresources())
{
LogWarning("Subresource index out of range.");
return false;
}
if (!PreparedForCopy(D3D11_CPU_ACCESS_WRITE))
{
return false;
}
// Map the staging texture.
D3D11_MAPPED_SUBRESOURCE sub;
HRESULT hr = context->Map(mStaging, sri, D3D11_MAP_WRITE, 0, &sub);
CHECK_HR_RETURN("Failed to map staging texture", false);
// Copy from CPU memory to staging texture.
auto sr = texture->GetSubresource(sri);
unsigned int numDimensions = texture->GetNumDimensions();
if (numDimensions == 1)
{
memcpy(sub.pData, sr.data, texture->GetNumBytesFor(sr.level));
}
else if (numDimensions == 2)
{
CopyPitched2(texture->GetDimensionFor(sr.level, 1), sr.rowPitch,
sr.data, sub.RowPitch, sub.pData);
}
else // numDimensions == 3
{
CopyPitched3(texture->GetDimensionFor(sr.level, 1),
texture->GetDimensionFor(sr.level, 2), sr.rowPitch,
sr.slicePitch, sr.data, sub.RowPitch, sub.DepthPitch,
sub.pData);
}
context->Unmap(mStaging, sri);
// Copy from staging texture to GPU memory.
ID3D11Resource* dxTexture = GetDXResource();
context->CopySubresourceRegion(dxTexture, sri, 0, 0, 0, mStaging, sri,
nullptr);
return true;
}
示例2: if
//----------------------------------------------------------------------------
bool DX11Texture::Update(ID3D11DeviceContext* context, unsigned int sri)
{
Texture* texture = GetTexture();
if (sri >= texture->GetNumSubresources())
{
LogWarning("Subresource index out of range.");
return false;
}
if (texture->GetUsage() != Resource::DYNAMIC_UPDATE)
{
LogWarning("Texture usage is not DYNAMIC_UPDATE.");
return false;
}
// Map the texture.
ID3D11Resource* dxTexture = GetDXResource();
D3D11_MAPPED_SUBRESOURCE sub;
HRESULT hr = context->Map(dxTexture, sri, D3D11_MAP_WRITE_DISCARD, 0,
&sub);
CHECK_HR_RETURN("Failed to map staging texture", false);
// Copy from CPU memory.
auto sr = texture->GetSubresource(sri);
unsigned int numDimensions = texture->GetNumDimensions();
if (numDimensions == 1)
{
Memcpy(sub.pData, sr.data, texture->GetNumBytesFor(sr.level));
}
else if (numDimensions == 2)
{
CopyPitched2(texture->GetDimensionFor(sr.level, 1), sr.rowPitch,
sr.data, sub.RowPitch, sub.pData);
}
else // numDimensions == 3
{
CopyPitched3(texture->GetDimensionFor(sr.level, 1),
texture->GetDimensionFor(sr.level, 2), sr.rowPitch, sr.slicePitch,
sr.data, sub.RowPitch, sub.DepthPitch, sub.pData);
}
context->Unmap(dxTexture, sri);
return true;
}