CEF无窗口渲染 - disable-gpu标志

时间:2016-10-06 12:21:40

标签: c++ windows chromium-embedded

我使用的是cef版本2704.操作系统:Windows 10

在我的应用程序中,我创建了3个浏览器(使用CefBrowserHost :: CreateBrowser)。 其中一个使用"屏幕外渲染"。

进行渲染

我想得到的是禁用gpu和gpu-compositing(因此通过disable-gpu和disable-gpu-compositing开关)" offscreen rendering"渲染器。 其他两个渲染器应该使用gpu和compositing。

所以我的问题:是否可以为不同的渲染器/浏览器提供不同的渲染解决方案?

我知道,我可以在

中更改/添加传递的开关到渲染器
CefBrowserProcessHandler::OnBeforeChildProcessLaunch(
    CefRefPtr<CefCommandLine> command_line
)
{
    command_line->AppendSwitch("disable-gpu");
    command_line->AppendSwitch("disable-gpu-compositing");
}

然而,当我为任何窗口(不仅是&#34;无窗口渲染&#34;一个窗口)执行此操作时,窗口变为黑色(渲染中断)。 另一方面,如果我将此开关全局添加到此处的所有渲染器,渲染(在所有窗口中)都有效:

CefApp::OnBeforeCommandLineProcessing(
    const CefString& process_type, 
    CefRefPtr<CefCommandLine> command_line
)
{
    command_line->AppendSwitch("disable-gpu");
    command_line->AppendSwitch("disable-gpu-compositing");
}

但是,在这种情况下,所有浏览器都不使用gpu。如上所述,我希望正常启用它,并为一个浏览器禁用它(使用无窗口渲染)。

Cef设置我传递给CefInitialize:

settings.single_process = false;
settings.multi_threaded_message_loop = false;
settings.no_sandbox = true;
settings.windowless_rendering_enabled = true;

CefWindowInfo我用于屏幕外渲染:

windowInfo.SetAsChild(windowHandle, rect);
windowInfo.SetAsWindowless(windowHandle, true);

CefWindowInfo我用于标准渲染:

windowInfo.SetAsChild(GetSafeHwnd(), rect);

0 个答案:

没有答案