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

Aktuelle Zeit: Mi Jul 09, 2025 12:01

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



Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: wieder mal... quickstart tutorial
BeitragVerfasst: Mi Dez 13, 2006 17:51 
Offline
DGL Member

Registriert: Di Dez 12, 2006 21:37
Beiträge: 30
also, nachdem ich mich ühsam durchs quickstart tutorial mit etlichen (dummen) fehlern, und kleien erfolgserlebnissen bin ich jetzt wirklich stecken geblieben.
Zunächst habe ich erstmal übrhaupt keine scene bekommen, jetzt kenne ich den fehler:
Application.OnIdle := IdleHandler; fehlte
soweit so gut. habe ich eingesetzt bekomme von Lazarus folgenden fehler:

Unit1.pas(44,24) Error: Wrong number of parameters specified
Unit1.pas(14,15) Hint: Found declaration: TForm1.IdleHandler(TObject,var Boolean)

Unit1.pas(73,35) Hint: use DIV instead to get an integer result
Unit1.pas(73,48) Hint: Type size mismatch, possible loss of data / range check error
Unit1.pas(91,1) Fatal: There were 1 errors compiling module, stopping

also die ersten beiden fehler sind wichtig: sie beziehen sich auf das OnIdle. was mache ich falsch?

Code:
  1. unit Unit1;
  2.  
  3. {$mode objfpc}{$H+}
  4.  
  5. interface
  6.  
  7. uses
  8.   Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, dglOpenGL,
  9.   OpenGLcontext,GL, GLU, windows;
  10.  
  11. type
  12.   TForm1 = class(TForm)
  13.     procedure CreateForm(Sender: TObject);
  14.     procedure IdleHandler(Sender: TObject; var Done: Boolean);
  15.     procedure Render;
  16.   private    { Private-Deklarationen }
  17.     StartTime, TimeCount, FrameCount  : Cardinal; //FrameCounter
  18.     Frames, DrawTime                  : Cardinal; //& Timebased Movement
  19.   public    { Public-Deklarationen }
  20.     DC: HDC;  //Handle auf Zeichenfläche
  21.     RC: HGLRC;//Rendering Context
  22.   end;
  23.  
  24. var
  25.   Form1: TForm1;
  26.   Done: boolean;
  27.  
  28. implementation
  29.  
  30. procedure TForm1.CreateForm(Sender: TObject);
  31. begin
  32.   DC:= GetDC(Handle);
  33.   InitOpenGL;
  34.   RC:= CreateRenderingContext( DC,
  35.                                [opDoubleBuffered],
  36.                                32,
  37.                                24,
  38.                                0,0,0,
  39.                                0);
  40.   ActivateRenderingContext(DC, RC);
  41.   glClearColor(0, 0, 0, 0.0); //Hintergrundfarbe: Hier ein leichtes Blau
  42.   glEnable(GL_DEPTH_TEST);          //Tiefentest aktivieren
  43.   glEnable(GL_CULL_FACE);           //Backface Culling aktivieren
  44.   Application.OnIdle:= IdleHandler;
  45.   end;
  46.  
  47.  
  48. procedure TForm1.IdleHandler(Sender: TObject; var Done: Boolean);
  49. begin
  50.   StartTime:= GetTickCount;
  51.   Render;
  52.   DrawTime:= GetTickCount - StartTime;
  53.   Inc(TimeCount, DrawTime);
  54.   Inc(FrameCount);
  55.  
  56.   if TimeCount >= 1000 then begin
  57.     Frames:= FrameCount;
  58.     TimeCount:= TimeCount - 1000;
  59.     FrameCount:= 0;
  60.     Caption:= InttoStr(Frames) + 'FPS';
  61. //    ErrorHandler;
  62.   end;
  63.  
  64.   Done:= false;
  65. end;
  66.  
  67. procedure TForm1.Render;
  68. begin
  69.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  70.  
  71.   glMatrixMode(GL_PROJECTION);
  72.   glLoadIdentity;
  73.   gluPerspective(45.0, ClientWidth/ClientHeight, 0, 0 );
  74.  
  75.   glMatrixMode(GL_MODELVIEW);
  76.   glLoadIdentity;
  77.  
  78.   glTranslatef(0, 0, -5);
  79.  
  80.   glBegin(GL_QUADS);
  81.     glColor3f(1, 0, 0); glVertex3f(0, 0, 0);
  82.     glColor3f(0, 1, 0); glVertex3f(1, 0, 0);
  83.     glColor3f(0, 0, 1); glVertex3f(1, 1, 0);
  84.     glColor3f(1, 1, 0); glVertex3f(0, 1, 0);
  85.   glEnd;
  86.   SwapBuffers(DC);
  87. end;
  88.  
  89. end.
  90.  
  91. initialization
  92.   {$I Unit1.lrs}
  93. end.
  94.  


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 13, 2006 19:19 
Offline
DGL Member

