Registriert: Sa Nov 24, 2007 11:59 Beiträge: 116
Programmiersprache: FreePascal
Ich hatte gerade ein Problemchen mit dem Stencilbuffer, der wurde nämlich nicht erstellt. Grund: "Unknown OpenGL Attribute".
Beim weiteren Debuggen ist mir auch aufgefallen, dass _alle_ Attributübergaben mit dem Fehler scheitern. Dargestellt wird aber trotzdem irgendwas und das Surface wird demnach logischerweise auch irgendwie erstellt. Nur alles, was über Farb-und Tiefenpuffer hinaus geht, funktioniert gar nicht.
Ich hab hier Ubuntu 9.04 (64 bit) mit den mitgelieferten SDL-Paketen (1.2.6) und ne NVidia GeForce 9300GE mit dem NVidia 180.44-Treiber laufen, könnte es was damit zu tun haben?
Habe gerade keine Möglichkeit, das auf anderen Systemen zu testen.
Zum Abschluss noch der Code von der SDL-Initialisierung:
Code:
if SDL_Init(SDL_INIT_VIDEO) < 0then
log.terminate('Initialization of SDL failed: '+ SDL_GetError);
videoInfo := SDL_GetVideoInfo;
if videoInfo =nilthen
log.terminate('Polling video card failed: '+ SDL_GetError);
if SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, config.readInt('SDL.DEPTHSIZE',32))=-1then
begin
Log.add(E_WARN,'Depth buffer size of '+IntToStr(config.readInt('SDL.DEPTHSIZE',32))+' bits seems to be too large - falling back to 16 bits: '+ SDL_GetError);
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Ich habs gerade mal kurz hier ausgeführt und habe festgestellt, dass die SDL-Fehlermeldungen eigentlich komplett egal sind. Die eigentliche Fehlererkennung läuft erst beim anfordern der Surface ab. Da flog er bei mir raus ("Couldn't find matching GLX visual"). Daraufhin habe ich mal glxinfo angeworfen und geschaut, was für GLX Visuals meine Grafikkarte denn drauf hat. Dabei habe ich festgestellt, dass kein einziger Modus 32-bit Tiefenpuffer unterstützt. Also hab ich mal aus der 32 ne 24 gemacht und sieheda, ich bekam den Puffer. Übrigens auch mit 8bit stencil. Ich denke einfach, dass die Meldungen, die SDL_GL_SetAttribute da rauswirft nichtssagend sind. Wenn was schief geht, musst du das beim holen der Surface prüfen.
greetings
P.S.: Hier läuft ein Fedora 11 mit NV-Treiber 185.18.14 auf ner GeForce 7600.
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Registriert: Sa Nov 24, 2007 11:59 Beiträge: 116
Programmiersprache: FreePascal
nach dem Holen des Surfaces entsteht bei mir kein Fehler.
Auch auf einem 32Bit-Windoof-Vista (habs heute mal probieren koennen) kommen keine Fehlermeldungen und alles funktioniert perfekt.
Hier wird das, was ich als Attribute übergebe, leider gar nicht erst beachtet. Der Tiefenpuffer hat laut OpenGL immer 24 Bit (ok, mehr kann meine graka aber auch wirklich nicht, meine alte konnte? Aber ich fliege da nichtmal raus..) (laut SDL ist gar keiner da ), Stencilbuffer klappt nicht. Alle Attributübergaben fliegen mit dem netten Rückgabewert -1 raus.
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Ebenfalls 64bit..... Wobei es da nach meinen Erfahrungen schon erstaunlich genug ist, dass der SDL-Header funktioniert.
Das mit den Fehlern ist interessant... Ich habe übrigens eine andere SDL-Version als du, es ist 1.2.13. Bentutzt du eine aus den Entwicklerrepositories (gibts sowas für SDL überhaupt - also öffentlich?)? Denn laut libsdl.org ist 1.2.13 die aktuellste öffentliche Version.
greetings
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Registriert: Sa Nov 24, 2007 11:59 Beiträge: 116
Programmiersprache: FreePascal
Die eigentliche SDL-Core hier scheint doch die gleiche zu sein (wenn ich jetzt die richtigen Pakete erwischt hab). Die Versionierung der Ubuntu-Pakete hat mich stutzig gemacht :S
Ne, ne Entwicklerversion von SDL benutz ich nicht. Das wäre dann SDL 1.3, offenbar kommt der letzte commit vom 10. Juni, aber ich bezweifle mal, dass mich das weiterbringt.. (ok, hab schon genug unstable hier )
EDIT: Problem behoben
Das Problem scheint beim Header zu liegen. Scheinbar macht mein FPC aus dem Typen TSDL_GLAttr einen DWord. Der Funktionsaufruf benötigt in der 64Bit-Version aber einen QWord. Ich hab also in der Funktionsdeklaration von SDL_GL_SetAttribute den Typen auf QWord gesetzt und siehe da - wenn man die Konstanten wie SDL_GL_RED_SIZE nach QWord castet, returnen die Funktionen 0.
Jetzt muss ich nur noch zusehen, dass ich das 1. plattformunabhaengig mache (hat FPC fuer x86_64 nen compilerswitch?) und 2. noch den Stencilbuffer anschalte.
EDIT 2:
Anstatt eines Compilerswitches kann man auch PtrUInt als Typen benutzen.
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Genau, 1. PtrUInt (oder auch SizeUInt) und als Compilerswitch gibts dann auch noch CPU64 bzw CPU32.
Was mich dann allerdings erstaunt ist, dass es bei mir ohne probleme läuft. Welche FPC-Version benutzt du?
greetings
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Mitglieder in diesem Forum: Google [Bot] und 24 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.