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

Aktuelle Zeit: Mi Jul 23, 2025 10:55

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



Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: So Apr 13, 2003 21:48 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Feb 05, 2003 11:48
Beiträge: 7
Hallo,
wer kann mir evtl. helfen?

Mein Problem:
Ich habe eine Anwendung in Delphi programmiert welche mehrere OpenGl- Fenster verwendet (innerhalb einer Delphi- Form). Weiterhin hat diese Anwendung eine andere Form, welche auch über ein OpenGl- Fenster verfügt. Diese Anwendung läuft auf meinem Notebook (Win2k + Ati- GraKa) einwandfrei.
Sobald ich das Programm auf andere Rechner (Habe div. Rechner probiert: Win2k; Win98se, Ati-GraKa, TNT2-GraKa) übertrage habe ich folgende Effekte:
Die Bilder werden teilweise nicht richtig gezeichnet (Bleiben schwarz). Beim Wechsel in die SubForm wird in dieser das Bild sauber gezeichnet. Springe ich zurück, werden die Bilder innerhalb der Form mit den mehreren OGL- Fenstern 'durcheinandergewürfelt, d.h. in falschen Fenstern gezeichnet. Teilweise wird auch garnichts gezeichnet.
Ich habe mittlerweile verschiedene 'Fenster- Komponenten' aus div. OGL- Foren probiert. Der Effekt ist immer derselbe. Ich habe mein Programm in der Zwischenzeit aus Frust schon umgeschrieben und verwende nur noch ein Fenster pro Form (mehrere Zeichenbereiche), würde aber gerne wieder auf die ursprüngliche Variante zurückgehen.

Hat jemand schon 'mal soetwas programmiert????
Ich habe irgendwo gelesen das es da Restriktionen seitens Windows gibt; Stimmt das?

Ach ja: Ich verwende OpenGl 1.2 und Delphi-5

Gruss Cliff


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Apr 14, 2003 06:22 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Ich hatte einen solchen Effekt bisher noch nicht. Und von einer Einschränkung in Windows habe ich bisher auch noch nichts. Vielleicht solltest du mal deinen Rendercode etwas überdenken. Also die Stelle an der du renderst. (Wo befindet sich der Renderloop?) Und überprüfe mal, dass du überall richtig das MakeCurrent richtig setzt und vor allem, dass sich die einzelnen MakeCurrents nicht selber stören. Nicht, dass ein anderes aufgerufen wird wärend du noch renderst. (Threads, ...)
Ansonsten wüsste ich , so ohne beispiel (Anwendung, sourcen) auch nicht an was es liegen könnte.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Apr 14, 2003 11:11 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Wie LossyEx bereits gesagt hat, machst du vielleicht was in deinem Renderloop falsch.Ich geh allerdings mal davon aus, das schon ein Fehler bei der Erstellung der Renderkontexte gemacht wird.Du solltest auf jeden Fall für jeden Renderkontext einen eigenen DC nutzen, also ungefähr so :
Code:
  1.  
  2. var
  3.  DC1, DC2 : HDC;
  4.  RC1, RC2 : HGLRC;
  5. ...
  6. DC1 := GetDC(Form1.Handle);
  7. DC2 := GetDC(Form2.Handle);
  8. RC1 := CreateRenderingContext(..,DC1,...);
  9. RC2 := CreateRenderingContext(..,DC2,...);
  10.  


Dein Rendercode sollte dann ungefähr so aussehen :
Code:
  1.  
  2. ActivateRenderingContext(DC1,RC1);
  3. // Zeichne Szene in Form1
  4. SwapBuffers(DC1);
  5. DeActivateRenderingContext;
  6.  
  7. ActivateRenderingContext(DC2,RC2);
  8. // Zeichne Szene in Form2
  9. SwapBuffers(DC2);
  10. DeActivateRenderingContext;
  11.  


So dürften eigentlich keine Renderkontexte durcheinander gewürfelt werden, da sie ja alle expliziz an den Devicekontext des entsprechenden Fenster gebunden sind.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Apr 16, 2003 10:39 
Offline
DGL Member

Registriert: Mi Okt 16, 2002 15:06
Beiträge: 1012
DeActivateRenderingContext deaktiviert doch alle RenderKontexte ???

wglMakeCurrent(RC1, 0);

wäre besser zum deaktivieren, somit kannst du einzelne Kontexts deaktivieren.
Ich hab das so momenan in meinem neuen Editor so gelöst.
Ich hab 4 Panels zur Ausgabe genommen in einem TForm.

yanee,
Final


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Apr 22, 2003 20:25 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Es wäre wahrscheinlich das Beste, wenn du deine Quellen (kompilierbar. Mit allen benötigten Quellen) mal irgendwo hoch lädst, dass man da mal drüber schauen könnte. Dann könnten wir uns schnell einen Überblick verschaffen und würden des Rätzels Lösung finden.


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


Wer ist online?

Mitglieder in diesem Forum: Google [Bot] und 34 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:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 15 Queries | GZIP : On ]