AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia OpenGL oder GLScene setzt FPU-CW um
Thema durchsuchen
Ansicht
Themen-Optionen

OpenGL oder GLScene setzt FPU-CW um

Ein Thema von user0 · begonnen am 11. Jul 2007 · letzter Beitrag vom 13. Jul 2007
Antwort Antwort
user0

Registriert seit: 28. Okt 2005
25 Beiträge
 
Delphi 7 Personal
 
#1

OpenGL oder GLScene setzt FPU-CW um

  Alt 11. Jul 2007, 13:34
Hallo Leute,

eine Anwendung, die mehrere sehr genaue und komplexe Rechnungen ausführt stellt ihre Ergebnisse u.a. mit GLScene dar. Das Problem ist nun, dass sobald man GLScene startet die FPU Precision auf Double umgestellt wird. Mit hilfe von Set8087CW können wir das zurücksetzten, aber warum macht das GLScene oder OpenGL überhaupt, und wo?

user0

P.S.: Im GLScene Package wird das FPU Control Word immer auf Extended Precision und no Exceptions geschaltet ($133F). Also müsste OpenGL dafür verantwortlich sein. Lädt OpenGL irgend eine DLL? Bekanntlicher weise kann ja das Laden von DLLs das FPUCW umschalten.
  Mit Zitat antworten Zitat
user0

Registriert seit: 28. Okt 2005
25 Beiträge
 
Delphi 7 Personal
 
#2

Re: OpenGL oder GLScene setzt FPU-CW um

  Alt 12. Jul 2007, 14:55
Jetzt wird´s noch merkwürdiger: Auf mehreren PCs wird das CW nur einmal umgeschaltet. Auf einem mehrfach.

user0
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#3

Re: OpenGL oder GLScene setzt FPU-CW um

  Alt 12. Jul 2007, 20:30
Zitat von user0:
... Mit hilfe von Set8087CW können wir das zurücksetzten, aber warum macht das GLScene oder OpenGL überhaupt...
Weil in OpenGL sehr viel mit Gleitkommazahlen gearbeited wird die eine hohe Genuigkeit in den Nachkommastellen benötigt.

... und wo?
Na in der OpenGlxx.pas von GLScene.
Delphi-Quellcode:
// IsMesaGL
//
function IsMesaGL : Boolean;
begin
   Result:=(GetProcAddress(Cardinal(GLHandle), 'glResizeBuffersMESA')<>nil);
end;

initialization

  ContextList := TThreadList.Create;
  Set8087CW($133F); // <--<<

finalization

  CloseOpenGL;
  ContextList.Free;
  // We don't need to reset the FPU control word as the previous set call is process specific.
  
end.
Zitat von user0:
Jetzt wird´s noch merkwürdiger: Auf mehreren PCs wird das CW nur einmal umgeschaltet. Auf einem mehrfach.
Liegt das ggf. an deinem Programm ?
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
user0

Registriert seit: 28. Okt 2005
25 Beiträge
 
Delphi 7 Personal
 
#4

Re: OpenGL oder GLScene setzt FPU-CW um

  Alt 13. Jul 2007, 08:23
Hallo turboPASCAL,
erstmal Danke für deine Antwort.

Das Set8087CW($133F); in der OpenGL1x.pas habe ich auch gefunden, aber beim Öffnen des 3D-Fensters wird das CW nicht auf $133F sondern auf $127F bzw. $027F geschaltet. Laut dieser und anderer Websites heißt dass im wesendlichen, das alle Exceptionflags auf 1 (das ist ja gut so), aber die Floatingpoint-Precision auf "reserved" geschaltet (nicht so gut, sollte eigendlich 64-Bit extended sein) wird.


Das Programm lädt GLScene nur einmal. Hätte das nicht funktioniert, hätte es die gesammte 3D-funktionalität abgeschaltet.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:39 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz