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

Aktuelle Zeit: Fr Jul 18, 2025 11:47

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



Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Mo Jan 23, 2006 19:28 
Offline
DGL Member

Registriert: Mo Jan 23, 2006 18:42
Beiträge: 5
Wohnort: Dortmund
Hallo allerseits,
vielleicht kann mir jemand einen Tip geben, was ich falsch mache.
Habe einen GLViewer geschrieben, mit dem ich auf ein Panel eine OpenGL-Szene ausgebe. Das funktioniert auch bislang ganz hervorragend auf allen Rechnern, die Windows 2000 oder XP haben und auf denen ich das Programm laufen ließ. Jetzt habe ich auf einem solchen Rechner ein Windows XP Embedded von SD-Karte laufen, das angeblich auch OpenGL unterstützt, und mein Panel bleibt leer. Ausgiebiges Debuggen ergab für mich, dass das wglCreateContext nicht funktioniert, sprich mein "theRC:= wglCreateContext(theDC);" ergibt theRC = 0 und der aufgetretene Fehler hat die Nummer 1411:"Class does not exist". Ich habe dann auch mal ein anderes Programm ausprobiert, bei dem direkt aufs Form gerendert wird, also nicht auf ein Panel, und dann bekomme ich als Fehler einen 1447: "The window does not have scroll bars". Ist doch echt informativ, oder? :-(
Im Windows/System32/ liegt eine OpenGL32.dll, die, wie ich annehme, den Extern-Code bereitstellt. Kanns an der leigen? Brauch ich da ne andere?
Damit das alles nicht ganz so abstrakt ist, hier die entsprechenden Code-Schnipsel:
Code:
  1. ...
  2.     theDC:= GetDC(P_Vorschau.Handle);                    // P_Vorschau ist ein TPanel, scheint auch zu funktionieren, sprich liefert eine Zahl
  3.     GL_Viewer.SetupPixelFormat(theDC, thePalette);    //                      von der ich annehme, dass es ein Handle sein könnte
  4.     theRC:= wglCreateContext(theDC);                       // liefert ne 0 und den Fehler 1411
  5.     wglMakeCurrent(theDC, theRC);                                                          
  6.  
  7. //und hier der Teil aus SetupPixelFormat
  8. begin
  9.   FillChar(pfd, SizeOf(pfd), 0);
  10.   with pfd do begin
  11.     nSize     := sizeof(pfd);               // Länge der pfd-Struktur
  12.     nVersion  := 1;                         // Version
  13.     dwFlags   := PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL or
  14.                  PFD_DOUBLEBUFFER;          // Flags
  15.     iPixelType:= PFD_TYPE_RGBA;             // RGBA Pixel Type
  16.     cColorBits:= 24;                        // 24-bit color
  17.     cDepthBits:= 32;                        // 32-bit depth buffer
  18.     iLayerType:= PFD_MAIN_PLANE;            // Layer Type
  19.   end;
  20.   nPixelFormat:= ChoosePixelFormat(DC, @pfd);                 // <- ergibt unter 2000 eine 3, unter XP embedded eine 2
  21.   SetPixelFormat(DC, nPixelFormat, @pfd);                          // <- ergibt true
  22.                                             // Farbpalettenoptimierung wenn erforderlich
  23.   DescribePixelFormat(DC, nPixelFormat,
  24.                       sizeof(TPixelFormatDescriptor),pfd);             // <- ergibt auch true
  25. ...
  26. end;
  27.  


Also, wenn sich jemand einen Reim darauf machen kann oder einen Tip hat, wäre ich dem sehr verbunden. Wenn ich nicht ausführlich genug war, bitte fragt nach, sollte ich zu ausführlich gewesen sein, bitte ich um Entschuldigung.
Ansonsten schöne Grüße aus dem kalten Dortmund

DaWalt


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 23, 2006 20:41 
Offline
DGL Member

Registriert: Mi Dez 15, 2004 20:36
Beiträge: 454
Wohnort: Wien, Österreich
Woher hast du die Fehlermeldungen ? Von WindowsAPI GetLastError(), oder glGetError() ?

Wie auch immer:
Zitat:
Im Windows/System32/ liegt eine OpenGL32.dll, die, wie ich annehme, den Extern-Code bereitstellt.
OpenGL32.dll in deisem Fall garantiert, dass es zumindest eine Software Emulation von OpenGL auf dem Rechner gibt. Ob es ( OGL Implementation ) mit Hilfe von GPU realisiert wird, ist eine ganz andere Sache.

Es ist schon ganz komisch dass dein RC 0 ist. Ist stelle noch eine Frage, und weiss nicht, ob es damit im Zusammenhang steht, aber kann man davon ausgehen, dass die neusten Treibern (für die Grafik-Karte) instaliert sind?

_________________
"Meine Mutter sagt : 'Dumm ist der, der Dummes tut'." - Forrest Gump


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 23, 2006 22:50 
Offline
DGL Member

Registriert: Mo Jan 23, 2006 18:42
Beiträge: 5
Wohnort: Dortmund
Die Fehlermeldungen habe ich mit dem WindowsAPI GetLastError() erzeugt. Wie man mit glGetError arbeitet weiß ich (noch) nicht, werde ich aber noch herausfinden und dann berichten. Das die Treiber aktuell sind, nehme ich an (der Rechner ist neu), kann ich aber nicht garantieren, da es sich bei dem Rechner um einen fertig installierten IndustriePC handelt. Zumindest funktioniert mein Programm auf ihm unter dem von der gleichen Firma vorinstallierten Windows 2000 (was natürlich nicht viel heißt - schließlich wird XP embedded eigene Treiber brauchen). Was vielleicht auch noch zu sagen ist, ist dass das 2000 eine intenationale Version mit deutschen Languagepack ist, das XP embedded jedoch leider nur ein rein englische Version. Meine erste Idee war deswegen, dass es sich um irgendwelche Übersetzungsprobleme handelt (nicht gefundene Dateien wegen deutscher Umlaute), aber das kann ich wohl ausschließen, denke ich.
Zitat:
Ob es ( OGL Implementation ) mit Hilfe von GPU realisiert wird, ist eine ganz andere Sache.

Kannst Du mir sagen, was das heißt? Ich habe halt nachgeschaut, woher der wglCreateContext kommt und dort stand, dass er extern aus OpenGL32.dll stammt, wo ich denn leider nicht reingucken konnte. ;-) Von daher nahm ich an, dass das OpenGL aus dieser Datei stammt. Habe auch mal versucht, sie gegen die OpenGL32.dll von der Windows 2000 Partition zu tauschen (nach der Fehlermeldung dachte ich, sie wäre vielleicht beschädigt oder unvollständig) - mit dem selben Ergebnis leider.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 23, 2006 23:30 
Offline
DGL Member

