Heutzutage muss ich viele Bilder auf einer Leinwand zeichnen. Die Leinwandgröße ist 800x600px, und ich habe viele Bilder von 256x256px (einige sind kleiner), um darauf zu zeichnen, diese kleinen Bilder werden ein komplettes Bild auf der Leinwand zusammensetzen. Ich habe zwei Möglichkeiten, dies zu implementieren.WebGL VS Canvas 2D Hardwarebeschleunigung
Erstens, wenn ich Leinwand 2D-Kontext verwenden, das ist context = canvas.getContext('2d')
, dann kann ich einfach context.drawimage()
Methode verwenden, um jedes Bild an der richtigen Stelle der Zeichenfläche zu setzen.
Eine andere Möglichkeit verwende ich WebGL, um diese Bilder auf der Leinwand zu zeichnen. Auf diesem Weg muss ich für jedes kleine Bild ein Rechteck zeichnen. Die Größe des Rechtecks ist dieselbe wie bei diesem kleinen Bild. Außerdem befindet sich das Rechteck an der richtigen Position der Zeichenfläche. Dann benutze ich das Bild als Textur, um es zu füllen.
Dann vergleiche ich die Leistung dieser beiden Methoden. Beide fps erreichen 60, und die Animation (Wenn ich mit der Maus klicke oder mich bewege, wird die Leinwand viele Male neu gezeichnet) sieht sehr glatt aus. Also vergleiche ich ihre CPU-Auslastung. Ich erwarte, dass wenn ich WebGL benutze, die CPU weniger verbrauchen wird, weil GPU viele Zeichnungsarbeiten sichert. Aber das Ergebnis ist, die CPU-Auslastung sieht fast gleich aus. Ich versuche, meinen WebGL-Code zu optimieren, und ich denke, es ist gut genug. Bei Google habe ich festgestellt, dass Browser wie Chrome, Firefox Hardwarebeschleunigung standardmäßig aktiviert. Also versuche ich die Hardwarebeschleunigung zu schließen. Dann wird die CPU-Auslastung der ersten Methode viel höher. Also, meine Frage ist, seit Canvas 2D GPU verwenden, um zu beschleunigen, ist es notwendig für mich, WebGL nur für 2D-Rendering zu verwenden? Was ist der Unterschied zwischen 2D-GPU-Beschleunigung und WebGL? Beide verwenden GPU. Vielleicht gibt es noch eine andere Methode, um die CPU-Auslastung der zweiten Methode zu senken? Jede Antwort wird zu schätzen wissen!
Vielen Dank für Ihre Antwort und wirklich Entschuldigung für die späte Annahme. Genau wie Sie gesagt haben, sowohl WebGL und Canvas 2D hat seinen eigenen Vorteil und Nachteil. Ich habe die WebGL endlich übernommen. – LiuGui
Nur eine Anmerkung: 2dContext hat auch die 'alpha' Option. – Kaiido
Ihr Punkt ist? – gman