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

Aktuelle Zeit: Fr Nov 27, 2020 06:55

Foren-Übersicht » Sonstiges » Community-Projekte
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
BeitragVerfasst: So Jul 22, 2007 14:38 
Offline
DGL Member
Benutzeravatar

Registriert: So Okt 26, 2003 20:07
Beiträge: 249
Hiho,

Ein relativ simples Problem: InitOpenGL liefert eine Access Violation. Den Grund kenne ich denke ich auch: in GetProcAddress wird ein THandle zu einem Pointer gecastet. Ich selbst bin schon darüber gestolpert, einen Pointer durch casten nach Integer hochzuzählen und danach Exceptions zu kassieren. Das lag daran, dass die Pointer zumindest im 64bit-FPC eine Größe von 64bit statt 32bit haben, und somit eine ganze Menge beim Casten und Rückcasten abgeschnitten wurde.

Beim Zurückverfolgen ende ich bei der Funktion LoadLibrary. Sie ruft die externe Funktion LoadLibrary auf, die als Rückgabewert einen Pointer hat. Diesen Pointer castet sie zu THandle (Bingo :) ). Meine erste provisorische Lösung für das Problem ist relativ einfach: anstatt THandle aus System zu ziehen, habe ich THandle im Type-Block der dglOpenGL einfach als Int64 deklariert, was auch (bis jetzt) funktioniert.

mfg Sebastian

edit: Nochwas: glGetString(GL_VERSION) scheint nicht zu funktionieren - Kommt ein leerer String zurück. Und in TrimAndSplitVersionString ruft dieses Abort eine Exception hervor. Hab das jetzt erstmal auskommentiert. Und nicht nur, dass diese schicken Extension-Bools nicht zugewiesen werden - zumindest glMapBufferARB gibt mir den glError "Invalid Operation" (Code hat unter Windows einwandfrei funktioniert).

_________________
I'm not the signature, I'm just cleaning the floor...

Derzeitiges Projekt:
FireBlade Particle Engine (Release R2 2009.06.29)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jul 22, 2007 18:39 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Hallo Sebastian,

ich kenne mich mit 64 Bit System gar nicht aus aber theoretisch müssten ja dann alle Pointer 64 Bit groß sein. Und Int64 funktioniert dort ja eigentlich auch nur bedingt. Weil ein Int hat immer noch ein Vorzeichen wärend ein Pointer ja keines hat. Beim einfachen Weiterreichen ist das kein Problem. Delphi an sich kann auch gar keine vorzeichenlose 64 Bit Werte.

Das Problem würde ja unter Windows genau so bestehen wie jetzt unter Linux. Ich werde mich die Tage mal schlau machen, ob ich dazu in den MSDNs etwas finden kann. Und wenn ich es dann geschafft habe die Methoden anzupassen darfst du 64 Bit Versuchskaninchen spielen. ;)

Gibt es eigentlich ein Define was vom Compiler her gesetzt ist wenn es sich um ein 64 Bit System handelt?


glGetString(GL_VERSION): Also eine leere Version ist eigentlich nicht erlaubt oder zu mindest sehr suspekt. Ist zu dem Zeitpunkt denn OpenGL schon richtig initialisiert/aktiviert worden? Denn ansonsten kannst du natürlich keine Version abfragen. Oder was war das denn für ein Treiber?

Warum glMapBufferARB nicht geht darüber kann ich nicht mal spekulieren.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jul 22, 2007 18:52 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Die Handles sind bei 64-Bit aber auch 64-Bit groß. Sind ja teilweise Zeiger. Daher müßte THandle eigentlich in den FP Units umdefiniert werden.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jul 22, 2007 20:57 
Offline
DGL Member
Benutzeravatar

Registriert: So Okt 26, 2003 20:07
Beiträge: 249
So hab mich mal ein bischen "umgeschaut".