Registriert: Mi Dez 15, 2004 20:36
Beiträge: 454
Wohnort: Wien, Österreich
Zitat:
Kannst Du mir sagen, was das heißt?
Unter Windows ( XP, 2000 glaube ich, für ältere Versionen bin ich mir nicht sicher ) gibt es immer eine OGL implementation ( man kann glXXX und wglXXX Funktionen benutzen ). D.h. man kann sicher davon ausgehen, dass man etwas auf dem Bildschirm zu sehen bekommt. Ob die Ausgabe jetzt durch Software-Emulation ( durch MS implementiert ) erfolgt, oder ob es eine Hardware Unterstützung gibt, hängt ausschliesslich von den instalierten Garka-Treibers. ( daher die Frage )

Wenn man die Treibers von Hersteller instaliert, "melden" sich diese beim Windows und "sagen" : "Jetzt bitte, sollte jemand die Funktionen aus OpenGL32.dll benutzen, melde dich (Windows) bei mir (Treiber) und ich werde dann die enstprechende Implementation (Hardware wo es geht) anbieten ( für alle glXX und wglXXX funktionen )". ;) Huh so in etwa....

_________________
"Meine Mutter sagt : 'Dumm ist der, der Dummes tut'." - Forrest Gump


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 24, 2006 08:30 
Offline
DGL Member

Registriert: Mo Jan 23, 2006 18:42
Beiträge: 5
Wohnort: Dortmund
Danke, für die Erklärung. Das heißt im Umkehrschluß, dass es für den Debugger von Delphi auf jeden Fall unmöglich ist, dem Fehler auf die Schliche zu kommen, da der Faden vor der .dll abreißt und dahinter aber noch jede Menge passiert, auf das ich keinen Einfluß mehr habe, oder? Bestenfalls könnte ich noch versuchen, den Grafiktreiber zu deaktivieren und dann hoffen, dass ich eine Software-Emulation bekomme, die funktioniert?! :-(
Fürchte, das bringt mich alles nicht weiter. Werde wohl mal schauen, ob überhaupt irgend ein OpenGL-Programm auf der Kiste läuft und, falls nicht, der Installationsfirma auf die Finger hauen. ;-)
Also nochmals Dank und Gruß aus Do

DaWalt


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 24, 2006 11:10 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Es könnte auch sein, dass du es mit OpenGL ES zu tun hast. Wobei ich mich damit nicht auskenne. Eventuell läuft das da anders.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 24, 2006 13:45 
Offline
DGL Member

Registriert: Mo Jan 23, 2006 18:42
Beiträge: 5
Wohnort: Dortmund
Was ist denn nun OpenGl ES wieder? "E"mbedded "S"ystems? Gibts da verschiedene, die ich mir irgendwo herunterladen kann/muß?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 24, 2006 15:50 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Genau. ES für Embedded Systems. Is für Handys und son Kram.

Die Unterscheiden sich mitunter etwas. Wie ich z.B. gehört habe gibt es bei ES kein glBegin() glEnd(). Sondern man arbeitet da mit Vertex-Arrays. Ich hoffe einer der Alten Hasen sagt mal was dazu. Glaub Lars hat schonmal was zu ES geschrieben.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 24, 2006 15:58 
Offline
DGL Member

Registriert: Mo Jan 23, 2006 18:42
Beiträge: 5
Wohnort: Dortmund
Ich glaube, das ist eine falsche Fährte, besser gesagt: ich hoffe! Der Rechner ist ein normaler Industrie-PC, auf dem sonst Win2K läuft und das Windows ist XP embedded, das sich (hoffentlich, wie gesagt) nur in sofern von einem normalen XP unterscheidet, dass es von schreibschützbaren Flashcard läuft. Also kein PocketPC oder Handy... Es läuft ja auch ein gewöhnliches Delphi 5.


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 5 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.008s | 15 Queries | GZIP : On ]