bool GSDevice10::CopyOffscreen(Texture& src, const GSVector4& sr, Texture& dst, int w, int h, int format) { dst = Texture(); if(format == 0) { format = DXGI_FORMAT_R8G8B8A8_UNORM; } if(format != DXGI_FORMAT_R8G8B8A8_UNORM && format != DXGI_FORMAT_R16_UINT) { ASSERT(0); return false; } Texture rt; if(CreateRenderTarget(rt, w, h, format)) { GSVector4 dr(0, 0, w, h); StretchRect(src, sr, rt, dr, m_convert.ps[format == DXGI_FORMAT_R16_UINT ? 1 : 0], NULL); if(CreateOffscreen(dst, w, h, format)) { m_dev->CopyResource(dst, rt); } } Recycle(rt); return !!dst; }
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) { int ret; hInst = hInstance; hWndMain = CreateWindow( "dinWClass", "Dining Philosopher", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 450, 450, NULL, NULL, hInstance, NULL ); if (!hWndMain) return FALSE; ShowWindow(hWndMain, nCmdShow); UpdateWindow(hWndMain); if (!CreateOffscreen()) PostQuitMessage(1); ret = MessageBox(hWndMain, "Do you want to use WaitForMultipleObjects()?\n\n" "If you select Yes, then the application will run all day.\n" "If you select No, then the application can deadlock.\n", "Wait Mode", MB_YESNO); if (ret == IDYES) bWaitMultiple = TRUE; else { bWaitMultiple = FALSE; ret = MessageBox(hWndMain, "Do you want fast philosophers?\n\n" "If you select Yes, then it will deadlock much faster.\n", "Wait Mode", MB_YESNO); if (ret == IDYES) bFastFood = TRUE; else bFastFood = FALSE; } // Start the threads Diner(); return TRUE; }
GSTexture* GSDevice11::CopyOffscreen(GSTexture* src, const GSVector4& sRect, int w, int h, int format, int ps_shader) { GSTexture* dst = NULL; if(format == 0) { format = DXGI_FORMAT_R8G8B8A8_UNORM; } if(format != DXGI_FORMAT_R8G8B8A8_UNORM && format != DXGI_FORMAT_R16_UINT) { ASSERT(0); return false; } if(GSTexture* rt = CreateRenderTarget(w, h, false, format)) { GSVector4 dRect(0, 0, w, h); if(GSTexture* src2 = src->IsMSAA() ? Resolve(src) : src) { StretchRect(src2, sRect, rt, dRect, m_convert.ps[format == DXGI_FORMAT_R16_UINT ? 1 : 0], NULL); if(src2 != src) Recycle(src2); } dst = CreateOffscreen(w, h, format); if(dst) { m_ctx->CopyResource(*(GSTexture11*)dst, *(GSTexture11*)rt); } Recycle(rt); } return dst; }