Registriert: Di Apr 29, 2008 18:56 Beiträge: 1213
Programmiersprache: Delphi/FPC
Hey Leute,
ich sitz schon wieder am Blending meiner GUI. Und mal wieder bin ich am verzweifeln. Ich hatte dazu zwar schonmal was im TextSuite-Thread geschrieben, aber den will ich jetzt nicht weiter damit zumüllen, das sich das Problem ja eher ums Blending als um die TextSuite dreht. Also folgendes Problem:
Ich render jedes meiner Controls in ein extra FBO. Das Problem ist nun das der Text relativ stark ausfranzt. Das liegt daran, dass er sozusagen 2x geblendet wird. Einmal wenn ich ihn in das FBO render und einmal wenn ich das FBO in den FrameBuffer render. Wenn ich den Text ohne Blending in ein leeres FBO render und dann das FBO zeichne sieht alles 1a aus. Kleines Bsp (siehe Anhang). Die Texte im TabControl sind Labels und haben ihr eigenes FBO in dem nur der Text steht. Die Texte in den Tabs selbst haben kein extra FBO sondern werden in das FBO des TabControls geblendet. Die Frage ist nun ob ich das auch irgendwie im FBO so hin bekomm das es gut aussieht, oder ob ich die ganze Textausgabe so umbau, das der Text immer in einem eigenen FBO landet (was ich gern vermeiden würde). Geblendet wird immer mit GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA. Ich hab es auch schon mit GL_ONE, GL_ONE_MINUS_SRC_ALPHA probiert, aber da bekomm ich komisches Verhalten bei einem nicht transparenten weißen Design. Hat zufällig jmd n Geistesblitz, der das Problem löst?
MfG & Thx Bergmann.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Registriert: Do Mär 05, 2009 20:17 Beiträge: 284 Wohnort: Kaiserslautern
ok auf die gefahr hin, das das jetzt totaler müll ist, aber wenn du den text in das "leere" fbo renderst muß er doch auch schon einen hintrgrund haben... (so kenn ich das zumindest von der textsuite) ändert sich was wenn du dieses hintergrundquad schonmal mit dem grau des controls malst?
Registriert: Mo Nov 08, 2010 18:41 Beiträge: 769
Programmiersprache: Gestern
Mhhh wenn du ein FBO nimmst sollte doch Scissor kein Problem sein oder? Dann kannst du die Texte auch ohne FBO machen. Eventuell koennte aber man auch den AlphaTest nehmen.... das ist aber nen bissl bloed von wegen Kantenglaettung.
Registriert: Di Apr 29, 2008 18:56 Beiträge: 1213
Programmiersprache: Delphi/FPC
Hey,
@wölfchen: wenn das Control grau wäre, dann würde das gehen, aber das Control is schwarz und halbtransparent und der Hintergrund ist komplett weiß. Hab ich vergessen oben zu erwähnen :/
@yunharla: Wie meinst du das mit Scissor? Scissor geht doch nur rechteckig soweit ich weiß, oder? Die Alpha Func is ne Idee, das muss ich mir nochma genau angucken.
Registriert: Di Apr 29, 2008 18:56 Beiträge: 1213
Programmiersprache: Delphi/FPC
Ich versteh immer noch nicht ganz, worauf du hinaus willst. Wobei genau soll mir Scissor helfen? €: grad nochma drüber nachgedacht, AlphaTest bringt mir auch nix...
Registriert: Mo Nov 08, 2010 18:41 Beiträge: 769
Programmiersprache: Gestern
Naja ich hatte mal so ein aehnliches Problem. Das ganze wurde durch die Texturfilter ausgeloest. Das ganze kann sich dann bei Render-to-Texture und co immer weiter addieren. Ich habs dann so geloest das ich nur 1 einziges FBO fuer GUI verwendet habe. Mit Scissor wirds nur etwas leichter, da man sich keine Gedanken mehr um Sachen wie Clipping (Scrollviews z.B.) oder Clear machen muss.
Registriert: Mi Nov 30, 2011 21:41 Beiträge: 136 Wohnort: Bad Vilbel
Programmiersprache: Delphi 7
Ich glaube das Problem ist dass der Rand der Schrift die Farbe transparentgrau hat, also $8888 und nicht transparentweis, $fff8. Wie wärs du die Hintergrundfarbe der FBOs auf weis setzt (also nicht weis sondern transparentes weis: glClearColorf(1,1,1,0).
Registriert: Di Apr 29, 2008 18:56 Beiträge: 1213
Programmiersprache: Delphi/FPC
Das würd nix bringen, weil ich den Hintergrund des Controls ohne Blending ins FBO zeichne. Da würde das weiß überschrieben werden. Und wenn ich den Hintergrund ins FBO rein blenden würde, dann wäre der dann grau und nicht mehr schwarz :/
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Premultiplied Alpha ist das Stichwort und eine Ausgeburt der Hölle. Kann man nicht vermeiden, wenn man's erstmal hat. Also du musst in dem Fall auf ein FBO umsteigen und selbst dann wirst du noch Artefakte haben. Am geringsten Fallen diese aus, wenn du das GUI-FBO dann mit GL_ONE, GL_ONE_MINUS_SRC_ALPHA renderst.
grüße
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Registriert: Di Apr 29, 2008 18:56 Beiträge: 1213
Programmiersprache: Delphi/FPC
Hey,
den Tipp hattest du mir damals im TextSuite-Thread schonma gegeben. Mit dem schwarzen halbtransparenten (20%) Control Hintergrund funtkioniert das auch wunderbar, aber bei meinem weißen Design mit halbtransparentem (70%) weißen Control-Hintergrund wird mein Control nicht durchsichtig, sondern weiß Ich glaub langsam mir bleibt nix anderes übrig, also noch ein extra FBO für den Text zu machen...
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Nein, was ich eigentlich sagen wollte ist, nicht noch mehr FBOs. Eigentlich willst du FBOs um jeden Preis vermeiden (vom Blending-Aspekt her) und wenn du schon eins hast, dann möglichst alles da rein rendern.
grüße
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Registriert: Di Apr 29, 2008 18:56 Beiträge: 1213
Programmiersprache: Delphi/FPC
Hey,
dann geht mir aber die Performance verloren, weil ich dann alles neu Rendern muss, nur weil ich irgendwo ein MouseOver-Glow hab :/ Und wie schon gesagt, [GL_ONE, GL_SRC_ALPHA] geht mit nem weißen Design nich. Hab ma noch n Bild mit angehängt, wo man das sieht. Abgesehen davon überlagen sich die Fenster ja auch. Wenn ich die alle in ein FBO Render, dann geht da bestimmt auch noch irgendwas schief... Ich hab mir das auch nochma genau durch den Kopf gehen lassen. Man muss die Blendreihnfolge einhalten, wenn man das richtige Ergebniss haben will. Mir ist kein Weg eingefallen wie ich das realisieren könnte:
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Naja, und da kommt glScissor ins spiel: Scissore dir einfach das Rechteck raus, welches sich geändert hat, cleare das und rendere dann neu. Das bringt nicht viel, aber besser wirds nicht, wenn du ein korrektes Ergebnis willst.
grüße
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Mitglieder in diesem Forum: 0 Mitglieder und 17 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.