ChromiumWebBrowser fla sh black после скрытия без отключения WebGL - PullRequest
0 голосов
/ 31 января 2020

Я пытаюсь скрыть мой ChromiumWebBrowser за изображениями, видео и т. Д. c ... Но каждый раз, когда он меняется с ChromiumWebBrowser на что-либо, кроме пустой панели или другого ChromiumWebBrowser, он мигает черным в течение нескольких кадров.

Пример моей проблемы

аппаратное обеспечение:

  • i7-8559U
  • intel IRI plus Graphics 655

CefSharp Версия 79.1.350 для программы Winform

Вот что я попробовал:

  • BringToFront другой PictureBox
  • SendToback ChromiumWebBrowser
  • Видимость панели
  • Панель doubleBuffed

Я также включаю Cef.EnableHighDPISupport (); но безуспешно.

Единственное, что до сих пор работало, - это ДОБАВЬТЕ SetOffScreenRenderingBestPerformanceArgs ();

Но, к сожалению, это отключает реализацию WebGL: / и я хотел бы сохранить ее для последующих целей ,

static class Program
{
    /// <summary>
    /// Point d'entrée principal de l'application.
    /// </summary>
    [STAThread]
    static void Main()
    {
        Cef.EnableHighDPISupport();
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form1());
    }
}

 public partial class Form1 : Form
{

    private static ChromiumWebBrowser chrome;
    private PictureBox ImageBox = new PictureBox();

    private Panel pPictureBox = new Panel();
    private Panel pChromium = new Panel();
    Timer timer = new Timer();
    public Form1()
    {

        InitializeComponent();

        this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Form1_FormClosing);

        ImageBox.Image = Properties.Resources._3080;
        ImageBox.SizeMode = PictureBoxSizeMode.StretchImage;
        pPictureBox.Controls.Add(ImageBox);
        ImageBox.Dock = DockStyle.Fill;

        pPictureBox.Dock = DockStyle.Fill;
        pPictureBox.Size = this.Size;
        this.Controls.Add(pPictureBox); 
        pPictureBox.BringToFront();

        InitializeChromium();

        timer.Interval = 7000;
        timer.Start();
        timer.Tick += Timer_Tick;
    }

    private void Timer_Tick(object sender, EventArgs e)
    {
        if (pChromium.Visible)
        {
            pChromium.Hide();   
        }
        else
        {
            pChromium.Show();
        }
    }

    private void InitializeChromium()
    {


        pChromium.Dock = DockStyle.Fill;
        pChromium.Size = this.Size;
        CefSettings settings = new CefSettings();

        //Work but disable WebGL
        //settings.SetOffScreenRenderingBestPerformanceArgs();

        //settings.DisableGpuAcceleration();
        Cef.Initialize(settings);

        chrome = new ChromiumWebBrowser("https://www.apple.com/ca/airpods-pro/");

        pChromium.Controls.Add(chrome);
        this.Controls.Add(pChromium);

        chrome.Dock = DockStyle.Fill;

        pChromium.BringToFront();
    }

    private void InitializeComponent()
    {
        this.SuspendLayout();
        // 
        // Form1
        // 
        this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
        this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
        this.BackColor = System.Drawing.Color.White;
        this.ClientSize = new System.Drawing.Size(1904, 1041);
        this.Name = "Form1";
        this.Text = "Form1";
        this.ResumeLayout(false);

    }

    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        Cef.Shutdown();
    }
}

У вас, ребята, есть какое-нибудь решение?

1 Ответ

0 голосов
/ 03 февраля 2020

Вот мой окончательный код для любого заинтересованного

Ссылки команды, рекомендованные @ amaitland

https://peter.sh/experiments/chromium-command-line-switches/#use -angle https://peter.sh/experiments/chromium-command-line-switches/#in - process-gpu

обе команды работают индивидуально

Cef.EnableHighDPISupport (); не требуется, но рекомендуется

static void Main()
    {
        Cef.EnableHighDPISupport();
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form1());
    }

public partial class Form1 : Form
{

    private static ChromiumWebBrowser chrome;
    private PictureBox ImageBox = new PictureBox();

    private Panel pPictureBox = new Panel();
    private Panel pChromium = new Panel();
    Timer timer = new Timer();
    public Form1()
    {

        InitializeComponent();

        this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Form1_FormClosing);

        //any image here
        ImageBox.Image = Properties.Resources._3080;
        ImageBox.SizeMode = PictureBoxSizeMode.StretchImage;
        pPictureBox.Controls.Add(ImageBox);
        ImageBox.Dock = DockStyle.Fill;

        pPictureBox.Dock = DockStyle.Fill;
        pPictureBox.Size = this.Size;
        this.Controls.Add(pPictureBox);
        pPictureBox.BringToFront();

        InitializeChromium();

        timer.Interval = 7000;
        timer.Start();
        timer.Tick += Timer_Tick;
    }

    private void Timer_Tick(object sender, EventArgs e)
    {
        if (pChromium.Visible)
        {
            pChromium.Hide();
        }
        else
        {
            pChromium.Show();
        }
    }

    private void InitializeChromium()
    {


        pChromium.Dock = DockStyle.Fill;
        pChromium.Size = this.Size;
        CefSettings settings = new CefSettings();


        //-------------------------------------------------------------------------

        settings.CefCommandLineArgs.Add("in-process-gpu");

        //got best FPS with this renderer on "my machine"
        settings.CefCommandLineArgs.Add("use-angle", "gl");

        //-------------------------------------------------------------------------

        //Work but disable WebGL
        //settings.SetOffScreenRenderingBestPerformanceArgs();
        //settings.DisableGpuAcceleration();
        Cef.Initialize(settings);

        chrome = new ChromiumWebBrowser("https://alteredqualia.com/three/examples/webgl_pasta.html");

        pChromium.Controls.Add(chrome);
        this.Controls.Add(pChromium);

        chrome.Dock = DockStyle.Fill;

        pChromium.BringToFront();
    }

    private void InitializeComponent()
    {
        this.SuspendLayout();
        // 
        // Form1
        // 
        this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
        this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
        this.BackColor = System.Drawing.Color.White;
        this.ClientSize = new System.Drawing.Size(1904, 1041);
        this.Name = "Form1";
        this.Text = "Form1";
        this.ResumeLayout(false);

    }

    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        Cef.Shutdown();
    }
}
...