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

Aktuelle Zeit: Fr Jul 18, 2025 08:11

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



Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: FBO geht nicht
BeitragVerfasst: Fr Jun 18, 2010 19:52 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 11, 2009 08:02
Beiträge: 532
Programmiersprache: pascal (Delphi 7)
Hai

Ich weiß, ich sollte auch mal die Klappe halten, aber ich hab wieder mal ein problem.

Ich wollte FBOs benutzen, hab den Code aus dem Tutorial mit copy&paste übernommen (ich hab das Tutorial auch gelesen), und es geht nicht :(

Code:
TFrameBufferObject = class
  protected
    FBO:   GLuInt;
    depth: GLuInt;
    tex:   GLuInt;

    FWidth,
    FHeight: Integer;
  public
    procedure Bind;
    procedure UnBind;

    constructor Create(aWidth, aHeight: Integer);
    destructor Destroy; override;

    property Texture: GLuInt read tex;
  end;


Code:
implementation

var
  CurrentFrameBuffer: TFrameBufferObject = nil;

procedure TFrameBufferObject.Bind;
begin
  if CurrentFrameBuffer <> nil then CurrentFrameBuffer.UnBind;

  glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo);
  glPushAttrib(GL_VIEWPORT_BIT);
  glViewPort(0, 0, FWidth, FHeight);

  CurrentFrameBuffer:= self;
end;

procedure TFrameBufferObject.UnBind;
begin
  if CurrentFrameBuffer <> self then begin
    showMessage('tried to unbind inactive FrameBuffer');
    exit;
  end;

  glPopAttrib;
  glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);

  CurrentFrameBuffer:= nil;
end;

constructor TFrameBufferObject.Create;
var
  error: GlEnum;
begin
  inherited Create;
  glGenFramebuffersEXT(1, @FBO);
  glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, FBO);

  glGenRenderbuffersEXT(1, @depth);
  glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, depth);
  glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT, aWidth, aHeight);
  glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT,
    GL_RENDERBUFFER_EXT, depth);

  glGenTextures(1, @tex);
  glBindTexture(GL_TEXTURE_2D, tex);
  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER, GL_NEAREST);
  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER, GL_NEAREST);
  glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA,  aWidth, aHeight, 0, GL_RGBA, GL_Float, nil);
  glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, tex, 0);

  error := glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
  case error of
    GL_FRAMEBUFFER_COMPLETE_EXT:
      Exit;
    GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT:
      raise Exception.Create('Incomplete attachment');
    GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT:
      raise Exception.Create('Missing attachment');
    GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT:
      raise Exception.Create('Incomplete dimensions');
    GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT:
      raise Exception.Create('Incomplete formats');
    GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT:
      raise Exception.Create('Incomplete draw buffer');
    GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT:
      raise Exception.Create('Incomplete read buffer');
    GL_FRAMEBUFFER_UNSUPPORTED_EXT:
      raise Exception.Create('Framebufferobjects unsupported');
  end;

  FWidth:= aWidth;
  FHeight:= aHeight;

  glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);                                               {edit}
end;

destructor TFrameBufferObject.Destroy;
begin
  glDeleteFramebuffersEXT(1, @FBO);
  glDeleteRenderbuffersEXT(1, @depth);
  glDeleteTextures(1, @tex);
end;


Diese Zeile
Code:
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA,  aWidth, aHeight, 0, GL_RGBA, GL_Float, nil);

hab ich geändert, mit der ursptünglichen Zeile gabs ne Exception (incomplete Draw Buffer)

so wies jetzt ist seh ich zwar was, aber halt nur nen grünen Hintergrund. Das passt zwar zu dem gesetzten Material, entspricht aber absolut nicht dem, was ich zeichne.


Zuletzt geändert von sharkman am So Jun 20, 2010 14:55, insgesamt 2-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: FBO geht nicht
BeitragVerfasst: Sa Jun 19, 2010 13:41 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Spontan würde ich sagen, du passt deine Projektionsmatrix nicht der größe des Framebuffers an. Du setzt zwar den Viewport, aber das aktualisiert nicht die Projektionsmatrix, die du mit gluPerspective oder konsorten erstellst.

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 networkmy 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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: FBO geht nicht
BeitragVerfasst: So Jun 20, 2010 14:53 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 11, 2009 08:02
Beiträge: 532
Programmiersprache: pascal (Delphi 7)
Also, erstmal Danke, dass ich auf so einen Beitrag überhaupt eine Antwort bekomme. Immerhin wars doch sehr viel Code und sehr wenig Beschreibung des Problems.

Zitat:
du passt deine Projektionsmatrix nicht der größe des Framebuffers an

stimmt. war aber nicht das einzige Problem. Mittlerweile zeichnet das Programm gar nicht mehr, auch dann nicht, wenn das FBO nicht gebunden ist :?: .

Ein weiterer Fehler war, dass UnBind nicht funktionierte, wenn das FBO nach Create noch gebunden war, ist aber mittlerweile behoben (einfach dadurch, dass das FBO nach Create nicht mehr gebunden wird).


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: FBO geht nicht
BeitragVerfasst: Di Sep 28, 2010 14:12 
Offline
DGL Member

Registriert: Do Apr 22, 2010 17:17
Beiträge: 543
hey sharkman, kannst du deine FBO Unit mal online stellen? Brauche auch eine FBO Klasse, dann brauch ich mir die nicht auch nachbauen..
Mercie
Thomas


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: FBO geht nicht
BeitragVerfasst: Di Sep 28, 2010 14:33 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 11, 2009 08:02
Beiträge: 532
Programmiersprache: pascal (Delphi 7)
Zitat:
hey sharkman, kannst du deine FBO Unit mal online stellen?
Naja, da ist irgendwo ein Bug drinnen, den ich nicht finde. Wird dir also wahrscheinlich nicht helfen. Da wärs glaub ich eher sinnvoll, wenn wer was online stellen würd, bei dems funktioniert (darf als Bitte verstanden werden ;) ). Noch dazu, wo meine FBO unit seeehr unübersichtlich ist, sehr wenig kann (und nichtmal das richtig), und außerdem noch unmengen anderen Mist drinnen hat, der auch nicht ganz einwandfrei geht.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: FBO geht nicht
BeitragVerfasst: Di Sep 28, 2010 14:44 
Offline
DGL Member

Registriert: Do Apr 22, 2010 17:17
Beiträge: 543
also hast du quasi ein FBO noch nicht zum laufen gebracht?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: FBO geht nicht
BeitragVerfasst: Di Sep 28, 2010 15:40 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 11, 2009 08:02
Beiträge: 532
Programmiersprache: pascal (Delphi 7)
genau. Wobei das jetzt nicht heißt, dass ichs in der Zwischenzeit dauernd versucht hab. Ich habs mal versucht, und dann irgendwann aufgegeben, weil das Projekt, in dem ichs gebraucht hätte, auch an (vielen) anderen Stellen nicht mehr ganz so wollte, wie ich.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: FBO geht nicht
BeitragVerfasst: Mi Sep 29, 2010 09:15 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
Mein FBO läuft (ich habe eine ziemlich alte Nvidia-Karte). Ich häng es hier mal rein, denn ich hatte am Anfang auch Schwierigkeiten. Allerdings findet ihr hier nur den reinen FBO, keine Perspektiv-Matrix Einstellungen, weil solche Dinge über meine ganze Engine verstreut sind. Vielleicht hilft es ja.
Viele Grüße,
Traude


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.


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


Wer ist online?

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