Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Mi Jul 09, 2025 19:23

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 18 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: Do Mai 22, 2008 19:07 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
SDL: Ja. Das stimmt. Der Kontext wird nur gelöscht, wenn man den Videomodus neu setzt. Aber in dem Beispielen die ich für Linux gemacht habe komme ich ohne neu setzen nicht aus. Denn da verändert sich der OpenGL Viewport in der Größe nicht. Unter Windows lief auch nicht alles glatt (weiß aber nicht mehr was es genau war). Und ich meine jemand hatte mal gesagt, dass die Mausposition dann auch nicht richtig berechnet würde.

Scissor: Du kannst mit Scissor einen rechteckigen Bereich auswählen. glClear etc wird dann auch nur auf diesen Bereich angewandt. Damit könnte man dann dafür sorgen, dass man nur den neuen Button zeichnet. Wobei man da alles innerhalb des Scissors neu malen sollte. Wegen Transparenz etc.

Bei typischen OpenGL Anwendungen hat man allerdings Doublebuffering und benötigt vollständige Bilder. Und da muss man dafür sorgen, dass sowohl Back als auch Frontbuffer identisch und richtig sind. Denn Sagen wir mal ein Button verändert seine Farbe von Rot auf Blau, dann ist er im Frontbuffer Blau wärend er im Backbuffer noch Rot ist. Wenn sich jetzt etwas anderes ändert muss man dafür sorgen, dass der Button auch wieder Blau wird. Denn beim Wechseln der Buffer haben wir auf einen älteren Stand gewechselt und dann hätte man genau genommen 2 Stellen die man updaten müsste. Da das die Verwaltung doch etwas erschweren würde habe ich das weggelassen. Denn je nach Komplexibilität stellt sich ja fast die Frage ob solch eine Verwaltung nicht langsamer ist als alles zu zeichnen. Hat beides irgendwo Vor und Nachteile. Auf der einen Seite komplex und recht schnell Fehleranfällig und auf der anderen Seite nicht so schnell wie es sein könnte. Wobei man bei der anderen Methode aber trotzdem noch das Ein oder Andere doppelt zeichnen muss.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mai 22, 2008 19:20 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2623
Wohnort: Berlin
Programmiersprache: Go, C/C++
Wenn sich nur der Text ändert, dann wird der Scissortest natürlich nur auf die ClientBox von der Schrift gemacht.
Allgemein gesagt, man zieht um den Bereich, der neugezeichnet werden muss eine Scissorbox und Zeichnet dann den Inhalt neu. Wenn man ein Zeichencall vom OS bekommt, also ein Teil des Buffers nicht mehr aktuell ist, dann wird der gesammte Teil, mit allen enthaltenden GUI Elementen, die die Scissorbox schneiden, neugezeichnet.
Man fässt also zwar mehere Widgets an aber zeichnet trotzdem nur ein Teil des Widget und das ist ja immer noch der größte kostenfaktor, Pixel zeichnen. Egal ob GDI,XLib oder was weiss ich, alle nutzen ein Rect, welches die neu zu zeichnenden Bereich angibt und intern werden alle Widgets aufgerufen, die das Rect schneiden. Das Rechteck wird dann beim Paint mit übergeben.
Mit standard OpenGL sind nur dinge ekelig, wo man komplexe dinge ohne Texturen realisieren will, da man dann viele Triangle braucht(siehe meinem Shape basierten GUI Prototyp).

edit:
Back to Topic.
Wenn du mit C++ arbeitest, dann hast du den Vorteil, dass du die aktuellen Libs direkt mit in dein Projekt linken kannst(also static builds).
Wenn du dich mit wxWidget mal beschäftigen willst, dann lade dir folgende dinge runter.
http://www.wxwidgets.org/downloads/ wxAll laden(alle Platformen)
http://wxformbuilder.org/?page_id=7 wxFormBuilder(ne klicki bunti GUI builder)
Ein schönen Compiler und ne gute IDE z.B. Code::Blocks.
http://www.codeblocks.org/
Nun kommt es auf den Compiler und die Toolchain an.
VSc++, einfach build/msw/ und dort den workspace in nen aktuelle solution konvertieren lassen, zu compilierenden modus auswählen(unicode,universial unicode,normal,dynamic link lib,debugmode,...) und compilieren.
mingw, einfach make und fertig

Ich verwende static builds und linke die lib files in mein vsc++ solution mit rein.
In der Regel braucht man noch die Headerfiles, wie wx.h, damit man wxApp,wxFrame und so hat.
Wichtig ist include/msw/setup.h, da hier die Konfiguration von wxWidget passiert.
Wenn du kein odbc,netzwerk,... support brauchst, hier kommen die 0 für nein und 1 für ja rein.
Nun kannst dir die Samples und das wiki angucken.
http://wiki.wxwidgets.org/Guides_%26_Tutorials
Bei Problemen kannst du dort auch die Anleitungen für mehere Compiler finden.

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mai 22, 2008 20:22 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
Zitat:
dann ist er im Frontbuffer Blau wärend er im Backbuffer noch Rot ist. Wenn sich jetzt etwas anderes ändert muss man dafür sorgen, dass der Button auch wieder Blau wird.

Hmm, bisher war das Verhalten der GUI immer wie erwartet, auch ohne glScissor. Ich werde das aber im Auge behalten.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 18 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 24 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.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.007s | 14 Queries | GZIP : On ]