mirror of
https://github.com/opencv/opencv.git
synced 2026-07-30 07:43:03 +04:00
compute fps changed (now only interop counts). fixed d3d10 and d3d11 print info method (there were issues with texture mapping)
This commit is contained in:
@@ -98,17 +98,19 @@ public:
|
||||
|
||||
m_pD3D11Ctx->RSSetViewports(1, &viewport);
|
||||
|
||||
D3D11_TEXTURE2D_DESC desc = { 0 };
|
||||
D3D11_TEXTURE2D_DESC desc;
|
||||
|
||||
desc.Width = m_width;
|
||||
desc.Height = m_height;
|
||||
desc.MipLevels = 1;
|
||||
desc.ArraySize = 1;
|
||||
desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
|
||||
desc.SampleDesc.Count = 1;
|
||||
desc.BindFlags = D3D11_BIND_SHADER_RESOURCE;
|
||||
desc.Usage = D3D11_USAGE_DYNAMIC;
|
||||
desc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
|
||||
desc.Width = m_width;
|
||||
desc.Height = m_height;
|
||||
desc.MipLevels = 1;
|
||||
desc.ArraySize = 1;
|
||||
desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
|
||||
desc.SampleDesc.Count = 1;
|
||||
desc.SampleDesc.Quality = 0;
|
||||
desc.BindFlags = D3D11_BIND_SHADER_RESOURCE;
|
||||
desc.Usage = D3D11_USAGE_DYNAMIC;
|
||||
desc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
|
||||
desc.MiscFlags = 0;
|
||||
|
||||
r = m_pD3D11Dev->CreateTexture2D(&desc, NULL, &m_pSurface);
|
||||
if (FAILED(r))
|
||||
@@ -170,7 +172,7 @@ public:
|
||||
return 0;
|
||||
|
||||
HRESULT r;
|
||||
ID3D11Texture2D* pSurface;
|
||||
ID3D11Texture2D* pSurface = 0;
|
||||
|
||||
r = get_surface(&pSurface);
|
||||
if (FAILED(r))
|
||||
@@ -178,6 +180,8 @@ public:
|
||||
throw std::runtime_error("get_surface() failed!");
|
||||
}
|
||||
|
||||
m_timer.start();
|
||||
|
||||
switch (m_mode)
|
||||
{
|
||||
case MODE_CPU:
|
||||
@@ -186,7 +190,7 @@ public:
|
||||
UINT subResource = ::D3D11CalcSubresource(0, 0, 1);
|
||||
|
||||
D3D11_MAPPED_SUBRESOURCE mappedTex;
|
||||
r = m_pD3D11Ctx->Map(m_pSurface, subResource, D3D11_MAP_WRITE_DISCARD, 0, &mappedTex);
|
||||
r = m_pD3D11Ctx->Map(pSurface, subResource, D3D11_MAP_WRITE_DISCARD, 0, &mappedTex);
|
||||
if (FAILED(r))
|
||||
{
|
||||
throw std::runtime_error("surface mapping failed!");
|
||||
@@ -200,7 +204,17 @@ public:
|
||||
cv::blur(m, m, cv::Size(15, 15), cv::Point(-7, -7));
|
||||
}
|
||||
|
||||
m_pD3D11Ctx->Unmap(m_pSurface, subResource);
|
||||
cv::String strMode = cv::format("%s", m_modeStr[MODE_CPU].c_str());
|
||||
cv::String strProcessing = m_demo_processing ? "blur frame" : "copy frame";
|
||||
cv::String strFPS = cv::format("%2.1f", m_timer.fps());
|
||||
cv::String strDevName = cv::format("%s", m_oclDevName.c_str());
|
||||
|
||||
cv::putText(m, strMode, cv::Point(0, 16), 1, 0.8, cv::Scalar(0, 0, 0));
|
||||
cv::putText(m, strProcessing, cv::Point(0, 32), 1, 0.8, cv::Scalar(0, 0, 0));
|
||||
cv::putText(m, strFPS, cv::Point(0, 48), 1, 0.8, cv::Scalar(0, 0, 0));
|
||||
cv::putText(m, strDevName, cv::Point(0, 64), 1, 0.8, cv::Scalar(0, 0, 0));
|
||||
|
||||
m_pD3D11Ctx->Unmap(pSurface, subResource);
|
||||
|
||||
break;
|
||||
}
|
||||
@@ -218,6 +232,16 @@ public:
|
||||
cv::blur(u, u, cv::Size(15, 15), cv::Point(-7, -7));
|
||||
}
|
||||
|
||||
cv::String strMode = cv::format("%s", m_modeStr[MODE_GPU].c_str());
|
||||
cv::String strProcessing = m_demo_processing ? "blur frame" : "copy frame";
|
||||
cv::String strFPS = cv::format("%2.1f", m_timer.fps());
|
||||
cv::String strDevName = cv::format("%s", m_oclDevName.c_str());
|
||||
|
||||
cv::putText(u, strMode, cv::Point(0, 16), 1, 0.8, cv::Scalar(0, 0, 0));
|
||||
cv::putText(u, strProcessing, cv::Point(0, 32), 1, 0.8, cv::Scalar(0, 0, 0));
|
||||
cv::putText(u, strFPS, cv::Point(0, 48), 1, 0.8, cv::Scalar(0, 0, 0));
|
||||
cv::putText(u, strDevName, cv::Point(0, 64), 1, 0.8, cv::Scalar(0, 0, 0));
|
||||
|
||||
cv::directx::convertToD3D11Texture2D(u, pSurface);
|
||||
|
||||
break;
|
||||
@@ -225,7 +249,7 @@ public:
|
||||
|
||||
} // switch
|
||||
|
||||
print_info(pSurface, m_mode, getFps(), m_oclDevName);
|
||||
m_timer.stop();
|
||||
|
||||
// traditional DX render pipeline:
|
||||
// BitBlt surface to backBuffer and flip backBuffer to frontBuffer
|
||||
@@ -256,37 +280,6 @@ public:
|
||||
} // render()
|
||||
|
||||
|
||||
void print_info(ID3D11Texture2D* pSurface, int mode, float fps, cv::String oclDevName)
|
||||
{
|
||||
HRESULT r;
|
||||
|
||||
UINT subResource = ::D3D11CalcSubresource(0, 0, 1);
|
||||
|
||||
D3D11_MAPPED_SUBRESOURCE mappedTex;
|
||||
r = m_pD3D11Ctx->Map(pSurface, subResource, D3D11_MAP_WRITE_DISCARD, 0, &mappedTex);
|
||||
if (FAILED(r))
|
||||
{
|
||||
throw std::runtime_error("surface mapping failed!");
|
||||
}
|
||||
|
||||
cv::Mat m(m_height, m_width, CV_8UC4, mappedTex.pData, (int)mappedTex.RowPitch);
|
||||
|
||||
cv::String strMode = cv::format("%s", m_modeStr[mode].c_str());
|
||||
cv::String strProcessing = m_demo_processing ? "blur frame" : "copy frame";
|
||||
cv::String strFPS = cv::format("%2.1f", fps);
|
||||
cv::String strDevName = cv::format("%s", oclDevName.c_str());
|
||||
|
||||
cv::putText(m, strMode, cv::Point(0, 16), 1, 0.8, cv::Scalar(0, 0, 0));
|
||||
cv::putText(m, strProcessing, cv::Point(0, 32), 1, 0.8, cv::Scalar(0, 0, 0));
|
||||
cv::putText(m, strFPS, cv::Point(0, 48), 1, 0.8, cv::Scalar(0, 0, 0));
|
||||
cv::putText(m, strDevName, cv::Point(0, 64), 1, 0.8, cv::Scalar(0, 0, 0));
|
||||
|
||||
m_pD3D11Ctx->Unmap(pSurface, subResource);
|
||||
|
||||
return;
|
||||
} // printf_info()
|
||||
|
||||
|
||||
int cleanup(void)
|
||||
{
|
||||
SAFE_RELEASE(m_pSurface);
|
||||
|
||||
Reference in New Issue
Block a user