Ich habe eine WebGL-Anwendung, die ich entwickeln, und ich habe gegen einige ziemlich ernsthafte Leistungsbedenken mit Retina Display Macbook Pros. Ich teste gerade ein 15 Zoll MacBook mit Intel Iris Pro GPU, das mit voller Auflösung rendert, was mir eine Leinwandauflösung von 3810 x 2030 mit einem Vollbild-Chrome-Fenster gibt. Meine Anwendung rendert ungefähr 100k Vertices pro Frame.WebGL Leistungsprobleme mit Retina Macbook Pro
Wenn ich jetzt die Anwendung auf ein Gerätepixel-Verhältnis von 1 (keine Retina-Skalierung) eingestellt, ist die Leistung der Anwendung solide, fällt nie unter 60 fps, aber die Bildqualität ist inakzeptabel. Wenn ich auf das Pixelverhältnis der Retina von 2 umschalte, verbessert sich die Bildqualität dramatisch, aber meine Framerate fällt auf ungefähr 20-30 fps.
Nun, ich bin kein Fremder bei GPU-Programmierung, also die Gründe, warum dies passiert, sind für mich offensichtlich. Was ich frage mich ist, hat jemand da draußen irgendwelche Workarounds oder Möglichkeiten gefunden, WebGL Zeichnung für ultra-hochauflösende Displays mit schlechten GPUs wie das Retina Macbook Pro zu optimieren? Gibt es irgendwelche nicht offensichtlichen Tipps oder Tricks, die Menschen durch Versuch und Irrtum gefunden haben, um dieses Problem zu lösen oder zumindest etwas besser zu machen?
Jede Hilfe wäre willkommen. Vielen Dank.
Edit: Kleines Update mit einer interessanten Entdeckung. Ich habe meinen Browser-Fenster in ein externes Display an das Macbook angeschlossen, und wenn sie bei einer DPR von 1-Rendering ist die Leistung sogar noch höher auf dem externen Display, als es auf dem macbook ist, auch mit der exakt gleichen Auflösung und die Bild Qualität ist viel besser.
Also selbst wenn Sie einen verkleinerte Bildpuffer auf einem Macbook machen Pro, es skaliert sie noch auf, was wahrscheinlich ist, was die schlechte Bildqualität verursacht (es wird die Aufstockung mit bilinearer Filterung, es verschwommen, als es machen würde sei, wenn das Originalbild unverändert angezeigt würde).
Wenn Sie die Möglichkeit haben, DPI zu wählen, haben Sie versucht, es auf "1" zu halten, sondern stattdessen doppelt so große Texturen zu verwenden und sie zu skalieren? – Eric
Das Problem ist, dass, wenn der endgültige Framebuffer nicht auf die maximale Auflösung des Retina-Displays eingestellt ist, er immer noch wie Mist aussieht.Das Retina-Display ist sehr interessant: Wenn Sie mit der beabsichtigten Auflösung rendern, sieht es fantastisch aus, aber wenn Sie etwas niedriger rendern, sieht es einfach wie kompletter Müll aus. – aeskreis
Es könnte sein, dass Sie in (künstliche) Treiberauflösungsgrenzen geraten. Eine verrückte Sache wäre es, 4 Webgl-Kontexte in einer 2x2-Tabelle auszuführen und jeder davon mit einer angepassten Kamera zu rendern. Dies wird Ihnen 4x Api Overhead geben, aber vielleicht einige dumme Grenzen überspringen? – starmole