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

Aktuelle Zeit: Sa Jul 05, 2025 17:50

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 12 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: OpenGL startet nicht (gelöst)
BeitragVerfasst: Do Sep 18, 2008 15:53 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Apr 09, 2008 16:28
Beiträge: 52
Wohnort: Münster
Hey
Ich hab ein kleines Problem:
Mein alter PC ist kaputt gegangen desshalb hab ich jetz windows (und dadurch auch Delphi und das DGLSDK) neu aufgespielt. Bei den alten Sachen hab ich auch schon mit OpenGL programmiert und mir immerhin den Header noch retten können.
Als ich den jet zaber wieder eingefügt hab und unter den neuen Sachen weitermachen wollte, hat es zwar keine Fehlermeldungen gegeben aber OpenGL startet einfach nicht (soll heißen mir wird das normale Delphi Programm ohne jede Veränderung angezeigt !
Hat jemand ne Idee woran das liegen könnte?

Vielen Dank für eure Antworten schonma und hier is jetz nochma der Header (falls es etwas mit dem zu tun hat):
Code:
  1.  
  2. unit UnitGLstandart;
  3.  
  4. interface
  5.  
  6. uses
  7. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  8. Dialogs,DGLOpenGL, ExtCtrls,SDL, SDL_Image;
  9. const
  10. NearClipping = 1;
  11. FarClipping = 1000;
  12. type
  13. TForm1 = class(TForm)
  14. procedure FormCreate(Sender: TObject);
  15. procedure IdleHandler(Sender: TObject; var Done: Boolean); //nur für die OnIdle Methode!
  16. procedure FormResize(Sender: TObject);
  17. procedure FormDestroy(Sender: TObject);
  18. private { Private-Deklarationen }
  19. StartTime, TimeCount, FrameCount : Cardinal; //FrameCounter
  20. Frames, DrawTime : Cardinal; //& Timebased Movement
  21. procedure SetupGL;
  22. procedure Render;
  23. procedure ErrorHandler;
  24.  
  25.  
  26. public { Public-Deklarationen }
  27. DC : HDC; //Handle auf Zeichenfläche
  28. RC : HGLRC;//Rendering Context
  29.  
  30. end;
  31.  
  32. var
  33. Form1: TForm1;
  34.  
  35. implementation
  36.  
  37. {$R *.dfm}
  38.  
  39.  
  40.  
  41. procedure TForm1.FormCreate(Sender: TObject);
  42. begin
  43. DC:= GetDC(Handle);
  44. if not InitOpenGL then Application.Terminate;
  45. RC:= CreateRenderingContext( DC,
  46. [opDoubleBuffered],
  47. 32,
  48. 24,
  49. 0,0,0,
  50. 0);
  51. ActivateRenderingContext(DC, RC);
  52. SetupGL;
  53. glClearColor(0.0, 0.0, 0.0, 0.0); // nur evetuell verwenden siehe nächster Teil
  54. Application.OnIdle := IdleHandler;
  55. end;
  56.  
  57. procedure TForm1.SetupGL;
  58. begin
  59. glClearColor(0.2, 0.4, 0.7, 0.0); //Hintergrundfarbe: Hier ein leichtes Blau ode rauch nichT <!-- s:) --><img src=\"{SMILIES_PATH}/icon_smile.gif\" alt=\":)\" title=\"Smile\" /><!-- s:) -->
  60. glEnable(GL_DEPTH_TEST); //Tiefentest aktivieren
  61. glEnable(GL_CULL_FACE); //Backface Culling aktivieren
  62. end;
  63.  
  64. procedure TForm1.FormResize(Sender: TObject);
  65. var tmpBool : Boolean;
  66. begin
  67. glViewport(0, 0, ClientWidth, ClientHeight);
  68. glMatrixMode(GL_PROJECTION);
  69. glLoadIdentity;
  70. gluPerspective(45.0, ClientWidth/ClientHeight, NearClipping, FarClipping);
  71.  
  72. glMatrixMode(GL_MODELVIEW);
  73. glLoadIdentity;
  74. IdleHandler(Sender, tmpBool); //nur für OnIdle!
  75. end;
  76.  
  77. procedure TForm1.FormDestroy(Sender: TObject);
  78. begin
  79. DeactivateRenderingContext;
  80. DestroyRenderingContext(RC);
  81. ReleaseDC(Handle, DC);
  82. end;
  83.  
  84.  
  85. procedure TForm1.Render;
  86.  
  87. begin
  88. glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  89. glMatrixMode(GL_PROJECTION);
  90. glLoadIdentity;
  91. gluPerspective(45.0, ClientWidth/ClientHeight, NearClipping, FarClipping);
  92.  
  93. glMatrixMode(GL_MODELVIEW);
  94. glLoadIdentity;
  95.  glBegin(GL_TRIANGLES);
  96.   glVertex3f(-1,-1, 0);  
  97.   glVertex3f( 1,-1, 0);
  98.   glVertex3f( 0, 1, 0);
  99. glEnd;
  100. glTranslatef(0, 0, -16);
  101.  
  102. SwapBuffers(DC);
  103. end;
  104.  
  105. procedure TForm1.IdleHandler(Sender: TObject; var Done: Boolean);
  106. begin
  107. StartTime:= GetTickCount;
  108. Render;
  109. DrawTime:= GetTickCount - StartTime;
  110. Inc(TimeCount, DrawTime);
  111. Inc(FrameCount);
  112.  
  113. if TimeCount >= 1000 then begin
  114. Frames:= FrameCount;
  115. TimeCount:= TimeCount - 1000;
  116. FrameCount:= 0;
  117. Caption:= InttoStr(Frames) + 'FPS';
  118. ErrorHandler;
  119. end;
  120. sleep(40);
  121. Done:= false;
  122. end;
  123.  
  124.  
  125. procedure TForm1.ErrorHandler;
  126. begin
  127. Form1.Caption := gluErrorString(glGetError);
  128. end;
  129.  
  130. end.
  131.  

_________________
"Sometimes it pays to stay in bed on Monday, rather than spending the rest of
the week debugging Monday's code."
-- Dan Salomon


Zuletzt geändert von DK99 am So Okt 12, 2008 10:04, insgesamt 3-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 18, 2008 22:15 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Kommt wirklich gar keine Fehlermeldung?
Hast du auf deinem Rechner einen GraKa-Treiber installiert?

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Sep 19, 2008 07:11 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Apr 09, 2008 16:28
Beiträge: 52
Wohnort: Münster
Nee es kommt wirklich gar keine Fehlermeldung! Der strtet auch ganz normal nur dass man dann halt nur Form1 sieht und nicht das OpenGL Fenster.
Und ja Grafikkartentreiber sind eigentlich installiert. Oder muss man irgentwelche besonderen Treiber installieren um OpenGL zu benutzen??? (Ich hab einfach den STandarttreiber genommen)

EDIT:
Ich hab jetz auch schon ausprobiert mal fertige Quellcodes zu startet und da funktioniert OpenGL ?!
Kann das sein dass mein Header irgentwelche Fehler enthält?

_________________
"Sometimes it pays to stay in bed on Monday, rather than spending the rest of
the week debugging Monday's code."
-- Dan Salomon


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Problem gelöst!
BeitragVerfasst: Fr Sep 19, 2008 07:52 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Apr 09, 2008 16:28
Beiträge: 52
Wohnort: Münster
OK also das Problem muss wohl im Header liegen.
Könnte jemand mal gucken ob ich da irgentwelche Fehler drinn hab?? (eigentlich hab ich den genau aus dem ersten Tutorial übernommen ?!
(Das mit dem anderen Header hat doch nicht funktioniert :( )
EDIT:
Also ich bin echt am Verzweifeln :(
Hab den Header noch mal durchgeschaut und eigentlich müsste das laufen?!
Hat nich irgentwer ne Idee?
LG

_________________
"Sometimes it pays to stay in bed on Monday, rather than spending the rest of
the week debugging Monday's code."
-- Dan Salomon


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Okt 01, 2008 21:56 
Offline
DGL Member

Registriert: Fr Dez 28, 2007 20:24
Beiträge: 62
Wohnort: Berlin
Genau das Problem hatte ich heute auch,
probier es mal mit dem Header:


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Okt 02, 2008 08:25 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Den aktuellsten Header gibt es immer im Wiki Artikel "dglOpenGL.pas". Ich kann auch nur empfehlen diesen zu benutzen, da sich mitunter auch mal Fehler einschleichen können. Wenn ihr da dann auf älteren Headern sitzen bleibt ist natürlich die Chance relativ gering das solche Problem beseitigt werden. Allerdings ist die Gefahr, dass sich Fehler einschleichen auch nicht sonderlich groß. Aber lässt sich nicht ausschließen.

DK99: Hatte deinen Code schon früher mal überflogen allerdings ist mir da gerade jetzt noch was aufgefallen. Du hast zwar schön die Methode FormResize definiert. Allerdings rufst du diese nicht auf bzw. wird diese nur dann aufgerufen, wenn sich die Fenstergröße verändert. Also so wie ich das sehe setzt du nirgendswo garantiert den ViewPort.

Ich mache das bei mir immer folgendermaßen.
Code:
  1. procedure TForm1.FormShow(Sender: TObject); // oder create
  2. begin
  3.   FDC := GetDC(Handle);
  4.   FRC := CreateRenderingContext(FDC, [opDoubleBuffered], 32, 24, 0, 0, 0, 0);
  5.   ActivateRenderingContext(FDC, FRC);
  6.  
  7.   // einstellungen
  8.  
  9.   FInitialised := True;
  10.  
  11.   FormResize(Self);
  12. end;
  13.  
  14. procedure TForm1.FormResize(Sender: TObject);
  15. begin
  16.   if (FInitialised) then begin
  17.     glViewport(...);
  18.  
  19.     glMatrixMode(GL_PROJECTION);
  20.     glLoadIdentity();
  21.     gluPerspective(45.0, Aspect, 2.0, 128.0);
  22.   end;
  23. end;
  24.  
  25. procedure TForm1.ApplicationEvents1Idle(Sender: TObject; var Done: Boolean);
  26. begin
  27.   Done := False;
  28.  
  29.   DrawScene;
  30.  
  31.   SwapBuffers (FDC);
  32. end;


PS: Falls es nicht gehen sollte, dann sei mal gut und Hänge bitte deinen Code mal an. Dann können wir uns das direkt mal anschauen.

[edit]PPS: DK99 noch ein kleiner Hinweis was ich gerade erst gesehen habe. Wenn du ein paar Tage nach deinem letzten posting deinen ersten Beitrag bearbeitest, dann sieht das niemand! Das Thema wird im Forum nur markiert, wenn es dort neue Beiträge gibt. Da solltest du evtl. besser ein PushPosting einsetzen um zu zeigen, dass das Problem immer noch aktuell ist. Sonst sieht es keiner. Und wenn zu viel gepusht wird sagen wir schon was. ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Okt 05, 2008 14:24 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jan 04, 2008 21:29
Beiträge: 419
Wohnort: Lübeck
Die Lösung deines Problems ist hoffentlich die selbe lächerliche wie sie bei mir war, als ich einfach den fertigen Header eingefügt hatte. Wenn du nähmlich Events deiner Form ansprichts wie zum Beispiel onresize oder so, dann musst du diese auch im ObjectInspector registrieren. Wahscheinlich hast du einfach ein neues Projekt mit deinem Header überschrieben und vergessen oncreate,onresize und ondestroy zu registrieren. Falls das so ist, einfach im ObjectInspector auf die entsprechenden Event Einträge clicken und es sollte wieder laufen.
Wenn man das nicht macht, dann passiert schlicht garnichts, keine Fehlermeldung, denn die Funktionen existieren ja, aber sind nicht zugewiesen auf die proceduren, die du dafür verwendest. FormCreate zum Beispiel wird durch OnCreat ausgelöst, ist bei dir aber noch nicht zu einander zugewiesen. Deshalb passiert nichts und deine Form bleibt leer.

grüße

_________________
Klar Soweit?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Okt 08, 2008 09:35 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Apr 09, 2008 16:28
Beiträge: 52
Wohnort: Münster
OK also vielen Dank ersma für die Antworten :)
Ich bin grad im Urlaub desshalb kann ichs noch net ausprobiern.
Wenn ich wieder an meinen PC kann test ich das gleich mal und schreib dann nochmal hier.

PS: Danke auch für den Tipp mit dem leichten pushen :) Daran hab ich nich gedacht dass bei nem Edit dass ja gar net als neu markiert wird. Ich werd in Zukunft dran denken.

LG

_________________
"Sometimes it pays to stay in bed on Monday, rather than spending the rest of
the week debugging Monday's code."
-- Dan Salomon


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Okt 11, 2008 22:04 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Apr 09, 2008 16:28
Beiträge: 52
Wohnort: Münster
Yeah
es läuft :P
Sellmann genau das wars!!!! Ich hab das mit OnCreate jetzt geändert und es läuft wieder.
(blööder Fehler :roll: )
Naja aba Lossy den Header von "dglOpenGL.pas". hab ich mir auch mal runtergeladen und ehrlich gesagt war ich ein bisschen geschockt was da alles drin steht!
Desshalb hab ich jetzt folgende Frage:
Braucht man einen solchen Header oder reicht auch ein kleiner Header wie ich ihn oben gepostet hab ?
Oder braucht man so einen ausführlichen Header nur bei sehr anspruchsvollen Projekten?

LG

_________________
"Sometimes it pays to stay in bed on Monday, rather than spending the rest of
the week debugging Monday's code."
-- Dan Salomon


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Okt 11, 2008 22:49 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Nun ja. Der neuere Header enthält natürlich neuere Erweiterungen mit denen du neuere Technologien benutzen kannst. Und es kann natürlich immer sein, dass in einem älteren Header Fehler enthalten sein können. Wenn da ein Problem gefunden und behoben wird, dann bleibst du mit deinem älteren Header auf diesem Problem natürlich sitzen. Wenn du allerdings keine Probleme hast und nicht die neusten Technologien benutzen willst, dann wird solch ein Header genügen. Solltest du dann irgendwann doch Probleme bekommen, dann kann ich nur empfehlen mal den Neusten auszuprobieren. Ist also eine ideologische Entscheidung die jeder selbst treffen muss. Ist ja mit allen normalen Programmen genau das Gleiche.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Okt 12, 2008 09:50 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Apr 09, 2008 16:28
Beiträge: 52
Wohnort: Münster
Ah ok na ich glaub dann verwend ich meinen alten einfach weiter.
Ich bin noch nen ziemlicher ANfänger also werd ich die neusten Erweiterungen noch gar nicht verwenden.
Falls ich die doch mal brauche probier ich dann mal den neuen aus.

_________________
"Sometimes it pays to stay in bed on Monday, rather than spending the rest of
the week debugging Monday's code."
-- Dan Salomon


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Okt 12, 2008 17:01 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Ich muss ganz ehrlich sagen, dass ich immer den aktuellen verwenden würde. Solange dich die Bedienung nicht zum kompletten umbau deines Codes zwingt, gibt es eigentlich keinen Grund auf ältere Libs zu schwören.

Früher war nicht alles besser. ;)

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


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


Wer ist online?

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