Tokyo, Android, TViewPort3D => Black Screen
Hallo ins Forum
wenn ich unter Delphi Tokyo Neu > Geräteübergreifende Anwendung > Leere Anwendung wähle, TViewPort3D aufs Form knalle und das Ganze auf meinem Nexus laufen lasse, dann wird zwar (erwartet) der übliche Splash Screen angezeigt, aber dann (Fehler) wird der Bildschirm schwarz. Unter Berlin und Seattle läuft es wie erwartet. Wenn ich das Mini-Projekt, welches unter Seattle oder Berlin läuft unter Tokyo lade, dann bleibt der Bildschirm schwarz. [Grund für den Test: Ich dachte, es könnte unter Tokyo evt. an fehlenden Berechtigungen (Projekt > Optionen > Verwendete Berechtigungen) liegen, tut es aber offenbar nicht.] Andere Anwendungen (ohne TViewPort3D) unter Tokyo laufen. Verwendet jemand TViewPort3D unter Tokyo? Und wenn ja, läuft's? Danke. Sonniger Gruss aus Wabern Michael |
AW: Tokyo, Android, TViewPort3D => Black Screen
Oh weh, das scheint ja ein ganz gruseliger Bug zu sein.
Habe es gerade mal mit ein paar Demoprogrammen von mir getestet. Echte 3D-Programme funktionieren ohne Probleme. Aber 2D-Programme mit Verwendung eines TViewPort3D zeigen einen schwarzen Bildschirm auf dem mobilen Gerät an (getestet mit einem Sony-Xperia Z-Ultra, Android 5, SDK 24.3.3). Übel... |
AW: Tokyo, Android, TViewPort3D => Black Screen
Besten Dank fürs Testen. Ja leider übel...
[ Ich nerv mich, dass ich zwar Betatester war, aber (wie fast immer im Winter) 0 Zeit hatte um zu testen. ] Ich hoffe, das wird bald gefixt. |
AW: Tokyo, Android, TViewPort3D => Black Screen
Dieses Problem wurde offenbar (mit zusätzlicher TSphere - wozu:?) bereits gemeldet:
https://quality.embarcadero.com/browse/RSP-17780 |
AW: Tokyo, Android, TViewPort3D => Black Screen
Liste der Anhänge anzeigen (Anzahl: 1)
Hat jemand zufällig eine Idee woran das Problem lag bzw. liegt? Ich habe das Problem unter iOS, dass mein Viewport nicht angezeigt wird. Was unter Berlin noch problemlos ging, schaut jetzt wie im Anhang aus. Irgendwie wird nur ein kleiner Teil angezeigt und auch nicht an der korrekten Position. Unter Berlin lief es noch einwandfrei.
Jetzt habe ich versucht das ganze umzustellen auf ein reines TForm3D und bin über ein weiteres Problem gestolpert. Mittels folgendem Code erstelle ich ein Screenshot:
Delphi-Quellcode:
Das geht unter DX11 und DX9, aber bei GLES (also auf den anderen Systemen) sieht man nur einen kleinen Ausschnitt. CopyToBitmap ruft procedure TCustomContextOpenGL.DoCopyToBits(const Bits: Pointer; const Pitch: Integer; const ARect: TRect); auf, aber der Code scheint mir nicht fehlerhaft, sondern entspricht im Endeffekt dem was ich schon seit Jahren mit OpenGL veranstalte.
procedure GenerateFormImageExt(AForm: TCommonCustomForm; ABmp: TBitmap);
var AScale: single; begin TThread.Synchronize(TThread.CurrentThread, procedure() begin AScale := GetScreenScale(False); ABmp.Clear(claNull); ABmp.BitmapScale := AScale; ABmp.Width := Round(AForm.Width * AScale); ABmp.Height := Round(AForm.Height * AScale); if AForm is TForm then begin ABmp.Canvas.BeginScene; TForm(AForm).PaintTo(ABmp.Canvas); ABmp.Canvas.EndScene; end else if AForm is TForm3D then TForm3D(AForm).Context.CopyToBitmap(ABmp, ABmp.Bounds); end); end; Irgendwie ist das alles ziemlich unbefriedigend :( Christian |
AW: Tokyo, Android, TViewPort3D => Black Screen
Nach dem letzten Hotfix, eigentlich "nur" für Android gedacht, sollte das Viewport3D auch auf allen anderen Plattformen wieder funktionieren (ich habs nur unter Windows getestet, da geht es wieder):
http://cc.embarcadero.com/item/30781 Ansonsten, nur mal so als Idee: Hast Du als Alternative schon mal versucht, ein TLayout als ersten Cotainer für Deine darin liegenden Controls zu verwenden und da mit "Layout.Makescreenshot" zu arbeiten? |
AW: Tokyo, Android, TViewPort3D => Black Screen
Danke für deine Antwort.
Den Hotfix habe ich auch installiert, aber der ist wohl ausschließlich für Android gedacht. Unter Windows geht die Anwendung sowohl mit Berlin, als auch unter Tokyo. Ich musste lediglich Strokethickness durch Stroke.Thickness ersetzen an ein paar Stellen. Mir hat die Performance von TViewPort3D nie wirklich gefallen, aber ich habe es halt gebraucht, da ich für die Anzeige ein YUV Shader Materialshader nutzen muss. Dafür habe ich allerdings auch die FMX.Context.GLES jedes mal anpassen müssen. Bei der Upatefrequenz von Delphi ist das echt nervig. Ich denke ich werde sowohl bei Android, als auch iOS eine andere Lösung für Screenshots finden müssen und komplett auf TForm3D umstellen. Christian |
AW: Tokyo, Android, TViewPort3D => Black Screen
Ich würds auch erstmal so probieren wie Harry vorschlägt.
https://stackoverflow.com/questions/...orm-on-windows Emba hat ja an Threads und Bitmaps rumgeschraubt, bei mir hat es Konsequenzen bei den Scalings vom Bitmaps. Ob MakeScreenshot jetzt sauber funktioniert kann ich nicht sagen, ich habe nicht gecheckt was die das Alles geändert haben, aber einen Versuch wäre das Wert. Rollo |
AW: Tokyo, Android, TViewPort3D => Black Screen
Naja makescreenshot nutzt das selbe wie ich:
Delphi-Quellcode:
Das geht aber nur bei HD Formularen und nicht bei allem was TForm3D beinhaltet.
function TControl.MakeScreenshot: TBitmap;
var SceneScale: Single; begin if Scene <> nil then SceneScale := Scene.GetSceneScale else SceneScale := 1; Result := TBitmap.Create(Round(Width * SceneScale), Round(Height * SceneScale)); Result.BitmapScale := SceneScale; Result.Clear(0); if Result.Canvas.BeginScene then try PaintTo(Result.Canvas, TRectF.Create(0, 0, Result.Width / SceneScale, Result.Height / SceneScale)); finally Result.Canvas.EndScene; end; end; Christian |
AW: Tokyo, Android, TViewPort3D => Black Screen
Liste der Anhänge anzeigen (Anzahl: 1)
Ich glaube ich kann das Problem mit dem ViewPort unter iOS reproduzieren. Sobald ein Tabcontrol verwendet wird, geht etwas schief. Anbei mal ein einfaches Beispiel.
Die Anzeige stimmt unter Windows und MacOS, aber unter iOS geht es nicht richtig (da wird nur ein kleiner Teil des ViewPorts angezeigt). Android habe ich noch nicht getestet. Christian |
AW: Tokyo, Android, TViewPort3D => Black Screen
Versuche doch mal mit deiner Orginalfunktion (die ja MakeScreensot entspricht)
die Scalings und Rect Width/Height von Hand anzupassen. Ich hatte damals ähnliche Probleme, nicht mit 3D, aber auch da musste ich iOS und Android von Hand anpassen bis PaintTo und Bitmap richtig gepasst haben.
Delphi-Quellcode:
Ich stelle übrigens bei mir mit Entsetzen beim Debuggen in iOS fest das mein Modul in FMC.Contols out-of-sync ist, also die blauen Breakpointpunkte passen nicht zum Code.
function TControl.MakeScreenshot: TBitmap;
var SceneScale: Single; begin if Scene <> nil then SceneScale := Scene.GetSceneScale else SceneScale := 1; Result := TBitmap.Create(Round(Width * SceneScale), Round(Height * SceneScale)); Result.BitmapScale := SceneScale; Result.Clear(0); if Result.Canvas.BeginScene then try PaintTo(Result.Canvas, TRectF.Create(0, 0, Result.Width / SceneScale, Result.Height / SceneScale)); finally Result.Canvas.EndScene; end; end; Ich habe aber nichts geändert/kompiliert, etc., nur das letzte Hotfix eingespielt. Muss ich checken, ist das bei dir womöglich auch so ? Rollo |
AW: Tokyo, Android, TViewPort3D => Black Screen
Zitat:
Zitat:
Ob es das ist? |
AW: Tokyo, Android, TViewPort3D => Black Screen
Hallo Günther,
ja das hatte ich vor dem Einspielen auch gelesen (und wieder verdrängt) ... Könnte sein, aber warum liefern die dann nicht die aktuellen Sources mit aus ? Zu dem 3D-Problem: Ich weiss nicht genau was das passieren soll, jedenfalls ist das 3D Bild unten abgeschnitten. Es sieht bei mir so aus als wäre der Viewport nach oben verschoben. Vielleicht versuchst du mal das Ganze in ein Layout zu legen, mit Align = Client. Jedenfalls scheint der Makescreenshot zu funktionieren (schwer zu sagen weil das Viewport abgeschnitten ist). Aber das Bmp hat den ganzen Sphere drin, also mehr als ich im Phone Display sehen kann. Rollo |
AW: Tokyo, Android, TViewPort3D => Black Screen
Ich habe angefangen die Tabcontrol zu entfernen. War sowieso eine blöde Idee das alles in einem Form zu machen. Ich hoffe danach geht es bei mir, aber ich denke der Bug liegt in der Tabcontrol. Ich hab mit Winmerge mal die TViewport3D mit der von Berlin verglichen und außer der Zeile mit dem Copyright wurde da nix geändert.
|
AW: Tokyo, Android, TViewPort3D => Black Screen
Habs nochmal probiert, mit TLayout als Zwischenschicht und die Spere.Align = Client.
Macht mit dem TLayout direkt unter der Form als auch im TTabItem das was ich erwarten würde. Ich bleibe dabei, ich denke die Darstellungsfehler kommen von dem Align.Top. Im linken Bild wird eine kleine Version (je nachdem wie der Splitter steht) gezeichnet. Rollo |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:40 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz