Весь снимок экрана и рендеринг в DirectX [PERFORMANCE]

Мне нужен какой-то способ получить данные экрана и передать их в поверхность / текстуру DX9 в моем приложении и, по крайней мере, отобразить их25fps в1600 * 900 разрешение 30 будет лучше.

Я попробовал BitBliting, но даже после этого я на 20fps и после загрузки данных в текстуру и рендеринга я нахожусь на 11fps, что значительно отстает от того, что мне нужно.

GetFrontBufferData исключен.

Вот это что-то оиспользуя Windows Media API, но я не знаком с этим. Пример - сохранение данных прямо в файл, возможно, его можно настроить для предоставления отдельных кадров, но я не имеюЯ нашел достаточно хорошую документацию, чтобы попробовать ее самостоятельно.

Мой код:

m_memDC.BitBlt(0, 0, m_Rect.Width(),m_Rect.Height(), //m_Rect is area to be captured
               &m_dc, m_Rect.left, m_Rect.top, SRCCOPY); 
      //at 20-25fps after this if I comment out the rest

//DC,HBITMAP setup and memory alloc is done once at the begining
GetDIBits( m_hDc, (HBITMAP)m_hBmp.GetSafeHandle(),
    0L,             // Start scan line
    (DWORD)m_Rect.Height(),     // # of scan lines
    m_lpData,                   // LPBYTE
    (LPBITMAPINFO)m_bi,     // address of bitmapinfo
    (DWORD)DIB_RGB_COLORS);     // Use RGB for color table
     //at 17-20fps

IDirect3DSurface9 *tmp;
m_pImageBuffer[0]->GetSurfaceLevel(0,&tmp); //m_pImageBuffer is Texture of same 
                                            //size as bitmap to prevent stretching
hr= D3DXLoadSurfaceFromMemory(tmp,NULL,NULL,
                             (LPVOID)m_lpData,
                             D3DFMT_X8R8G8B8,
                             m_Rect.Width()*4,
                             NULL,
                             &r,                 //SetRect(&r,0,0,m_Rect.Width(),m_Rect.Height();
                             D3DX_DEFAULT,0);
 //12-14fps
IDirect3DSurface9 *frameS;
hr=m_pFrameTexture->GetSurfaceLevel(0,&frameS); // Texture of that is rendered
pd3dDevice->StretchRect(tmp,NULL,frameS,NULL,D3DTEXF_NONE);
//11fps

Я обнаружил, что для 512 * 512 квадратов он работает на 30 кадрах в секунду (для 490 * 450 при 20-25), поэтому я попытался разделить экран, но это не таккажется, хорошо работает.

Если в коде чего-то не хватает, напишите, пожалуйстане голосую. Спасибо

Ответы на вопрос(2)

Ваш ответ на вопрос