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

Aktuelle Zeit: Fr Jul 18, 2025 16:55

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



Ein neues Thema erstellen Auf das Thema antworten  [ 2 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Problem mit glCopyTexSubImage2D...
BeitragVerfasst: Mi Mär 26, 2008 13:03 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Hi ihr,

Nun habe ich auch mal wieder ein mehr oder weniger kleines Problem. Und zwar habe ich entsetzt festgestellt, dass ich ein meiner PerFrame-Methode glCopyTexImage2D verwende anstatt glCopyTexSubImage2D, was für die Performance wohl gift sein sollte.

Jetzt wollte ich das umbauen und dachte das wird ja wohl kein Problem darstellen... hmm Pustekuchen. Wenn ich glCopyTexSubImage2D anstatt des anderen Aufrufes verwende, bekomme ich nur eine schwarze Textur. Ich initialisiere die Textur wiefolgt:
Code:
  1.   glGenTextures(1, @GameScene);
  2.   glBindTexture(GL_TEXTURE_2D, GameScene);
  3.   glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
  4.   glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
  5.   glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
  6.   glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
  7.   glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, ASettings.FScreenWidthPOT, ASettings.FScreenHeightPOT, 0, GL_RGB, GL_UNSIGNED_BYTE, nil);
  8.   WriteLn(gluErrorString(glGetError()));
  9.   glBindTexture(GL_TEXTURE_2D, 0);        
  10.  

(FScreenWidthPOT = nächst höhere POT zur Breite, respektive für FScreenHeightPOT)

Dann in jedem Frame:
Code:
  1.     glBindTexture(GL_TEXTURE_2D, GameScene);
  2.     glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, ASettings.ScreenWidth, ASettings.ScreenHeight, 0);


Allerdings wie gesagt, ich erhalte nur ein schwarzes Bild. Wenn ich aber das ganze mit glCopyTexImage2D mache, dann funktioniert es wunderbar.

An dieser Stelle noch eine Frage: Wenn man glCopyTexImage2D verwendet, ohne die Textur vorher freizugeben, kann es dann zu einem Speicherleck kommen?

//Edit: Ok, das Hauptproblem habe ich gelöst... Ist mal wieder eines dieser Stell-Die-Frage-Und-Sieh-Zwei-Minuten-Später-Die-Antwort-Probleme. Ich weiss zwar nicht, wie diese 0 am ende der Parameterliste von glCopyTexSubImage2D dort hin kommt, aber jetzt habe ich die Reihenfolge wieder in Ordnung gebracht und nun funktionierts.
Aber meine Frage bleibt: Wenn man glCopyTexImage2D verwendet, ohne die Textur vorher mit glDeleteTextures oder so freigibt, kann man ein Speicherleck erzeugen?

Gruß Lord Horazont

_________________
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:
BeitragVerfasst: Mi Mär 26, 2008 14:46 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Zitat:
Wenn man glCopyTexImage2D verwendet, ohne die Textur vorher mit glDeleteTextures oder so freigibt, kann man ein Speicherleck erzeugen?

Also ich sage jetzt einfach mal nein. Denn eigentlich muss man eine TexturID nicht explizit erstellen sondern kann diese auch selber festlegen. glGenTextures dient dazu um sich freie Texturen geben zu lassen. Sollte eine ID bereits belegt sein, dann wird das entsprechende Texturobjekt weiter benutzten. Ähnlich wie bei glTexImage2D. Und dann muss sich der Treiber darum kümmern, dass es nicht zu einem Speicherloch kommt. Denn an der Textur kleben auch noch Einstellungen die beim Löschen verlohren gingen.

Bei dauerhaftem Nichtgebrauch sollte die Textur aber natürlich gelöscht werden, denn der Treiber weiß nicht wann eine Textur nicht mehr benötigt wird. Außer die Anwenung wurde geschlossen. Aber ich denke das dürfte klar sein. ;)


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: 0 Mitglieder 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:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 16 Queries | GZIP : On ]