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

Aktuelle Zeit: Fr Jul 18, 2025 07:30

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



Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Autor Nachricht
BeitragVerfasst: So Aug 01, 2004 13:15 
Offline
DGL Member

Registriert: Mo Apr 05, 2004 19:51
Beiträge: 105
Hallo!

Ich habe folgendes Problem: Ich verwende für ein eigenes Programm OpenGL zur 2D-Grafikausgabe, also schlicht Texturen auf Quads im Orthomodus. Nun soll ein Kontextmenü (diese Rechtsklick-Popups) darüber eingeblendet werden. Das funktioniert auch normalerweise, aber bei ATI-Karten ist das Popup oft nicht sichtbar, wenn man blind in das Gebiet klickt wo das Popup sein soll, werden die Aktionen allerdings dennoch ausgelöst. Wann das Popup erscheint und wann nicht, scheint dabei rein zufällig zu sein. Auf NVidia-Karten funktioniert alles einwandfrei.

Der gesamte Code wäre viel zu umfangreich zum Posten, aber ich umschreibe mal wie die entsprechenden Stellen programmiert sind:
- Ich habe ein TPopupMenu Objekt
- Dieses wird mittels PopupMenu.Popup(X,Y); entweder bei OnMouseDown (Rechtsklick) eingeblendet
- Damit das Menü auch sichtbar wird, wird zunächst das OnPaint Ereignis meines Programms ausgeführt und danach der Popup-Befehl aufgerufen
- OnPaint löscht den Bildschirm, malt die Quads mit den Texturen und führt SwapBuffer aus.

Hier der Pseudo-Code:
Code:
  1. procedure TMainForm.DoPaint(Object: TObject);
  2. begin
  3.   glClear(GL_COLOR_BUFFER_BIT);
  4.   MaleQuadsMitTexturen;
  5.   SwapBuffers(Canvas.Handle);
  6. end;
  7.  
  8. procedure TMainForm.ShowPopup;
  9. begin
  10.   DoPaint(Self);
  11.   MainPopup.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y);
  12. end;
  13.  
  14. procedure TMainForm.HandleMouseDown(parameterliste);
  15. begin
  16.   if (Button = mbRight) then ShowPopup;
  17. end;
  18.  
  19. procedure TMainForm.HandleKeyDown(parameterliste);
  20. begin
  21.   if (Key = VK_SPACE) then ShowPopup;
  22. end;

Mache ich irgend etwas falsch / nicht ganz richtig? Wie gesagt: Meistens funktioniert's, manchmal ist das Popup aber schlicht unsichtbar - und zwar nur auf ATI-Karten (aktuellste Treiber). Wenn's ein Bug ist - wie umgehe ich den am geschicktesten?

Gruß,
Arno


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Aug 01, 2004 14:23 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jul 21, 2004 22:39
Beiträge: 360
Wohnort: UK, Scotland
are you using any specific extentions?

_________________
Free Map Editor - Game Requirements - Stucuk.Net
-Stu


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Aug 02, 2004 11:49 
Offline
DGL Member

Registriert: Mo Apr 05, 2004 19:51
Beiträge: 105
Nein, ich greife auf keine Extensions zu.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Aug 02, 2004 12:12 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Welche Grafikkarte, und welcher Treiber? Auf meiner Radeon 9700 mit dem aktuellen Catalys (4.7) hab ich das grade mal probiert, und das PopUp wird immer korrekt dargestellt. Allerdings rendere ich im OnIdle-Event, also nicht über das OnPaint-Ereignis.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Aug 02, 2004 14:06 
Offline
DGL Member

Registriert: Mo Apr 05, 2004 19:51
Beiträge: 105
Radeon 9800 XL (ja, die Aldi-Version); Treiberversion habe ich grade nicht (bin nicht daheim), aber den hatte ich vor einer Woche von der ATI-Homepage heruntergeladen.
Das selbe Verhalten habe ich an zwei anderen PCs mit unterschiedlichen ATI-Karten und -Treibern beobachten können, auf sämtlichen PCs mit NVidia-Karten war es nicht nachvollziehbar.

Rendern im OnIdle-Event wäre leider keine Lösung, da sich an dem Bild nichts ändert und die Rechenleistung benötigt wird um im Hintergrund die nächsten Bilder vorzubereiten. Per Idle-Event ständig das Bild wieder auf den Bildschirm zu klatschen ist also höchst nutzlos in diesem Fall.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Aug 02, 2004 15:24 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Der OnIdle-Event wird ja normalerweise auch nicht permanent aufgerufen, sondern nur dann wenn man Done auf False setzt und so dem OS vorgaugelt man wäre noch nicht mit seinen Arbeiten fertig. Solange dort Done = True ist, wird der nur aufgerufen wenn nötigt.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: zum Thema ATI-Karten
BeitragVerfasst: Mi Aug 25, 2004 15:53 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 28, 2004 10:59
Beiträge: 9
Wohnort: Neustrelitz / Meckl.-Vorp.
Hallo,

Zum Thema ATI-Karten fällt mir folgendes ein. Ich habe eine OpenGL-Anwendung geschrieben, die u.a. eine Fläche aus Dreiecken darstellt und diese beleuchtet.
Als ich das ganze mal auf meinem Laptop laufen ließ (ATI Radeon 9000), waren plötzlich einige Dreiecke verkehrt herum beleuchtet, also Licht unten + Schatten oben. Ein Fehler im Sourcecode war nicht zu finden, d.h. die Orientierung der Flächen war korrekt.

Das Problem verschwand erst, als ich mir den neuesten Treiber für die Karte installierte. Also mit anderen Worten: Bei ATI-Karten sollte man ruhig mal einen neuen Treiber probieren, wenn man einen Bug im Code nicht finden kann.

Gruß,

diskdruide.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Aug 26, 2004 10:29 
Offline
DGL Member

Registriert: Mo Apr 05, 2004 19:51
Beiträge: 105
Ja, das ist bekannt. Insbesondere die alten ATI-Treiber sind in Sachen OpenGL gelinde gesagt eine Katastrophe... Mit den neueren scheint aber zumindest das meiste zu laufen.
Den Tipp mit dem OnIdle-Event muss ich mal die Tage noch ausprobieren; ich habe im Moment nicht viel Zeit.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 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.009s | 16 Queries | GZIP : On ]