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

Aktuelle Zeit: So Jul 20, 2025 00:33

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 2 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Frame Buffer Object (FBO) [solved]
BeitragVerfasst: Mi Dez 05, 2007 12:50 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Mär 09, 2005 15:54
Beiträge: 372
Wohnort: München
Programmiersprache: Delphi, C#, FPC
Ich hab mir mal vorgenommen, die Extension Frame Buffer Object mal auszuprobieren. Aber ich bekomms einfach nicht hin. Ich hab bereits folgende Papers angeschaut, doch irgendwie funktioniert es bei mir nicht so ganz:

- http://www.gamedev.net/reference/programming/features/fbo1/
- http://http.download.nvidia.com/developer/presentations/2005/GDC/OpenGL_Day/OpenGL_FrameBuffer_Object.pdf

Egal was ich mache, ich schaff es einfach nicht, den FrameBuffer zu erstellen. Hier ist mein Code:

Dieser Code überprüft den FrameBuffer Status
Code:
  1.  
  2. procedure CheckFrameBufferStatus;
  3. var
  4.   s: GLenum;
  5. begin
  6.   s := glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
  7.   case s of
  8.   GL_FRAMEBUFFER_COMPLETE_EXT:                         Exit;
  9.   GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT:           raise Exception.Create('Incomplete attachment');
  10.   GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT:   raise Exception.Create('Missing attachment');
  11.   GL_FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT_EXT: raise Exception.Create('Duplicate attachment');
  12.   GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT:           raise Exception.Create('Incomplete dimensions');
  13.   GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT:              raise Exception.Create('Incomplete formats');
  14.   GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT:          raise Exception.Create('Incomplete draw buffer');
  15.   GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT:          raise Exception.Create('Incomplete read buffer');
  16.   GL_FRAMEBUFFER_UNSUPPORTED_EXT:                     raise Exception.Create('Framebuffer configuration unsupported');
  17.   end;
  18. end;
  19.  


So Initialisiere ich den FrameBuffer:
Code:
  1.  
  2. var    FBO, DepthBuffer, Texture : TGLuint;
  3.  
  4. procedure CreateFrameBufferObject;
  5. begin
  6.   glEnable(GL_TEXTURE_2D);
  7.  
  8.   glGenFramebuffersEXT(1, @FBO);
  9.   glGenRenderbuffersEXT(1, @DepthBuffer);
  10.   glGenTextures(1, @Texture);
  11.  
  12.   glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, FBO);
  13.   glBindTexture(GL_TEXTURE_2D, Texture);
  14.   glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, 512, 512, 0, GL_RGBA, GL_UNSIGNED_BYTE, nil);
  15.  
  16.   glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, Texture, 0);
  17.  
  18.   glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, DepthBuffer);
  19.   glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT24, 512, 512);
  20.  
  21.   glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, DepthBuffer);
  22.  
  23.   CheckFrameBufferStatus;
  24. end;
  25.  


Und hier sind die Start- bzw Endroutinen die beim Rendern in den FrameBuffer angewendet werden
Code:
  1.  
  2. procedure BeginFrameBufferRendering;
  3. begin
  4.   glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, FBO);
  5.   glPushAttrib(GL_VIEWPORT_BIT);
  6.   glViewport(0, 0, 512, 512);
  7. end;
  8.  
  9. procedure EndFrameBufferRendering;
  10. begin
  11.   glPopAttrib();
  12.   glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
  13. end;
  14.  



Ich bekomms einfach nicht gebacken, was mach ich falsch? Ich bekomm die ganze Zeit die Meldung "Framebuffer configuration unsupported".

_________________
Aktuelles Projekt: Gael - Development Blog
Website: LightBlackSoft.com


Zuletzt geändert von littleDave am Mi Dez 05, 2007 13:15, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 05, 2007 13:15 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Mär 09, 2005 15:54
Beiträge: 372
Wohnort: München
Programmiersprache: Delphi, C#, FPC
Ah, habs gerade selbst noch hinbekommen: Es lag daran, dass ich das Filtering der Textur nicht eingestellt hatte. Musste nach
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, 512, 512, 0, GL_RGBA, GL_UNSIGNED_BYTE, nil); (Zeile 14) noch folgendes einfügen:

Code:
  1.  
  2. glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  3. glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
  4.  


So, jetzt funktionierts :)

_________________
Aktuelles Projekt: Gael - Development Blog
Website: LightBlackSoft.com


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


Wer ist online?

Mitglieder in diesem Forum: Bing [Bot] und 7 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.015s | 18 Queries | GZIP : On ]