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  [ 31 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3  Nächste
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: Do Dez 29, 2005 22:53 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Dez 28, 2005 17:43
Beiträge: 18
Okay. Habs eingefügt.


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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Dez 29, 2005 23:30 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Die Variablen modelview,projection und viewport werden in deinem Programm anscheinend direkt auf den Stack gelegt und nicht ein Zeiger auf diese Variablen. gluUnproject benötigt aber den Zeiger. Das ist der Fehler. Daher dann
function gluUnProject(winx, winy, winz: GLdouble;
modelMatrix: PGLdouble;
projMatrix: PGLdouble;
viewport: PGLint;
objx, objy, objz: PGLdouble): Integer; stdcall;
benutzen und
gluUnProject(X, Y_new, Z,@modelview, @projection, @viewport, @Result[0], @Result[1], @Result[2]);


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Dez 30, 2005 00:04 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Dez 28, 2005 17:43
Beiträge: 18
Sowas in der Art hatte ich mir schon gedacht, weil es ja eigentlich immer eine Zugriffsverletzung war.
Aber in der dglOpengl.pas sind die Variablentypen der Parameter vom Typ TGLMatrixd4 weshalb meine Versuche Pointer zu übergeben logischerweise mit dem Compilerfehler
Zitat:
ship.pas(43,64) Error: Incompatible types: got "Pointer" expected "TGLVectori4"
ship.pas(88,4) Fatal: There were 1 errors compiling module, stopping
ship.pas(88,4) Fatal: Compilation aborted

enden. Ist es einfach nur in der dglOpengl falsch definiert oder rafft FPC es nicht? Oder raff ich es nicht?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Dez 30, 2005 00:10 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Ja das ist dann wohl falsch. Da muß entweder der Zeiger oder var hin. "Const" würde zumindest bei Delphi auch funktionieren.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Dez 30, 2005 00:11 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Anscheinend ist var und Pointer für manche Compiler doch nicht das selbe. Das könnte jetzt ein guter Grund sein die alte Variante zumindest parallel zu unterstützen, wenn es noch Resantiments dagegen gibt, es komplett zu ändern.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Dez 30, 2005 00:14 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
In der Datei steht ja weder das eine noch das andere.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Dez 30, 2005 00:31 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Dez 28, 2005 17:43
Beiträge: 18
dglOpengl.pas 2.0 vom 06.12.2005
Zeile 6233: TgluUnProject = function(winx, winy, winz: TGLdouble; modelMatrix: TGLMatrixd4; projMatrix: TGLMatrixd4; viewport: TVector4i; var objx, objy, objz: TGLdouble): TGLint; {$IFNDEF CLR}{$IFDEF Win32}stdcall; {$ELSE}cdecl; {$ENDIF}{$ENDIF}

Ist das vlt. die falsche Version von dglOpengl?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Dez 30, 2005 11:21 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Ne das ist die aktuelle. Aber da ist wie gesagt in der Deklaration ein Fehler:
Das muß TgluUnProject = function(winx, winy, winz: TGLdouble; modelMatrix: PGLMatrixd4; projMatrix: PGLMatrixd4; viewport: PVector4i; var objx, objy, objz: TGLdouble): TGLint;
heißen und wird in der nächsten Version korrigiert.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Dez 30, 2005 12:03 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Dez 28, 2005 17:43
Beiträge: 18
Okay. Danke. Reicht es aus, wenn ich die eine Zeile ändere?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Dez 30, 2005 12:17 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Dez 28, 2005 17:43
Beiträge: 18
Die Frage hat sich grade beantwortet. Ich habe die gluUnproject geändert und die beiden Pointertypen für Matrix und Vektor hinzugefügt. Jetzt liefert das Programm einigermaßen brauchbare Ergebnisse und vor allem: Es stürzt nicht mehr ab.

Danke für eure Hilfe


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Dez 30, 2005 13:29 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Weist du was mich derzeit am meisten irritiert? Anscheinend kracht es nur bei dir. :shock: Nicht, dass ich es schlimm finde wenn man Fehler entdeckt aber dabei bin ich ein bisschen arg irritiert. Ich habe gerade mal im Wiki und in der Version 1.5 des Headers nachgesehen. Alle machen es so wie es im 2.0er ist. Und der 1.5er Header wurde eine Zeit lang benutzt, da der 1.8er wegen .net bei glu(Un)Project nicht funktionierte. Aber nicht an deinen Problemparametern. Das ganze lässt nur den Schluss zu, dass Delphi so frei ist und automatisch bei solchen Typen einen Pointer auf den Stack packt. Sonst hätten ja die Anwendungen mit dem 1.5er nicht funktioniert. Was sie aber offensichtlich getan haben sonst wäre uns jemand aufs Dach gestiegen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Dez 30, 2005 13:36 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Ich habe mal im Debugger nachgesehen und Delphi macht das tatsächlich so. Vermutlich liegt dass am stdcall. Da müßte man mal nachlesen wie das die offiziellen Regeln sind, dass ist ja durch Windows vorgegeben.
Dann ist es eventuell doch kein Fehler im Header sondern von FreePascal.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Dez 30, 2005 15:17 
Offline
DGL Member

Registriert: Sa Jan 22, 2005 21:10
Beiträge: 225
Die Sache mit den Pointern kommt ja von C. Da kann man meines wissens gar keine Arrays übern Stack übergeben. Wenn man da ein Array in der Parameterliste hat, wirds automatisch als Pointer gehandhabt. Kann also tatsächlich sein, dass die bei Borland das bei stdcall so an C angepasst haben.

_________________
[18:30] tomok: so wie ich das sehe : alles. was nich was anderes ist als nen Essay ist nen Essay

hi, i'm a signature viruz, plz set me as your signature and help me spread :)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Dez 30, 2005 15:32 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
http://msdn.microsoft.com/library/defau ... tdcall.asp

Da steht:

Zitat:
Argument-passing convention: By value, unless a pointer or reference type is passed.


Und Arrays sind unter C ja eigentlich immer Referenz Typen.

Wenn man da records statt Arrays in der Funktion nimmt, dann übergibt auch Delphi den Parameter als Wert und nicht als Zeiger,


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Dez 30, 2005 15:55 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Dez 28, 2005 17:43
Beiträge: 18
Wie gesagt: Delphi hab ich nicht zur Hand und konnte es deshalb auch nicht nachkontrollieren. Und es war mir schon fast klar, dass es dadran liegt, dass Freepascal irgendwas falsch macht. Obwohl es ja im Prinzip kein Fehler ist, weil es sich genau an die vorgegebene Definition in der dglOpengl gehalten hat. Und da scheint auch der Delphimode von fpc nix dran zu ändern.
Aber jetzt funzt es ja.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 31 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3  Nächste
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.013s | 15 Queries | GZIP : On ]