Registriert: Mo Dez 20, 2004 08:58
Beiträge: 442
Wohnort: Mittweida (Sachsen)
Entweder du schaltest Lazarus in den Delphi-kompatiblen Modus, oder Du stellst ein @ voran. FreePascal ist hier päpstlicher als der Paps, da man Events die Adresse des Handlers übergeben muss. Der Delphi-Compiler referenziert implizit automatisch, freepascal macht das nicht.

Beim ClientWidth/ClientHeight fällt mir nur ein: Einfach nicht ignorieren. freePascal geht von den 'Parametern' aus und die sind nunmal Integer, daher denkt er, das Ergebnis sollte auch Integer sein. Delphi ist hier auch nicht so pingelig.

_________________
Manchmal sehen Dinge, die wie Dinge aussehen wollen, mehr wie Dinge aus, als Dinge.
<Esmerelda Wetterwax>
Es kann vorkommen, dass die Nachkommen trotz Abkommen mit ihrem Einkommen nicht auskommen und umkommen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Dez 15, 2006 20:35 
Offline
DGL Member

Registriert: Di Dez 12, 2006 21:37
Beiträge: 30
:( :( :(
Okay,
es wird das 5343-te mal sein dass jemand diese (blöde) frage stellt.
wie gesagt ich kämpfe schon die ganze zeit damit, nun bin ich wieder am ende meines lateins.
ich kriege nur die doofe Windowsgraue form hin, kein Opengl fenster oder so, könnte in die tischkante beißen.
:cry: :cry: :cry:
wieder mal, was mache ich falsch.....
Code:
  1.  
  2. unit Unit1;
  3.  
  4. {$mode delphi}{$H+}
  5.  
  6. interface
  7.  
  8. uses
  9.   Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, dglOpenGL,
  10.   OpenGLcontext,GL, GLU, windows;
  11.  
  12. type
  13.   TForm1 = class(TForm)
  14.     procedure FormCreate(Sender: TObject);
  15.     procedure IdleHandler(Sender: TObject; var Done: Boolean);
  16.     procedure Render;
  17.   private    { Private-Deklarationen }
  18.     StartTime, TimeCount, FrameCount  : Cardinal; //FrameCounter
  19.     Frames, DrawTime                  : Cardinal; //& Timebased Movement
  20.   public    { Public-Deklarationen }
  21.     DC: HDC;  //Handle auf Zeichenfläche
  22.     RC: HGLRC;//Rendering Context
  23.   end;
  24.  
  25. var
  26.   Form1: TForm1;
  27.  
  28. implementation
  29.  
  30. procedure TForm1.FormCreate(Sender: TObject);
  31. begin
  32.   DC:= GetDC(Handle);
  33.   InitOpenGL;
  34.   RC:= CreateRenderingContext( DC,
  35.                                [opDoubleBuffered],
  36.                                32,
  37.                                24,
  38.                                0,0,0,
  39.                                0);
  40.   ActivateRenderingContext(DC, RC);
  41.   glClearColor(0, 0, 0, 0.0); //Hintergrundfarbe: Hier ein leichtes Blau
  42.   glEnable(GL_DEPTH_TEST);          //Tiefentest aktivieren
  43.   glEnable(GL_CULL_FACE);           //Backface Culling aktivieren
  44.   Application.OnIdle:= IdleHandler;
  45.   end;
  46.  
  47.  
  48. procedure TForm1.IdleHandler(Sender: TObject; var Done: Boolean);
  49. begin
  50.   StartTime:= GetTickCount;
  51.   Render;
  52.   DrawTime:= GetTickCount - StartTime;
  53.   Inc(TimeCount, DrawTime);
  54.   Inc(FrameCount);
  55.  
  56.   if TimeCount >= 1000 then begin
  57.     Frames:= FrameCount;
  58.     TimeCount:= TimeCount - 1000;
  59.     FrameCount:= 0;
  60.     Caption:= InttoStr(Frames) + 'FPS';
  61. //    ErrorHandler;
  62.   end;
  63.  
  64.   Done:= false;
  65. end;
  66.  
  67. procedure TForm1.Render;
  68. begin
  69.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  70.  
  71.   glMatrixMode(GL_PROJECTION);
  72.   glLoadIdentity;
  73.   gluPerspective(45.0, ClientWidth div ClientHeight, 0, 0 );
  74.   glMatrixMode(GL_MODELVIEW);
  75.   glLoadIdentity;
  76.  
  77.   glTranslatef(0, 0, -5);
  78.  
  79.   glBegin(GL_QUADS);
  80.     glColor3f(1, 0, 0); glVertex3f(0, 0, 0);
  81.     glColor3f(0, 1, 0); glVertex3f(1, 0, 0);
  82.     glColor3f(0, 0, 1); glVertex3f(1, 1, 0);
  83.     glColor3f(1, 1, 0); glVertex3f(0, 1, 0);
  84.   glEnd;
  85.   SwapBuffers(DC);
  86. end;
  87.  
  88. end.
  89.  
  90. initialization
  91.   {$I Unit1.lrs}
  92. end.
  93.  


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Dez 15, 2006 20:56 
Offline
DGL Member

Registriert: Di Jun 06, 2006 09:59
Beiträge: 474
Also in Delphi funzt die unit mit minimalen änderungen. Versuch mal die unit OpenGLcontext(giibt es bei mir nicht) wegzulassen. Wenn es dann nicht funzt, tippe ich auch ein FPC spezifischen Problem, bei dem ich dir dann aber nicht mehr weiterhelfen kann.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Dez 15, 2006 21:07 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
GL und GLU gehören auch raus.
Vorallem weiss der Compiler so nicht mehr welches glBegin er nehmen soll und kann uninitialisierte nehmen.

_________________
Steppity,steppity,step,step,step! :twisted:
❆ ❄ ❄ ❄ ❅ ❄ ❆ ❄ ❅ ❄ ❅ ❄ ❅ ❄ ❄
❄ ❄ ❄ ❅ ❄ ❄ ❄ ❅ ❄ ❄ ❆ ❄ ❄


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Dez 15, 2006 22:02 
Offline
DGL Member

Registriert: Di Dez 12, 2006 21:37
Beiträge: 30
soooooooo,
das mit dem Lazarus problem hatte ich auch schon im sinn, nun da ihr mir die fehlerfreiheit meines Codes attestiert habe, habe ich nochmal was ausprobiert:
der code ist im prinzip gleich geblieben, nur dass FormCreate jetzt GLinit heißt und keine parameter mehr hat. Meine ausführcode hat sich aber zu folgendem geändert:
von:
Code:
  1.  
  2. program OpenGL;
  3.  
  4. {$mode objfpc}{$H+}
  5.  
  6. uses
  7.   {$IFDEF UNIX}{$IFDEF UseCThreads}
  8.   cthreads,
  9.   {$ENDIF}{$ENDIF}
  10.   Interfaces, // this includes the LCL widgetset
  11.   Forms
  12.   { add your units here }, Unit1;
  13.  
  14. begin
  15.   Application.Initialize;
  16.   Application.CreateForm(TForm1, Form1);
  17.   Application.Run;
  18. end.
  19.  
  20.  


zu
Code:
  1.  
  2. program OpenGL;
  3.  
  4. {$mode objfpc}{$H+}
  5.  
  6. uses
  7.   {$IFDEF UNIX}{$IFDEF UseCThreads}
  8.   cthreads,
  9.   {$ENDIF}{$ENDIF}
  10.   Interfaces, // this includes the LCL widgetset
  11.   Forms
  12.   { add your units here }, Unit1;
  13.  
  14. begin
  15.   Application.Initialize;
  16.   Application.CreateForm(TForm1, Form1);
  17.   Form1.GLinit;
  18.   Application.Run;
  19.  
  20. end.
  21.  
  22.  


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Dez 15, 2006 22:06 
Offline
DGL Member

Registriert: Di Dez 12, 2006 21:37
Beiträge: 30
ja und nun darf man raten wo der fehler lag:
irgendwie ist diese FormCreate methode nicht aufgerufen worden...
also heíßt sie entweder anders oder Laz macht das nicht,


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Dez 15, 2006 23:02 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 02, 2002 15:41
Beiträge: 867
Wohnort: nahe Stuttgart
Ich rate einfach mal: ;)
Vielleicht hast du aus Versehen die EventHandler-"Verknüpfung" gelöscht?
Objekt Inspektor -> Form1:TForm1 -> "Ereignisse", unter "OnCreate" müsste "FormCreate" stehen, damit dein Code funktioniert.
Bzw. falls du es nicht so gemacht hast, musst du dort den Button mit "..." anklicken oder doppelt ins Edit davor, dann wird die Prozedur mit Verknüpfung automatisch angelegt.

MfG


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 » Einsteiger-Fragen


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.009s | 16 Queries | GZIP : On ]