Registriert: Di Apr 29, 2008 18:56 Beiträge: 1213
Programmiersprache: Delphi/FPC
HI,
ich hab mein 1. OpenGL Prog fertig gestellt, und es an einige Leute zu testen verschickt. Bei manchen kommen beim Start aber immer Zugriffsverletzungen, aber ich weiß nicht woher. Das ist aber erst seitdem ich ein FBO eingebaut hab. Ich hab versucht den Fehler so zu vermeiden:
Code:
InitFBO;
if FBO =0then
begin
MessageDLG('Unable to create frame buffer object! Application terminated.',mtError,[mbOK],0);
Application.Terminate;
exit;
end;
Aber an der situation hat sich nichts geändert: es hagelt immer noch Fehlermeldungen. Jeweils ein beim Start und eine beim Beenden. Ich kann mir nich erklären, woran das liegen könnte! Hat jmd ne Ahnung woran das liegen könnte?
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Du musst überprüfen ob die Extension GL_EXT_framebuffer_object auch von OpenGL unterstützt wird. Ich denke, dass das in diesem Fall nicht so ist. Denn wenn sie nicht unterstützt wird, dann sind die Methoden der Extension alle nil. Und das fürt dann zu solchen Fehlern.
Also du erstellst dein FBO mit der Methode glGenRenderbuffersEXT. Aber wenn FBOs nicht unterstützt werden dann knallt es bereits bei diesem Aufruf. Da dann versucht wird eine Methode aufzurufen die nil ist. Der Fall, dass die ID des FBOs 0 ist kann eigentlich nur eintreten wenn der Treiber intern kein Objekt anlegen kann. Was nur im Fehlerfall so sein wird. Denn wenn die Karte keine FBOs kann warum sollte der Treiber dann auch FBOs anbieten. Wäre nicht logisch.
Wenn du mich fragst sollte dein Code eher wie folgt aussehen.
Code:
ifnot GL_EXT_framebuffer_object thenbegin
MessageDLG('Unable to create frame buffer object! Application terminated.',mtError,[mbOK],0);
Application.Terminate;
exit;
end;
InitFBO;
PS: Also überprüfen ob die Variable einer Extension gesetzt ist. Die Variable kommt im ürigen aus der dglOpenGL. Wurde eingebaut um auf einfache Weise feststellen zu können ob eine Extension unterstützt wird oder nicht.
PPS: Das solltest du auch mit den anderen Extension auch machen!! Also mal durch deinen Code gehen und schauen welche Methoden du sonst noch benutzt. In der dglOpenGL kannst du dann nachschlagen zu welcher Extension sie gehört. Steht ja immer im Kommentar darüber.
Mitglieder in diesem Forum: 0 Mitglieder und 8 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.