1. Soweit ich das bisher gesehn habe, sind alle Pointer 64bit-Zahlen.
2. Das 64bit-Versuchskaninchen spiele ich doch gerne :)
3. Bei mir ist ein "cpux86_64" gesetzt. Ob das jetzt nur speziell von FPC kommt weiß ich nicht - das Equivalent ist "cpui386", müsstet ihr unter Delphi mal testen.
4. Habe die aktuellsten stable-Treiber von nvidia, v97.55. In diesem nvidia-settings teil sind auf jeden fall alle extensions usw. aufgelistet - muss aber ja nicht unbedingt was heißen.
5. Initialisation in der Reihenfolge: InitOpenGL; ReadExtensions; ReadImplemetationProperties. Die letzten beiden habe ich auch schonmal vertauscht. Im Prinzip sogar mehr, als ich sonst immer gemacht hab.
6. Habe mal die Definition von THandle zurückverfolgt. Ich komme bis zu einer IncludeDatei von system.pp. Dort wird es als THandle = System.THandle definiert. in system.pp selbst ist keine Definition von THandle. Wo das also genau herkommt weiß ich nicht. Muss also nicht unbedingt seitens FP fehlerhaft sein. Ich muss mir mal Kylix zum Vergleich zulegen.

Ein THandle generell als Int64 zu definieren ist natürlich auch nicht das wahre. Statt den Umweg über die Compilerdirektiven könnte man (wenn man so ne Extra-Definition macht) THandle vllt. auch direkt als Pointer deklarieren? dann würde es sozusagen automatisch von 32 auf 64bit wechseln...

_________________
I'm not the signature, I'm just cleaning the floor...

Derzeitiges Projekt:
FireBlade Particle Engine (Release R2 2009.06.29)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jul 24, 2007 12:34 
Offline
DGL Member
Benutzeravatar

Registriert: So Okt 26, 2003 20:07
Beiträge: 249
Ich habs ganz vergessen zu sagen:

Ich erstelle den RenderContext nicht mit dglOpenGL (sowas wie CreateRenderingContext usw. gibts ja nur für Windows), sondern mit einer vorgefertigten Klasse in der LCL über GTK1. Ich denke nicht unbedingt, dass das was bzgl. der Fehler bei glMapBufferARB usw. zu sagen hat, aber kann ja nicht schaden, das mal zu erwähnen.

BTW: Wer einen besseren Weg (vllt. sogar über den dgl-Header) zum erstellen eines Renderingcontextes weiß, bitte mir per PM mitteilen - so bin ich nämlich auf die hässliche GTK1-Anbindung beschränkt... Danke.

_________________
I'm not the signature, I'm just cleaning the floor...

Derzeitiges Projekt:
FireBlade Particle Engine (Release R2 2009.06.29)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Aug 09, 2007 12:18 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2576
Wohnort: Berlin
Programmiersprache: C/C++, C#
Guck mal ins fpc dort ist bei demos/opengl ein linux beispiel für x11 drin.
Das ist ziemlich einfach und ich baue momentan die dglgui weiter aus und habe schon mit hilfe der demo ein cross fenster system realisiert.

Zu den pointer ist noch folgendes zu sagen, du solltest sowas ähnliches wie folgendes nutzen.
http://delphi.wikia.com/wiki/FreePascal_detection_and_versioning

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Sep 08, 2007 00:34 
Offline
DGL Member
Benutzeravatar

Registriert: So Okt 26, 2003 20:07
Beiträge: 249
Zumindest kann ich schonmal teilweise Entwarnung geben:

Mit FPC 2.0.4 habe ich KEINERLEI Probleme. Man muss auch dazu sagen, dass 2.1.5 eine Beta ist, trotzdem sollte man mal beim nächsten stable-Release von FPC drauf achten.

edit:
Mir fällt jetzt erst auf, dass ich noch garnichts davon gesagt hab, das ich FPC 2.1.5 verwendet hab. Trotz alledem bleibt es dabei - mal aufs nächste Release schauen.

_________________
I'm not the signature, I'm just cleaning the floor...

Derzeitiges Projekt:
FireBlade Particle Engine (Release R2 2009.06.29)


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


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.062s | 15 Queries | GZIP : On ]